Latest

Dependencies:   serial_terminal sample_hardware PLL_Config SDCard BMP280 Networkbits TextLCD SDBlockDevice

Revision:
27:bb8d4c883e1b
Parent:
26:94238a308ff9
Child:
28:7fccaef8fa72
--- a/main.cpp	Wed Dec 19 15:54:20 2018 +0000
+++ b/main.cpp	Fri Dec 21 09:59:24 2018 +0000
@@ -18,8 +18,9 @@
 
 //Global variables
 
-unsigned int newestIndex = BUFFERSIZE-1;    //First time it is incremented, it will be 0
-unsigned int oldestIndex = BUFFERSIZE-1;
+
+unsigned int newestIndex = 0;    //First time it is incremented, it will be 0
+unsigned int oldestIndex = 0;
 FILE* fp;
 FATFileSystem* fs;
 
@@ -79,6 +80,10 @@
 Mutex SDlock;
 
 
+//TEST FOR BUFFER CHANGES
+unsigned int saveIndex = 0;
+
+
 int main() {   
     timeData = new tm;
     pc = new RawSerial(USBTX, USBRX);
@@ -152,26 +157,29 @@
     while(true)
     {
         //High priority thread 
-        Thread::signal_wait(TAKE_SAMPLE);
-        
+        Thread::signal_wait(TAKE_SAMPLE);        
         //int32_t Nspaces = spaceAvailable.wait(); //Blocking if space is not available //Dont check if there is space available becuase we are overwriting
+        
         bufferLock.lock();
-        //Update buffer
-        newestIndex = (newestIndex+1) % BUFFERSIZE;  //CIRCULAR
+        //Update buffer             
         buffer[newestIndex].updatetemp(sensor.getTemperature());
         buffer[newestIndex].updatepress(sensor.getPressure());
         buffer[newestIndex].updatelight(adcIn.read());
-        buffer[newestIndex].updateTime();
-        
+        buffer[newestIndex].updateTime();        
+        newestIndex = (newestIndex+1) % BUFFERSIZE;  //CIRCULAR
         //bufferLock.unlock(); //normally here, moved due to updating queues.
-        samplesInBuffer.release();  
-              
+        samplesInBuffer.release();
+        
+        if (newestIndex == oldestIndex)
+        {
+            oldestIndex = (oldestIndex+1) % BUFFERSIZE;     
+        }    
+             
         //Pass onto queues
-        LCDqueue.call(LCD_display, buffer[newestIndex].gettemp(),buffer[newestIndex].getpress(),buffer[newestIndex].getlight());
+        LCDqueue.call(LCD_display, buffer[newestIndex-1].gettemp(),buffer[newestIndex-1].getpress(),buffer[newestIndex-1].getlight());
         bufferLock.unlock();
         
-        //Write to the SD card when i have 120 samples in the buffer
-        if (newestIndex == 119)
+        if (newestIndex == ((saveIndex + 60) % BUFFERSIZE)) //correct?
         {
             //save to SD card
             consumer_thread.signal_set(STORE_DATA);
@@ -210,15 +218,23 @@
             //Nested locks probably a bad idea!
             bufferLock.lock();
             SDlock.lock();
-            for (int i = 0; i<BUFFERSIZE; i++)
-            {       
-                fprintf(fp,"%s,%5.2f,%5.2f,%5.2f\n\r", buffer[i].getTime(), buffer[i].gettemp(), buffer[i].getpress(), buffer[i].getlight());         
+            //read first then update oldestIndex?
+            int i = 0;
+
+            while (saveIndex != newestIndex)
+            {
+                fprintf(fp,"%s,%5.2f,%5.2f,%5.2f\n\r", buffer[saveIndex].getTime(), buffer[saveIndex].gettemp(), buffer[saveIndex].getpress(), buffer[saveIndex].getlight());
+                saveIndex = (saveIndex+1) % BUFFERSIZE;
+                i++;   
             }
             SDlock.unlock();
             bufferLock.unlock();
             
             printlock.lock();
-            pc->printf("SD card updated\r\n");
+            pc->printf("SD card updated with %d samples\r\n", i);
+            pc->printf("oldestIndex : %d\n\r", oldestIndex);
+            pc->printf("newestIndex : %d\n\r", newestIndex);
+            pc->printf("saveIndex : %d\n\r", saveIndex);
             printlock.unlock();
         }        
         fclose(fp);