Code required to drive the microcontroller of the NMF Atlantis

Dependencies:   mbed WakeUp DHT

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "DHT.h"
00003 #include "Pulse.h"
00004 #include "RangeFinder.h"
00005 #include "WakeUp.h"
00006 
00007 
00008 RangeFinder rf(D12, 10, 5800, 100000); //(Pin, duree du pulse en us, distance [m] = pulse width [us] / 5800 [us / m] , temps de fonctionnement)
00009 
00010 DigitalOut led(LED1);
00011 Serial serial(D1, D0);
00012 Serial pc(USBTX, USBRX);
00013 DHT HTSensor(D10,22);
00014 AnalogIn battery(A1);
00015 
00016 
00017 int main()
00018 {
00019 
00020     pc.printf("Starting...\n\r\n\r");
00021 
00022     float d;
00023     int dInt;
00024     
00025     float temperature;
00026     int tInt;
00027     float humidity;
00028     int hInt;
00029     float b;
00030     int bInt;
00031     int cpt = 0;
00032   
00033       
00034     // Depending on the waterway
00035     float sensor_limit = 4.0*100.0;
00036     float danger_limit = 50.0;
00037     int danger_time = 15;
00038     int default_time = 30;
00039     int sending_interval = 3600; //every hour (1h = 3600 s)
00040     
00041     while (1)   
00042     {   
00043         //reduced battery level measurement (between 0 V et 1.85 V) 
00044         b = battery.read()*3.3f;
00045         bInt = (int)(b*100/3.3f);
00046         
00047         /*pc.printf("Voltage = %f volts\r\n\r\n", b);
00048         pc.printf("Voltage code = %d percentage\r\n\r\n", bInt);*/
00049                  
00050         //Humidity and temperature measurement
00051         
00052         HTSensor.readData();
00053         wait_us(500);
00054         
00055         temperature = HTSensor.ReadTemperature(KELVIN) - 273,15;
00056         tInt = (int) (temperature + 40);
00057         humidity = HTSensor.ReadHumidity();
00058         hInt = (int) humidity;
00059         
00060         //level measurement
00061         d = rf.read_m();
00062         d = d*100;
00063         if (d < 0)  
00064         {
00065             d = 0;
00066             //Timeout Error
00067             WakeUp::set(default_time); //time in second
00068             deepsleep();
00069             cpt += default_time; 
00070 
00071         } 
00072         else if (d >= sensor_limit) 
00073         {
00074             // Seeed's sensor has a maximum range of 4m, it returns
00075             // something like 7m if the ultrasound pulse isn't reflected.
00076             d = sensor_limit;
00077             WakeUp::set(default_time); //time in second
00078             deepsleep();
00079             cpt += Temps_default; 
00080         }
00081         else if (d <= danger_limit) //Inondation
00082         {
00083             dInt = (int)d;
00084             //Data sending
00085             serial.printf("AT$SF=%04x%02x%02x%02x\r\n",dInt,tInt,hInt, bInt);
00086             
00087             WakeUp::set(danger_time); //time in second
00088             deepsleep();
00089             cpt += danger_time;
00090         }
00091         else
00092         {            
00093             //Data sending            
00094             WakeUp::set(default_time); //time in second
00095             deepsleep();
00096             cpt += default_time;
00097         }
00098         
00099         if (cpt >= sending_interval)
00100         {
00101             dInt = (int)d;
00102             serial.printf("AT$SF=%04x%02x%02x%02x\r\n",dInt,tInt,hInt, bInt);
00103             cpt = 0;
00104         }
00105 
00106     }
00107 }