Proj 324 Final

Fork of ELEC351_Group_T by Plymouth ELEC351 Group T

Revision:
25:36699ed589ab
Parent:
24:7d2da96e05ad
Child:
26:78f5e454e59f
diff -r 7d2da96e05ad -r 36699ed589ab main.cpp
--- a/main.cpp	Sat Dec 30 21:31:20 2017 +0000
+++ b/main.cpp	Mon Jan 01 20:14:19 2018 +0000
@@ -12,96 +12,27 @@
 */
 
 //Includes and Definitions
-#include "sample_hardware.hpp"
-#include "Networkbits.hpp"
-#include "rtos.h"
-#include "LED.hpp"
-#include "DATA.hpp"
-#include "LCD.hpp"
-#define SamplingTime 1
-#define NotSamplingTime 0
-#define Print_Time_to_LCD 1
-#define Dont_Print_Time_to_LCD 0
-#define TimerInterval 2 //This is in seconds
-#define EDGE_RISEN 1
-#define EDGE_FALLEN 0
-#define mailsize 5
-#include <iostream>
-Serial pc(USBTX, USBRX);
-//SW1+SW2 are declared as interrupt ins in sample hardware.cpp
-
-void Serial_Comms();
-
-//Thread IDs
-osThreadId idMain;
-osThreadId id1;
-osThreadId id2;
-osThreadId id3;
-osThreadId id4;
-osThreadId id5;
-
-
-Timeout sw1TimeOut;//Used to prevent switch bounce
-
-LED Red_led(PE_15);
-LED Yellow_led(PB_10);
-LED Green_led(PB_11);
-
-LCD LCD(D8,D9,D4,A0,A1,A2,A3,D7,D6,D3,D1); 
-char LCD_buffer [50];
-int LCD_sprintf;
-
-//Tickers
-
-Ticker Sample_timer;
-
-//Threads
-Thread t1;
-Thread t2;
-Thread t3;
-Thread t4;
-Thread t5;
-
-double temp = 0;
-double pressure = 0;
-double lux = 0;
-string buffer_time = 0;
-
-char buffer[32];
-char scom_time_buffer[32];
-char msel_time_buffer[32];
-
-void SW1FallingEdge();
-void SW1TimeOutHandler();
-
-
-
-using namespace std;
-
-int mode = 0;
-
-Mail<DATA, mailsize> mail_box;       //Mail Queue, Type DATA, Capacity mailsize(defined above), name mail_box
+#include "SETUP.hpp"
 
 void Network()                                  //Interrupt service routine for handling the timeout
 {
     osEvent evt_network = mail_box.get();                        //Get the latest entry from "mail_box"
-        
-    if (evt_network.status == osEventMail)
-    {
+
+    if (evt_network.status == osEventMail) {
         DATA *Rec_Data_Network = (DATA*)evt_network.value.p;                    //Create pointer to mailbox
         DATA msg_network;                                                       //Create temporary instance of DATA class
-            
+
         msg_network.set_time(Rec_Data_Network->get_time());                     //Copy time from mailbox to temporary instance
         msg_network.set_temperature(Rec_Data_Network->get_temperature());       //Copy temperature from mailbox to temporary instance
         msg_network.set_pressure(Rec_Data_Network->get_pressure());             //Copy pressure from mailbox to temporary instance
-        msg_network.set_light(Rec_Data_Network->get_light());                   //Copy light from mailbox to temporary instance   
+        msg_network.set_light(Rec_Data_Network->get_light());                   //Copy light from mailbox to temporary instance
         mail_box.free(Rec_Data_Network);                                        //Free space in the mailbox (delete earliest sample taken)
-    
+
         networktest();
-    }                                                
+    }
 }
 
-void SW1TimeOutHandler() 
+void SW1TimeOutHandler()
 {
     sw1TimeOut.detach();        //Stop the timeout counter firing
     SW1.fall(&SW1FallingEdge);  //Now wait for a falling edge
@@ -109,72 +40,66 @@
 void SDWrite()//End of skype chat
 {
     osEvent evt_sd = mail_box.get();                        //Get the latest entry from "mail_box"
-        
-    if (evt_sd.status == osEventMail)
-    {
+
+    if (evt_sd.status == osEventMail) {
         DATA *Rec_Data_SD = (DATA*)evt_sd.value.p;                      //Create pointer to mailbox
         DATA msg_sd;                                                    //Create temporary instance of DATA class
-            
+
         msg_sd.set_time(Rec_Data_SD->get_time());                       //Copy time from mailbox to temporary instance
         msg_sd.set_temperature(Rec_Data_SD->get_temperature());         //Copy temperature from mailbox to temporary instance
         msg_sd.set_pressure(Rec_Data_SD->get_pressure());               //Copy pressure from mailbox to temporary instance
         msg_sd.set_light(Rec_Data_SD->get_light());                     //Copy light from mailbox to temporary instance
         mail_box.free(Rec_Data_SD);                                     //Free space in the mailbox (delete earliest sample taken)
-    }    
+    }
 }
 //Interrupt service routive for SW1 falling edge (release)
 void SW1FallingEdge()
 {
     SW1.fall(NULL);                             //Disable this interrupt
-    Yellow_led.Toggle();                        //Toggle LED  
-    
+    Yellow_led.Toggle();                        //Toggle LED
+
     mode = mode +1;//Cycles through modes
-    if(mode >1)
-    {
-     mode = 0;   
+    if(mode >1) {
+        mode = 0;
     }
-      
-    sw1TimeOut.attach(&SW1TimeOutHandler, 0.2); //Start timeout counter    
+
+    sw1TimeOut.attach(&SW1TimeOutHandler, 0.2); //Start timeout counter
 }
 void ModeSelection()
 {
-    while(1){
+    while(1) {
 
         //Thread::wait(1000);
-        
+
         osEvent evt_lcd = mail_box.get();                        //Get the latest entry from "mail_box"
-        
-        if (evt_lcd.status == osEventMail)
-        {
+
+        if (evt_lcd.status == osEventMail) {
             DATA *Rec_Data_LCD = (DATA*)evt_lcd.value.p;                    //Create pointer to mailbox
             DATA msg_lcd;                                                   //Create temporary instance of DATA class
-            
+
             msg_lcd.set_time(Rec_Data_LCD->get_time());                     //Copy time from mailbox to temporary instance
             msg_lcd.set_temperature(Rec_Data_LCD->get_temperature());       //Copy temperature from mailbox to temporary instance
             msg_lcd.set_pressure(Rec_Data_LCD->get_pressure());             //Copy pressure from mailbox to temporary instance
             msg_lcd.set_light(Rec_Data_LCD->get_light());                   //Copy light from mailbox to temporary instance
             mail_box.free(Rec_Data_LCD);                                    //Free space in the mailbox (delete earliest sample taken)
-            
-            if(mode == 0)//Print values to the LCD
-            {
+
+            if(mode == 0) { //Print values to the LCD
                 //Write new data to LCD (not fast!)
-                                      
+
                 /*LCD_sprintf = */sprintf (LCD_buffer, "%1.1f %1.1f %1.1f",msg_lcd.get_temperature(),msg_lcd.get_pressure(),msg_lcd.get_light());//Used for converting to a sting
-                
+
                 //LCD.Display_Clear();
                 LCD.DDRAM_Address(0x00);
                 LCD.Write_String("Temp Pres  li");
                 LCD.DDRAM_Address(0x40);
-                
+
                 LCD.Write_String(LCD_buffer);
                 //LCD.Write_String("Temp Pres  li\n");
                 //LCD.Write_String("%1.1f ",    msg_lcd.get_temperature());//Print Temperature to LCD
                 //LCD.Write_String("%1.1f ",    msg_lcd.get_pressure());//Print Pressure to LCD
                 //LCD.Write_String("%1.1f\n",   msg_lcd.get_light()); //Print Light to LCD
-                
-            }
-            else if(mode == 1)//Print the Time to the LCD
-            {
+
+            } else if(mode == 1) { //Print the Time to the LCD
                 time_t msel_time = msg_lcd.get_time();                                  //Declare local variable for time
                 strftime(scom_time_buffer, 32, "%I:%M %p", localtime(&msel_time));     //Format time as a string
                 LCD.Display_Clear();
@@ -184,9 +109,7 @@
                 LCD.DDRAM_Address(0x40);
                 LCD.Write_String(LCD_buffer);
 
-            }
-            else
-            {
+            } else {
                 mode = 0;
             }
         }
@@ -195,89 +118,96 @@
 void Serial_Commands()
 {
     string Serial_Input;
-    while(1)
-    {   
+    while(1) {
+        Serial_Input = "Blank";
         cout << "Please type in a command" << endl;
-       
+
         cin >> Serial_Input;
-        
+
         if (Serial_Input == "Test")
         {
             cout << "Test Confirmed" << endl;
-        }
-        else if(Serial_Input == "READ-ALL")
+        } 
+        else if(Serial_Input == "READALL")
         {
             cout << "Read All Confirmed" << endl;
             t2.start(Serial_Comms);
-        }
-        else if(Serial_Input == "DELETE ALL")
-        {
-        
-        }
-        else if(Serial_Input == "READ <n>")
+        } 
+        else if(Serial_Input == "DELETE.ALL")
+         {
+
+        } 
+        else if(Serial_Input == "READ.<n>") 
         {
-        
-        }
-        else if(Serial_Input == "DELETE <n>")
+
+        } 
+        else if(Serial_Input == "DELETE.<n>")
         {
-        
-        }
-        else if(Serial_Input == "SETDATE <dd> <mm> <yyyy>")
-        {
-        
-        }
-        else if(Serial_Input == "SETT <T>")
+
+        } 
+        else if(Serial_Input == "SETDATE")
+            {
+                set_time(SETDATE());
+            } 
+        else if(Serial_Input == "SETT")
         {
-        
-        }
-        else if(Serial_Input == "STATE <x>")
-        {
-        
-        }
-        else if(Serial_Input == "LOGGING <x>")
+
+            if(SETT() >= 1) 
+            {
+                Sample_Rate = SETT();
+            } 
+            else 
+            {
+                Sample_Rate = TimerInterval;
+            }
+            Sample_timer.detach();
+            Sample_timer.attach(&Sample_signal_set,Sample_Rate);
+        } 
+        else if(Serial_Input == "STATE.<x>")
         {
-        
+
+        } 
+        else if(Serial_Input == "LOGGING.<x>")
+         {
+
+        } 
+        else if(Serial_Input == "HELP")// Use this to display all of the availble commands
+        { 
+            HELP();
         }
-        else if(Serial_Input == "HELP")// Use this to display all of the availble commands   
+        else 
         {
-            cout << "Avalible Commands are: "<< endl;
-            cout << "READ ALL , DELETE ALL READ<n> ,DELETE<n> , SETDATE<dd> <mm> <yyyy> , SETTIME <hh> <mm> <ss>, SETT <T> , STATE <x>, LOGGING <x>, HELP"<< endl;
-        }    
-        else
-        {
-            cout << "Please enter a acceptable command" << endl;    
+            cout << "Please enter a acceptable command" << endl;
         }
     }
 }
 void Serial_Comms()//Thread for Serial Communications
 {
     cout << "In Serial Comms" << endl;
-    while(1)
-    {
+    while(1) {
         Thread::signal_wait(1);
         osEvent evt_serial = mail_box.get();                                   //Get the latest entry from "mail_box"
-        
-        if (evt_serial.status == osEventMail)
-        {
+
+        if (evt_serial.status == osEventMail) {
             DATA *Rec_Data_Serial = (DATA*)evt_serial.value.p;                      //Create pointer to mailbox
             DATA msg_serial;                                                        //Create temporary instance of DATA class
-            
+
             msg_serial.set_time(Rec_Data_Serial->get_time());                       //Copy time from mailbox to temporary instance
             msg_serial.set_temperature(Rec_Data_Serial->get_temperature());         //Copy teperature from mailbox to temporary instance
             msg_serial.set_pressure(Rec_Data_Serial->get_pressure());               //Copy pressure from mailbox to temporary instance
             msg_serial.set_light(Rec_Data_Serial->get_light());                     //Copy light from mailbox to temporary instance
             mail_box.free(Rec_Data_Serial);                                         //Free space in the mailbox (delete earliest sample taken)
-            
+
             time_t scom_time = msg_serial.get_time();                               //Declare local variable for time
             strftime(scom_time_buffer, 32, "%I:%M %p\t", localtime(&scom_time));    //Format time as a string
             pc.printf("Time = %s", scom_time_buffer);                               //Print the string formatted time
-            
+
             pc.printf("Temperature = %f\t", msg_serial.get_temperature());     //Print Temperature
             pc.printf("Pressure = %f\t", msg_serial.get_pressure());           //Print Pressure
             pc.printf("Light = %f\n\r", msg_serial.get_light());               //Print Light
         }
         Green_led.Toggle();
-        //Thread::wait(1000);   
+        //Thread::wait(1000);
     }
 }
 
@@ -288,30 +218,29 @@
 }
 void Sample()//Samples the hardware and prints the result to the LCD
 {
-    while(1)
-    {     
+    while(1) {
         Thread::signal_wait(SamplingTime);      //Set the time between samples
-            
+
         temp = sensor.getTemperature();         //Read Temperature
         pressure = sensor.getPressure();        //Read Pressure
         lux = adcIn.read();                     //Read Light
         time_t buffer_time = time(NULL);        //Read Time
-        
+
         DATA *Send_Data = mail_box.alloc();     //Allocate a block from the memory pool, Type Data
-        
-        if (Send_Data ==  NULL){                //If Data is empty
+
+        if (Send_Data ==  NULL) {               //If Data is empty
             //pc.printf("Out of memory\n\r");   //Print out of memory warning
             return;
         }
-        
+
         Send_Data->set_time(buffer_time);       //Pass in Time
         Send_Data->set_temperature(temp);       //Pass in Temp
         Send_Data->set_pressure(pressure);      //Pass in Pres
         Send_Data->set_light(lux);              //Pass in Light
-        
+
         osStatus stat = mail_box.put(Send_Data);    //Puts "Send_Data" into the mailbox
-        
-        if (stat == osErrorResource){   //If mailbox overfills
+
+        if (stat == osErrorResource) {  //If mailbox overfills
             //pc.printf("queue->put() Error code: %4Xh, Resource not available\r\n", stat);      //Print error message
             mail_box.free(Send_Data);   //Free the mail box
             return;
@@ -319,35 +248,35 @@
         Red_led.Toggle();
         t1.signal_set(NotSamplingTime);
     }
-} 
-int main() 
-{  
-    
+}
+int main()
+{
 
-    
+
+
     //Greeting
     pc.printf("Test Start");
     pc.printf("\n\r");
-        
+
     set_time(1512940530);               //Set RTC time to December 10 2017
     pc.baud(9600);                      //Sets the Serial Comms Baud Rate
-    
+
     LCD.Initialise();
     LCD.DDRAM_Address(0x40);
-  
-        
-    /*post();     //Power on Self Test
-    
+
+
+    post();     //Power on Self Test
+
     //Initialise the SD card (this needs to move)
     if ( sd.init() != 0) {
         printf("Init failed \n");
         lcd.cls();
         lcd.printf("CANNOT INIT SD");        //Change me
         errorCode(FATAL);
-    } 
-    
+    }
+
     //Create a filing system for SD Card
-    FATFileSystem fs("sd", &sd);     
+    FATFileSystem fs("sd", &sd);
 
     //Open to WRITE
     FILE* fp = fopen("/sd/test.csv","a");
@@ -357,61 +286,61 @@
         lcd.printf("CANNOT OPEN FILE\n\n");//Change me
         errorCode(FATAL);
     }
-    
+
     //Last message before sampling begins
     lcd.cls();//change me
     lcd.printf("READY\n\n");//change me
-    
-    */
-    
+
+
+    Sample_Rate = TimerInterval;
     //Run interrupt
-    Sample_timer.attach(&Sample_signal_set,TimerInterval);
+    Sample_timer.attach(&Sample_signal_set,Sample_Rate);
     SW1.fall(&SW1FallingEdge);
 
     t1.start(Sample);
     t3.start(ModeSelection);
     //t4.start(Network);
     t5.start(Serial_Commands);
-    
-    
+
+
     //Main thread ID
-    
+
     idMain = osThreadGetId();   //CMSIS RTOS call
-    
+
     //Thread ID
     id1 = t1.gettid();
     id2 = t2.gettid();
     id3 = t3.gettid();
     id4 = t4.gettid();
     id5 = t5.gettid();
-    
-    
+
+
     //Toggle Green LED after a button has been pressed
     //Press either switch to unmount
     DigitalIn  onBoardSwitch(USER_BUTTON);
-    
-    while (onBoardSwitch == 0){
-        
+
+    while (onBoardSwitch == 0) {
+
     }
-    
+
     //Close File
     /*
     fclose(fp);
-    
+
     //Close down
     sd.deinit();
     printf("Unmounted...\n");
     lcd.cls();
     lcd.printf("Unmounted...\n\n");
     */
-    
+
     while(true) {
         greenLED = 1;
         wait(0.5);
         greenLED = 0;
-        wait(0.1);    
+        wait(0.1);
     }
 }
 
 
-    
+