NMF Atlantis
/
NMFAtlantis_Final
Code required to drive the microcontroller of the NMF Atlantis
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Fri Jul 15 2022 17:41:18 by 1.7.2