Pierre-Yves FAISANT / Mbed 2 deprecated Projetv0

Dependencies:   mbed OneWire DHT22 TSL2561 SSD1306

main.cpp

Committer:
Pipou
Date:
2017-10-17
Revision:
9:6ef06c9e2bab
Parent:
8:2ba90555552e
Child:
10:fd7b1648642d

File content as of revision 9:6ef06c9e2bab:

/*******************************************************
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;

void interruption() 
{
    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: %f \tTemp_A: %f \tHum_A: %f \tTemp_S: %f \tHum_S: %f\r\n", Lumux, Temp_Air, Hum_Air, Temp_Sol, Hum_Sol);
        
        // Envoie données, mises en forme, sur ACTOBOARD
        sigfox.printf("AT$SF=");
        sigfox.printf("%04x%04x",Temp_Air,Hum_Air);
        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: %f\r\n", Lumux);    
        oled.printf("Temp_A: %f\r\n", Temp_Air);
        oled.printf("Hum_A: %f\r\n", Hum_Air);
        oled.printf("Temp_S: %f\r\n",Temp_Sol);
        oled.printf("Hum_S: %f\r\n", Hum_Sol);
        oled.printf("\r\n");
        oled.update();
    }
}

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,60);
    
    while(1) 
    {
        deepsleep();
    }
}