
Projet Long pour AGRAL
Dependencies: mbed OneWire DHT22 TSL2561 SSD1306
main.cpp@12:df4ff058ab06, 2018-01-15 (annotated)
- Committer:
- pgeorge
- Date:
- Mon Jan 15 13:34:04 2018 +0000
- Revision:
- 12:df4ff058ab06
- Parent:
- 11:7c872ac9da9a
fix addr lux
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Pipou | 9:6ef06c9e2bab | 1 | /******************************************************* |
Pipou | 9:6ef06c9e2bab | 2 | Nom ......... : main.cpp |
Pipou | 9:6ef06c9e2bab | 3 | Role ........ : Récupération de données, mises en forme, |
Pipou | 9:6ef06c9e2bab | 4 | des capteurs de : |
Pipou | 9:6ef06c9e2bab | 5 | Luminosité, Température de l'air, |
Pipou | 9:6ef06c9e2bab | 6 | Humidité de l'air, Température du sol |
Pipou | 9:6ef06c9e2bab | 7 | et Huminidité du sol. |
Pipou | 9:6ef06c9e2bab | 8 | Affichage dans la console et sur l'écran |
pgeorge | 12:df4ff058ab06 | 9 | OLED, envoie sur le site |
Pipou | 9:6ef06c9e2bab | 10 | ACTOBOARD via module Sigfox. |
Pipou | 9:6ef06c9e2bab | 11 | Auteur ...... : GEORGE Pierre, LOUVION Quentin et |
Pipou | 9:6ef06c9e2bab | 12 | FAISANT Pierre-Yves |
Pipou | 9:6ef06c9e2bab | 13 | Version ..... : V0 du 17/10/2017 |
Pipou | 9:6ef06c9e2bab | 14 | ********************************************************/ |
Pipou | 9:6ef06c9e2bab | 15 | |
Pipou | 0:75cfe7e78e4b | 16 | #include "mbed.h" |
pgeorge | 2:1e52e7fab454 | 17 | #include "OneWire.h" |
pgeorge | 3:e369ee47403e | 18 | #include "TSL2561.h" |
pgeorge | 3:e369ee47403e | 19 | #include "DHT22.h" |
Pipou | 6:998a618b5385 | 20 | #include "ssd1306.h" |
Pipou | 6:998a618b5385 | 21 | #include "standard_font.h" |
Pipou | 6:998a618b5385 | 22 | #include "bold_font.h" |
pgeorge | 3:e369ee47403e | 23 | |
Pipou | 4:2767fb09ac47 | 24 | //Déclaration variables |
pgeorge | 12:df4ff058ab06 | 25 | TSL2561 Lum(PB_7,PB_6,0x39); // Luminosité (I2C:SDA,SCL) |
Pipou | 4:2767fb09ac47 | 26 | DHT22 Tem_Hum_A(PA_11); // Température & Humidité air |
Pipou | 4:2767fb09ac47 | 27 | OneWire Tem_S(PA_8); // Température sol |
Pipou | 4:2767fb09ac47 | 28 | AnalogIn Hum_S(PA_0); // Huminidité sol |
Pipou | 4:2767fb09ac47 | 29 | Serial pc(PA_2,PA_3); //Serial : Tx,Rx |
Pipou | 6:998a618b5385 | 30 | SSD1306 oled(PB_0,PB_4,PB_5,PA_5,PA_7); // OLED : CS,Reset,DC,Clock,Data |
Pipou | 9:6ef06c9e2bab | 31 | Serial sigfox(PA_9,PA_10,9600); // Module Sigfox |
Pipou | 9:6ef06c9e2bab | 32 | LowPowerTicker t1; // Ticker pour la fonction d'interruption |
Pipou | 9:6ef06c9e2bab | 33 | |
pgeorge | 12:df4ff058ab06 | 34 | DigitalIn btn(D6);//button |
pgeorge | 12:df4ff058ab06 | 35 | InterruptIn button(D6); |
pgeorge | 12:df4ff058ab06 | 36 | |
pgeorge | 12:df4ff058ab06 | 37 | |
pgeorge | 12:df4ff058ab06 | 38 | |
pgeorge | 12:df4ff058ab06 | 39 | |
Pipou | 9:6ef06c9e2bab | 40 | char _id[16]; |
Pipou | 9:6ef06c9e2bab | 41 | DeviceAddresses* devAddresses; |
Pipou | 9:6ef06c9e2bab | 42 | uint8_t foundNum; |
Pipou | 9:6ef06c9e2bab | 43 | |
pgeorge | 12:df4ff058ab06 | 44 | volatile uint8_t flag=1,flag_screen=0; |
Pipou | 10:fd7b1648642d | 45 | |
Pipou | 10:fd7b1648642d | 46 | void run() |
Pipou | 9:6ef06c9e2bab | 47 | { |
Pipou | 9:6ef06c9e2bab | 48 | I2C i2c(PB_7,PB_6); |
pgeorge | 12:df4ff058ab06 | 49 | Lum.power_up(); |
Pipou | 9:6ef06c9e2bab | 50 | //OneWire Tem_S |
pgeorge | 12:df4ff058ab06 | 51 | wait_ms(400); |
Pipou | 9:6ef06c9e2bab | 52 | OneWireDeviceTemperature::startConversationForAll(&Tem_S, OWTEMP_11_BIT); |
Pipou | 9:6ef06c9e2bab | 53 | for (uint8_t i = 0; i < foundNum; i++) |
Pipou | 9:6ef06c9e2bab | 54 | { |
Pipou | 9:6ef06c9e2bab | 55 | OneWireDevice* owDevice = OneWireDeviceFactory::init(&Tem_S, (*devAddresses)[i]); |
Pipou | 9:6ef06c9e2bab | 56 | |
Pipou | 9:6ef06c9e2bab | 57 | if (owDevice->getFamily() != ONEWIRE_DS18B20_FAMILY) // currently only DS18B20 supports |
Pipou | 9:6ef06c9e2bab | 58 | continue; |
Pipou | 9:6ef06c9e2bab | 59 | |
Pipou | 9:6ef06c9e2bab | 60 | owDevice->generateId(_id); |
Pipou | 9:6ef06c9e2bab | 61 | |
Pipou | 9:6ef06c9e2bab | 62 | Tem_Hum_A.sample(); |
Pipou | 10:fd7b1648642d | 63 | |
Pipou | 9:6ef06c9e2bab | 64 | // Calcul sur les données envoyées par les capteurs |
Pipou | 9:6ef06c9e2bab | 65 | float Lumux = Lum.lux(); |
Pipou | 9:6ef06c9e2bab | 66 | float Temp_Air = Tem_Hum_A.getTemperature()/10.0; |
Pipou | 9:6ef06c9e2bab | 67 | float Hum_Air = Tem_Hum_A.getHumidity()/10.0; |
Pipou | 9:6ef06c9e2bab | 68 | float Temp_Sol = owDevice->sendGetCommand(GET_TEMPERATURE); |
Pipou | 9:6ef06c9e2bab | 69 | float Hum_Sol = Hum_S.read(); |
Pipou | 9:6ef06c9e2bab | 70 | |
Pipou | 9:6ef06c9e2bab | 71 | // Affichage données, mises en forme, sur la console |
Pipou | 11:7c872ac9da9a | 72 | printf( "Lum: %.2f \tTemp_A: %.2f \tHum_A: %.2f \tTemp_S: %.2f \tHum_S: %.2f\r\n", Lumux, Temp_Air, Hum_Air, Temp_Sol, Hum_Sol); |
Pipou | 9:6ef06c9e2bab | 73 | |
Pipou | 9:6ef06c9e2bab | 74 | // Envoie données, mises en forme, sur ACTOBOARD |
Pipou | 9:6ef06c9e2bab | 75 | sigfox.printf("AT$SF="); |
Pipou | 11:7c872ac9da9a | 76 | sigfox.printf("%02x%02x%02x%02x%02x",(int)Lumux,(int)Temp_Air,(int)Hum_Air,(int)Temp_Sol,(int)Hum_Sol); |
Pipou | 9:6ef06c9e2bab | 77 | sigfox.printf("\n\r"); |
Pipou | 9:6ef06c9e2bab | 78 | |
Pipou | 9:6ef06c9e2bab | 79 | delete owDevice; |
Pipou | 9:6ef06c9e2bab | 80 | |
Pipou | 9:6ef06c9e2bab | 81 | SPI spi(PA_7,NC, PA_5); |
Pipou | 9:6ef06c9e2bab | 82 | |
Pipou | 9:6ef06c9e2bab | 83 | // Affichage données, mises en forme, sur l'écran OLED |
Pipou | 9:6ef06c9e2bab | 84 | wait(2); |
pgeorge | 12:df4ff058ab06 | 85 | |
pgeorge | 12:df4ff058ab06 | 86 | Lum.power_down(); |
pgeorge | 12:df4ff058ab06 | 87 | } |
pgeorge | 12:df4ff058ab06 | 88 | } |
pgeorge | 12:df4ff058ab06 | 89 | void interruption(){ |
pgeorge | 12:df4ff058ab06 | 90 | flag=1; |
pgeorge | 12:df4ff058ab06 | 91 | } |
pgeorge | 12:df4ff058ab06 | 92 | void int_screen() |
pgeorge | 12:df4ff058ab06 | 93 | { |
pgeorge | 12:df4ff058ab06 | 94 | flag_screen = 1; |
pgeorge | 12:df4ff058ab06 | 95 | } |
pgeorge | 12:df4ff058ab06 | 96 | void screen() |
pgeorge | 12:df4ff058ab06 | 97 | { |
pgeorge | 12:df4ff058ab06 | 98 | oled.initialise(); |
pgeorge | 12:df4ff058ab06 | 99 | oled.clear(); |
pgeorge | 12:df4ff058ab06 | 100 | oled.set_contrast(255); // max contrast |
pgeorge | 12:df4ff058ab06 | 101 | |
pgeorge | 12:df4ff058ab06 | 102 | oled.set_font(bold_font, 8); |
pgeorge | 12:df4ff058ab06 | 103 | I2C i2c(PB_7,PB_6); |
pgeorge | 12:df4ff058ab06 | 104 | Lum.power_up(); |
pgeorge | 12:df4ff058ab06 | 105 | //OneWire Tem_S |
pgeorge | 12:df4ff058ab06 | 106 | wait_ms(600); |
pgeorge | 12:df4ff058ab06 | 107 | OneWireDeviceTemperature::startConversationForAll(&Tem_S, OWTEMP_11_BIT); |
pgeorge | 12:df4ff058ab06 | 108 | for (uint8_t i = 0; i < foundNum; i++) |
pgeorge | 12:df4ff058ab06 | 109 | { |
pgeorge | 12:df4ff058ab06 | 110 | OneWireDevice* owDevice = OneWireDeviceFactory::init(&Tem_S, (*devAddresses)[i]); |
pgeorge | 12:df4ff058ab06 | 111 | |
pgeorge | 12:df4ff058ab06 | 112 | if (owDevice->getFamily() != ONEWIRE_DS18B20_FAMILY) // currently only DS18B20 supports |
pgeorge | 12:df4ff058ab06 | 113 | continue; |
pgeorge | 12:df4ff058ab06 | 114 | |
pgeorge | 12:df4ff058ab06 | 115 | owDevice->generateId(_id); |
pgeorge | 12:df4ff058ab06 | 116 | |
pgeorge | 12:df4ff058ab06 | 117 | Tem_Hum_A.sample(); |
pgeorge | 12:df4ff058ab06 | 118 | |
pgeorge | 12:df4ff058ab06 | 119 | // Calcul sur les données envoyées par les capteurs |
pgeorge | 12:df4ff058ab06 | 120 | float Lumux = Lum.lux(); |
pgeorge | 12:df4ff058ab06 | 121 | float Temp_Air = Tem_Hum_A.getTemperature()/10.0; |
pgeorge | 12:df4ff058ab06 | 122 | float Hum_Air = Tem_Hum_A.getHumidity()/10.0; |
pgeorge | 12:df4ff058ab06 | 123 | float Temp_Sol = owDevice->sendGetCommand(GET_TEMPERATURE); |
pgeorge | 12:df4ff058ab06 | 124 | float Hum_Sol = Hum_S.read(); |
pgeorge | 12:df4ff058ab06 | 125 | |
pgeorge | 12:df4ff058ab06 | 126 | |
pgeorge | 12:df4ff058ab06 | 127 | |
pgeorge | 12:df4ff058ab06 | 128 | |
pgeorge | 12:df4ff058ab06 | 129 | |
pgeorge | 12:df4ff058ab06 | 130 | delete owDevice; |
pgeorge | 12:df4ff058ab06 | 131 | |
pgeorge | 12:df4ff058ab06 | 132 | SPI spi(PA_7,NC, PA_5); |
pgeorge | 12:df4ff058ab06 | 133 | |
pgeorge | 12:df4ff058ab06 | 134 | // Affichage données, mises en forme, sur l'écran OLED |
pgeorge | 12:df4ff058ab06 | 135 | wait(2); |
pgeorge | 12:df4ff058ab06 | 136 | printf( "Lum: %.2f \tTemp_A: %.2f \tHum_A: %.2f \tTemp_S: %.2f \tHum_S: %.2f\r\n", Lumux, Temp_Air, Hum_Air, Temp_Sol, Hum_Sol); |
Pipou | 9:6ef06c9e2bab | 137 | oled.set_font(bold_font, 8); |
Pipou | 9:6ef06c9e2bab | 138 | oled.printf("Capteurs\r\n"); |
Pipou | 9:6ef06c9e2bab | 139 | oled.printf("\r\n"); |
Pipou | 9:6ef06c9e2bab | 140 | oled.set_font(standard_font, 6); |
Pipou | 11:7c872ac9da9a | 141 | oled.printf("Lum: %.2f\r\n", Lumux); |
Pipou | 11:7c872ac9da9a | 142 | oled.printf("Temp_A: %.2f\r\n", Temp_Air); |
Pipou | 11:7c872ac9da9a | 143 | oled.printf("Hum_A: %.2f\r\n", Hum_Air); |
Pipou | 11:7c872ac9da9a | 144 | oled.printf("Temp_S: %.2f\r\n",Temp_Sol); |
Pipou | 11:7c872ac9da9a | 145 | oled.printf("Hum_S: %.2f\r\n", Hum_Sol); |
Pipou | 9:6ef06c9e2bab | 146 | oled.printf("\r\n"); |
Pipou | 9:6ef06c9e2bab | 147 | oled.update(); |
pgeorge | 12:df4ff058ab06 | 148 | Lum.power_down(); |
Pipou | 9:6ef06c9e2bab | 149 | } |
pgeorge | 12:df4ff058ab06 | 150 | wait(5); |
pgeorge | 12:df4ff058ab06 | 151 | oled.off(); |
pgeorge | 12:df4ff058ab06 | 152 | |
pgeorge | 12:df4ff058ab06 | 153 | |
Pipou | 9:6ef06c9e2bab | 154 | } |
Pipou | 0:75cfe7e78e4b | 155 | int main() { |
Pipou | 4:2767fb09ac47 | 156 | //OneWire Tem_S |
pgeorge | 8:2ba90555552e | 157 | I2C i2c(PB_7,PB_6); |
Pipou | 9:6ef06c9e2bab | 158 | devAddresses = Tem_S.getFoundDevAddresses(); |
Pipou | 9:6ef06c9e2bab | 159 | foundNum = Tem_S.getFoundDevNum(); |
Pipou | 6:998a618b5385 | 160 | |
pgeorge | 8:2ba90555552e | 161 | SPI spi(PA_7,NC, PA_5); |
Pipou | 9:6ef06c9e2bab | 162 | |
Pipou | 6:998a618b5385 | 163 | //OLED |
Pipou | 6:998a618b5385 | 164 | oled.initialise(); |
Pipou | 6:998a618b5385 | 165 | oled.clear(); |
Pipou | 6:998a618b5385 | 166 | oled.set_contrast(255); // max contrast |
Pipou | 6:998a618b5385 | 167 | |
Pipou | 6:998a618b5385 | 168 | oled.set_font(bold_font, 8); |
Pipou | 6:998a618b5385 | 169 | oled.printf("Heading\r\n"); |
Pipou | 6:998a618b5385 | 170 | |
Pipou | 6:998a618b5385 | 171 | oled.set_font(standard_font, 6); |
Pipou | 6:998a618b5385 | 172 | oled.printf("Hello World!\r\n"); |
Pipou | 6:998a618b5385 | 173 | oled.printf("Some more text here.."); |
Pipou | 6:998a618b5385 | 174 | |
Pipou | 6:998a618b5385 | 175 | oled.update(); |
Pipou | 9:6ef06c9e2bab | 176 | |
pgeorge | 12:df4ff058ab06 | 177 | //t1.attach(interruption,61); |
pgeorge | 12:df4ff058ab06 | 178 | t1.attach(interruption,5); |
pgeorge | 12:df4ff058ab06 | 179 | btn.mode(PullUp); |
pgeorge | 12:df4ff058ab06 | 180 | button.rise(&int_screen); // attach the address of screen |
pgeorge | 12:df4ff058ab06 | 181 | //run(); |
Pipou | 9:6ef06c9e2bab | 182 | while(1) |
Pipou | 9:6ef06c9e2bab | 183 | { |
Pipou | 10:fd7b1648642d | 184 | if(flag) |
Pipou | 10:fd7b1648642d | 185 | { |
Pipou | 10:fd7b1648642d | 186 | run(); |
Pipou | 10:fd7b1648642d | 187 | flag=0; |
Pipou | 10:fd7b1648642d | 188 | } |
pgeorge | 12:df4ff058ab06 | 189 | else if(flag_screen) |
pgeorge | 12:df4ff058ab06 | 190 | { |
pgeorge | 12:df4ff058ab06 | 191 | screen(); |
pgeorge | 12:df4ff058ab06 | 192 | flag_screen=0; |
pgeorge | 12:df4ff058ab06 | 193 | } |
Pipou | 9:6ef06c9e2bab | 194 | deepsleep(); |
Pipou | 0:75cfe7e78e4b | 195 | } |
Pipou | 0:75cfe7e78e4b | 196 | } |