Society of Robots - Robot Forum

Software => Software => Topic started by: SlightlyNormal on August 01, 2012, 11:28:39 PM

Title: AxonII based Robot: Will not read from an SD card
Post by: SlightlyNormal on August 01, 2012, 11:28:39 PM
I have built a robot with an Axon II microcontroller and several other components built on a LEGO chassis. Here is a pic of the bot: http://home.fossilfolk.com/_/rsrc/1341900528772/home/mike/mikerobot.jpg (http://home.fossilfolk.com/_/rsrc/1341900528772/home/mike/mikerobot.jpg)

I am testing out an sd card to store matrices for a mapping program that I am working on. The program I am using is just an sd card test. (the code is ugly) The robot will make folders and files and output, but it will not read text (even text that the robot itself outputted) into a string or char[].

I expect it to make two files, one with " Text Into A File! 123abc " and one with "Text Into ". The first one works, the other one is always blank. I have tried letting it read RTTTL files and play them but it won't read anything into the char[].

Here is my code:


#include "sys/axon2.h"
#include "Storage/sdCard.h"
#include "Storage/FileSystem/FAT.h"
#include "rprintf.h"
#include "spi.h"
#include "spisw.h"
#include "tone.h" //L5 is tone pin

#define MOSI B2
#define MISO B3
#define SCLK B1
#define CS L0

SD_CARD card = MAKE_SD_CARD(CS); //miso- orange, mosi- grey, clk- white, green L0, red 3.3+, arrows align.
SPI_DEVICE_LIST devices[] = { &card._device_};
SPI sd_spi = MAKE_SPI(devices);
DISK disk;
FILE test_file;
boolean written = 0;
boolean initRslt;

TONE_PLAYER testTone = MAKE_TONE_PLAYER(TIMER1, L5);

void appInitHardware(void)
{
   spiBusInit(&sd_spi,1);
   initRslt = sdCardInit(&card);
   diskInit(&disk, 10, sdCardGetStorageClass(), &card);
   segled_put_char(&led_display, 'A');
}

TICK_COUNT appInitSoftware(TICK_COUNT loopStart)
{
   segled_put_char(&led_display, 'B');
   rprintfInit(fileGetWriter(&test_file));   
   return 0;
}

TICK_COUNT appControl(LOOP_COUNT loopCount, TICK_COUNT loopStart)
{   
   string tune;
   if (!initRslt)
      segled_put_char(&led_display, 'o');
   if(written)
   {
      return 500000;
   }
   
   diskMkdir(&disk, "test_folder");
   fileOpen(&disk, &test_file, "/test_folder/test_file.txt", 'r');
   fileReadNext(&test_file, 10, tune);
   fileClose(&test_file);
   segled_put_char(&led_display, 'C');
   fileOpen(&disk, &test_file, "/test_folder/test2_file.txt", 'w');
   rprintfStr(tune);
   fileClose(&test_file);
   tonePlay(&testTone, 1568, 200);//high G
   clockWaitms(200);
   written = 1;
   return 1000;
}
Title: Re: AxonII based Robot: Will not read from an SD card
Post by: Webbot on August 02, 2012, 02:27:32 PM
There's quite a lot wrong with the code  :-X.
You seem to be using Version 1 of WebbotLib. Suggest you use Version 2 + Project Designer (from webbot.org.uk). It will then generate some example code in either C or C++ so you can see how you should be talking to the sdCard etc
Title: Re: AxonII based Robot: Will not read from an SD card
Post by: SlightlyNormal on August 03, 2012, 01:12:19 AM
Thanks for the reply. I will try your suggestion and post my results. I had forgotten about the project designer lol. :-[
Title: Re: AxonII based Robot: Will not read from an SD card
Post by: SlightlyNormal on August 06, 2012, 01:19:56 PM
I used the project designer to create a new AVR project file for my robot, and it generated the example.txt that you mentioned. However, the example.txt does not mention how to use the SD card. I've included both the exported project file (just replace the .txt with .prj) and the example.txt , so you can verify.
Thanks again!

PS: I also was unable to change the L293D motor driver Supply:Motor Battery to my 4.8v drive battery. I am using the AxonII with the solder bridge cut for separate logic and drive batteries, is there any way I can specify that in the Project Designer?
Title: Re: AxonII based Robot: Will not read from an SD card
Post by: Webbot on August 07, 2012, 12:08:24 PM
For the L293D just add a new power bus (half way down the left side) - and then tell the L293D to use that.

For the SDcard - just checkout the docs. If you are using C then: http://webbot.org.uk/WebbotLibDocs/34649.html (http://webbot.org.uk/WebbotLibDocs/34649.html) and its link to FAT.h if you want PC readable files. For C++ then: http://webbot.org.uk/WebbotLibDocs2/46675.html (http://webbot.org.uk/WebbotLibDocs2/46675.html) and http://webbot.org.uk/WebbotLibDocs2/46708.html (http://webbot.org.uk/WebbotLibDocs2/46708.html) and http://webbot.org.uk/WebbotLibDocs2/46810.html (http://webbot.org.uk/WebbotLibDocs2/46810.html)
Title: Re: AxonII based Robot: Will not read from an SD card
Post by: Admin on August 10, 2012, 07:45:13 AM
The Axon Mote uses WebbotLibs uSD code.

See here for example usage:
http://societyofrobots.com/axon_mote/axon_mote_code.shtml#usd (http://societyofrobots.com/axon_mote/axon_mote_code.shtml#usd)
Title: Re: AxonII based Robot: Will not read from an SD card
Post by: SlightlyNormal on September 24, 2012, 07:47:43 PM
Okay, Finally figured out what I needed to do after a break from robotics. updating my webbotlib fixed it all. I have to say that it is really helpful to have both the maker of my microcontroller and the writer of the software that I use, respond to my noob level question. Thank you both!