Permet de créer, envoyer, filtrer et décrypter la trame meteo.

Dependents:   Simulation_carte_maitresse

meteoCAN.cpp

Committer:
Station_Meteo_Laos
Date:
2019-06-29
Revision:
5:a90b50a19ae4
Parent:
4:caf7ef3d4d6e

File content as of revision 5:a90b50a19ae4:

#include "meteoCAN.h"
#include "mbed.h"

//Notre Constructeur, prend en argument les pins utiliser pour communiquer en CAN
meteoCAN::meteoCAN(PinName rd, PinName td):can1(rd, td){}

//Créer et envoie la trame météo*, avec l’ID donnée en argument.
bool meteoCAN::send(uint16_t canID, float temperature, float humidite, float irradiance, float vitesse_vent, char direction_vent){
    uint16_t temp, humi, irra, vite;
    char trame[50];
        
    temp = uint16_t(temperature*100);
    trame[0] = temp & 255; //temperature octet faible
    trame[1] = temp >> 8;   //temperature octet fort
    
    humi = uint16_t(humidite*10);
    trame[2] = humi & 255; //humidite octet faible
    trame[3] = humi >> 8;   //humidite octet fort
    
    irra = uint16_t(irradiance);
    trame[4] = irra & 255; //irradiance octet faible
    trame[5] = irra >> 8;   //irradiance octet fort
    
    vite = uint16_t(vitesse_vent*100);
    trame[6] = vite & 255; //vitesse_vent octet faible
    trame[7] = vite >> 8;   //vitesse_vent octet fort
    
    trame[3] = (direction_vent<<4 & 0xF0) + (trame[3] & 0x0F);
  
    // send value to CAN bus and monitor return value to check if CAN
    // message was sent successfully. If so display, increment and toggle
    if (can1.write(CANMessage(canID, trame, 8))) {
    }
    else{
      can1.reset();                                           // Reset CANbus if there is a problem
    }
    wait(1.0);                                                  // wait a second  
    
    return true;
}

//Renvoie vrai si l’ID du message CAN reçu correspond à l’ID donnée en argument. Renvoie faux sinon
bool meteoCAN::filtreID(CANMessage &msg, uint16_t IDtoFilter){
    if(IDtoFilter == msg.id) return true;
    else return false;
}

//Décrypte la trame météo renvoie en float la température.
float meteoCAN::getTemperature(CANMessage &msg){
        return float(float(( msg.data[0] & 0xFF) + ( msg.data[1]<<8 & 0xFF00))/100);
}

//Décrypte la trame météo renvoie en float l’humidite.
float meteoCAN::getHumidite(CANMessage &msg){
        return float(float((msg.data[2] & 0xFF) + (msg.data[3]<<8 & 0x0F00))/10);
}

//Décrypte la trame météo renvoie uint16_t l’irradiance.
uint16_t meteoCAN::getIrradiance(CANMessage &msg){
        return uint16_t((msg.data[4] & 0xFF) + (msg.data[5]<<8 & 0xFF00));
}

//Décrypte la trame météo renvoie en float la vitesse du vent.
float meteoCAN::getVitesseVent(CANMessage &msg){
        return float(float((msg.data[6] & 0xFF) + (msg.data[7]<<8 & 0xFF00))/100);
}

//Décrypte la trame météo renvoie en uint8_t la direction du vent.
uint8_t meteoCAN::getDirectionVent(CANMessage &msg){
        return uint8_t((msg.data[3] & 0xF0)>>4);
}