Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of ELEC351 by
Diff: main.cpp
- Revision:
 - 25:36699ed589ab
 - Parent:
 - 24:7d2da96e05ad
 - Child:
 - 26:78f5e454e59f
 
--- 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);
     }
 }
 
 
-    
+
    