Projet Long pour AGRAL

Dependencies:   mbed OneWire DHT22 TSL2561 SSD1306

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?

UserRevisionLine numberNew 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 }