Don't like ads? PRO users don't see any ads ;-)
Guest

rbhatia

By: a guest on Jun 26th, 2012  |  syntax: C  |  size: 5.56 KB  |  hits: 12  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /*
  2. Attempt 2
  3. + Join or create a secure network
  4. + Broadcast data to all nodes
  5. + Create filename depending on the time
  6.   + time uses RTC
  7.   - time will use GPS time
  8.   + add data to file
  9.   + create new file on each day
  10.   - check if space is available
  11.     - if not, delete the oldest file (or last 10 oldest)
  12. */
  13.  
  14. #define ORIG "OceanWasp10" // name of this node
  15. #define KEY "waspmote12345678" // security key
  16. #define MS_MINI_DELAY 50 // milliseconds for each mini delay. Mini delay is needed after starting components as a safety
  17. #define MAX_TX_SIZE 1500
  18.  
  19. // network
  20. uint8_t  destination[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF};
  21. uint8_t  PANID[2] = {0x12,0x34};
  22.  
  23. char* filename = "YYYY-MM-DD.txt";
  24. char* data;
  25. int lastDate = 0;
  26. int numLoop = 0;
  27.  
  28. // connect to a secure network
  29. // returns 0 if no error, 1 is there is an error
  30. int connectToNetwork()
  31. {
  32.   // Chosing a channel : channel 0x0A
  33.   xbeeDM.setChannel(0x0A);
  34.   if( xbeeDM.error_AT ) XBee.println("Error while changing channel");
  35.  
  36.   // Chosing a PANID : PANID=0x1234
  37.   xbeeDM.setPAN(PANID);
  38.   if( xbeeDM.error_AT ) XBee.println("Error while changing PANID");  
  39.  
  40.   // Enabling security
  41.   xbeeDM.encryptionMode(1);
  42.   if( xbeeDM.error_AT ) XBee.println("Error while enabling security");
  43.  
  44.   xbeeDM.setLinkKey(KEY);
  45.   if( xbeeDM.error_AT ) XBee.println("Error while setting Key");
  46.  
  47.   // Set Node name
  48.   xbeeDM.setNodeIdentifier(ORIG);
  49.   if( xbeeDM.error_AT ) XBee.println("Error while setting Node name");
  50.  
  51.   // Keep values
  52.   xbeeDM.writeValues();
  53.   if( xbeeDM.error_AT ) XBee.println("Error while storing values");
  54.  
  55.   return xbeeDM.error_AT;
  56. }
  57.  
  58. // send out a packetized string of data
  59. int sendpaq(char* msg)
  60. {
  61.   packetXBee* paq_sent;
  62.   paq_sent=(packetXBee*) calloc(1,sizeof(packetXBee));
  63.   paq_sent->mode=BROADCAST;
  64.   paq_sent->MY_known=0;
  65.   paq_sent->packetID=0x52;
  66.   paq_sent->opt=0;
  67.  
  68.   xbeeDM.hops=0;
  69.   xbeeDM.setOriginParams(paq_sent, ORIG, NI_TYPE);
  70.   xbeeDM.setDestinationParams(paq_sent, destination, msg, MAC_TYPE, DATA_ABSOLUTE);
  71.  
  72.   int state = xbeeDM.sendXBee(paq_sent);
  73.   free(paq_sent);
  74.   paq_sent = NULL;
  75.   return state;
  76. }
  77.  
  78. // show available memory
  79. void printMem()
  80. {
  81.   USB.print("Memory: ");
  82.   USB.println( freeMemory() );
  83. }
  84.  
  85. // get data and return it
  86. char* getData()
  87. {
  88.   sprintf(data,"time=%02d:%02d:%02d,x=%d,y=%d,z=%d,temp=%d,bat=%d%c%c",RTC.hour,RTC.minute,RTC.second,ACC.getX(),ACC.getY(),ACC.getZ(),(int) RTC.getTemperature(),PWR.getBatteryLevel(),'\r','\n');
  89.   return data;
  90. }
  91.  
  92. char* getFileName()
  93. {
  94.   RTC.getTime(); // update time
  95.   delay(MS_MINI_DELAY);
  96.   sprintf(filename, "20%02d-%02d-%02d.txt",RTC.year,RTC.month,RTC.date);  
  97.   return filename;
  98. }
  99.  
  100. int saveToSD()
  101. {
  102.   int newDate = RTC.date;
  103.  
  104.   if (newDate != lastDate)
  105.   {
  106.     lastDate = newDate;
  107.     filename = getFileName();
  108.     delay(MS_MINI_DELAY);
  109.   }
  110.  
  111.   USB.print("Filename: ");
  112.   USB.println(filename);
  113.   delay(MS_MINI_DELAY);
  114.  
  115.   // if file does not exist, create it
  116.   if(SD.isFile(filename) == -1)
  117.   {
  118.     USB.println("File does not exist. Attempting to create...");
  119.     delay(MS_MINI_DELAY);
  120.     while (!SD.create(filename))
  121.     {
  122.       USB.print("Could not create file: ");
  123.       USB.println(filename);
  124.       delay(MS_MINI_DELAY);
  125.     }
  126.     USB.print("File created: ");
  127.     USB.println(filename);
  128.     delay(MS_MINI_DELAY);
  129.   }
  130.   else
  131.     USB.println("File name exists.");
  132.  
  133.   // if the disk free is less than the maximum
  134.   // transmit size, then delete the oldest 20 files
  135.   if (SD.getDiskFree() < MAX_TX_SIZE)
  136.   {
  137.     USB.println( SD.ls() );
  138.     for (int j = 0; j < 20; j++)
  139.       SD.del( SD.ls(0) );
  140.     USB.println( SD.ls() );
  141.   }
  142.  
  143.   if(SD.isFile(filename) == 1)
  144.   {
  145.     USB.println("Appending...");
  146.     while (!SD.appendln(filename, data))
  147.     {
  148.       USB.println("- Failed to add");
  149.       delay(MS_MINI_DELAY);
  150.     }
  151.     USB.println("+ Added!");
  152.     USB.print("New filesize: ");
  153.     USB.println( SD.getFileSize( filename ) );
  154.     USB.print("Disk free: ");
  155.     USB.println(SD.getDiskFree());
  156.     return 1;
  157.   }
  158.   else
  159.   {
  160.     USB.println("Unknown error.");
  161.     return 0;
  162.   }
  163. }
  164.  
  165. void setup()
  166. {
  167.   xbeeDM.init(DIGIMESH,FREQ900M,NORMAL);
  168.   delay(MS_MINI_DELAY);
  169.   xbeeDM.ON();
  170.   delay(MS_MINI_DELAY);
  171.  
  172.   RTC.ON();
  173.   delay(MS_MINI_DELAY);
  174.   RTC.setTime( 12, 07, 25, 6, 10, 30, 0 );
  175.   delay(MS_MINI_DELAY);
  176.   lastDate = RTC.date;
  177.  
  178.   ACC.ON();
  179.   delay(MS_MINI_DELAY);
  180.  
  181.   SD.ON();
  182.   delay(MS_MINI_DELAY);
  183.  
  184.   USB.begin();
  185.   delay(MS_MINI_DELAY);
  186.  
  187.   USB.println("Connecting...");
  188.   while (connectToNetwork() > 0)
  189.   {
  190.     USB.println("fail");
  191.     delay(MS_MINI_DELAY);
  192.   }
  193.   USB.println("Connected!");
  194.  
  195.   USB.println("Init data");
  196.   printMem();
  197.   data = (char*) calloc(50, sizeof(char*));
  198.   int size = strlen( getData() ) + 2;
  199.   free(data);
  200.   data = NULL;
  201.   printMem();
  202.   data = (char*) calloc(size, sizeof(char*));
  203.   printMem();
  204.  
  205.   USB.println("Init filename");
  206.   /*filename = (char*) calloc(50, sizeof(char*));
  207.   size = strlen( getFileName() ) + 2;
  208.   free(filename);
  209.   filename = NULL;
  210.   printMem();
  211.   filename = (char*) calloc(size, sizeof(char*));*/
  212.   //free(filename);
  213.   //filename = NULL;
  214.   getFileName();
  215.   printMem();
  216. }
  217.  
  218. void loop()
  219. {
  220.   USB.print("Loop: ");
  221.   USB.println( numLoop );
  222.   delay(MS_MINI_DELAY);
  223.  
  224.   data = getData();
  225.   sendpaq( data );
  226.   delay(MS_MINI_DELAY);
  227.  
  228.   saveToSD();
  229.   delay(MS_MINI_DELAY);
  230.  
  231.   printMem();
  232.   delay(MS_MINI_DELAY);
  233.  
  234.   USB.flush();
  235.   delay(MS_MINI_DELAY);
  236.  
  237.   XBee.flush();
  238.  
  239.   numLoop += 1;
  240.   USB.println();
  241.   delay(1000);
  242. }