Projet Long pour AGRAL

Dependencies:   mbed OneWire DHT22 TSL2561 SSD1306

main.cpp

Committer:
Pipou
Date:
2018-01-22
Revision:
13:9a8b32c34787
Parent:
11:7c872ac9da9a

File content as of revision 13:9a8b32c34787:

/*******************************************************
Nom ......... : main.cpp
Role ........ : Récupération de données, mises en forme, 
                des capteurs de :
                Luminosité, Température de l'air, 
                Humidité de l'air, Température du sol 
                et Huminidité du sol.
                Affichage dans la console et sur l'écran
                OLED, ainsi que envoie sur le site 
                ACTOBOARD via module Sigfox. 
Auteur ...... : GEORGE Pierre, LOUVION Quentin et 
                FAISANT Pierre-Yves
Version ..... : V0 du 17/10/2017
********************************************************/

#include "mbed.h"
#include "OneWire.h"
#include "TSL2561.h"
#include "DHT22.h"
#include "ssd1306.h"
#include "standard_font.h"
#include "bold_font.h"

//Déclaration variables
TSL2561 Lum(PB_7,PB_6); // Luminosité (I2C:SDA,SCL)
//DHT22 Tem_Hum_A(PA_11); // Température & Humidité air
OneWire Tem_S(PA_8); // Température sol
AnalogIn Hum_S(PA_0); // Huminidité sol
Serial pc(PA_2,PA_3); //Serial : Tx,Rx
SSD1306 oled(PB_0,PB_4,PB_5,PA_5,PA_7); // OLED : CS,Reset,DC,Clock,Data
Serial sigfox(PA_9,PA_10,9600); // Module Sigfox
LowPowerTicker t1; // Ticker pour la fonction d'interruption

char _id[16];
DeviceAddresses* devAddresses;
uint8_t foundNum;

volatile uint8_t flag=1;

void run() 
{
    I2C i2c(PB_7,PB_6);
        
    //OneWire Tem_S
    OneWireDeviceTemperature::startConversationForAll(&Tem_S, OWTEMP_11_BIT);
    for (uint8_t i = 0; i < foundNum; i++) 
    {
        OneWireDevice* owDevice = OneWireDeviceFactory::init(&Tem_S, (*devAddresses)[i]);
        
        if (owDevice->getFamily() != ONEWIRE_DS18B20_FAMILY)    // currently only DS18B20 supports
            continue;

        owDevice->generateId(_id);
        
        //Tem_Hum_A.sample();

        // Calcul sur les données envoyées par les capteurs
        float Lumux = Lum.lux();
        //float Temp_Air = Tem_Hum_A.getTemperature()/10.0;
        //float Hum_Air = Tem_Hum_A.getHumidity()/10.0;
        float Temp_Sol = owDevice->sendGetCommand(GET_TEMPERATURE);
        float Hum_Sol = Hum_S.read();
        
        // Affichage données, mises en forme, sur la console
        printf( "Lum: %.2f \tTemp_A: %.2f \tHum_A: %.2f \tTemp_S: %.2f \tHum_S: %.2f\r\n", Lumux, 0, 0, Temp_Sol, Hum_Sol);
        
        // Envoie données, mises en forme, sur ACTOBOARD
        sigfox.printf("AT$SF=");
        sigfox.printf("%02x%02x%02x%02x%02x",(int)Lumux,(int)0,(int)0,(int)Temp_Sol,(int)Hum_Sol);
        sigfox.printf("\n\r");
        
        delete owDevice;   
         
        SPI spi(PA_7,NC, PA_5);
        
        // Affichage données, mises en forme, sur l'écran OLED
        wait(2);
        oled.set_font(bold_font, 8);
        oled.printf("Capteurs\r\n");
        oled.printf("\r\n");
        oled.set_font(standard_font, 6);
        oled.printf("Lum: %.2f\r\n", Lumux);    
        oled.printf("Temp_A: %.2f\r\n", 1);
        oled.printf("Hum_A: %.2f\r\n", 1);
        oled.printf("Temp_S: %.2f\r\n",Temp_Sol);
        oled.printf("Hum_S: %.2f\r\n", Hum_Sol);
        oled.printf("\r\n");
        oled.update();
    }
}
void interruption(){
    flag=1;
    }
    
int main() {
    //OneWire Tem_S
    I2C i2c(PB_7,PB_6);
    devAddresses = Tem_S.getFoundDevAddresses();
    foundNum = Tem_S.getFoundDevNum();
    
    SPI spi(PA_7,NC, PA_5);
    
    //OLED
    oled.initialise();
    oled.clear();
    oled.set_contrast(255); // max contrast
 
    oled.set_font(bold_font, 8);
    oled.printf("Heading\r\n");
 
    oled.set_font(standard_font, 6);
    oled.printf("Hello World!\r\n");
    oled.printf("Some more text here..");

    oled.update();
    
    t1.attach(interruption,61);
    
    while(1) 
    {
        if(flag)
        {
            run();
            flag=0;
        }
        deepsleep();
    }
}