ok

Dependencies:   mbed ssd1306_library

main_Carte1.cpp

Committer:
emmanueldavid
Date:
2021-02-10
Revision:
4:4f681e272268
Parent:
3:03be0fb433da
Child:
5:9c975d6bd219

File content as of revision 4:4f681e272268:

/*
 * Programme Carte 1
 * E. DAVID - Fevrier 2021
 */

#if !DEVICE_CAN
#error [NOT_SUPPORTED] CAN not supported for this target
#endif

#include "mbed.h"
#include "ssd1306.h"

typedef enum{ 
  DataFrame,
  RemoteFrame,
  ErrorFrame,
  OverloadFrame
} TypeTrame;
TypeTrame Trame;

SSD1306 OLED (I2C_SDA, I2C_SCL); // assumes default I2C address of 0x78

/*
typedef struct{
  can_id_t id;
  Uchar ctrl;
  Uchar * pt_donne;
} can_msg_t;
*/

DigitalOut ledD9(PA_4);
DigitalOut ledD8(PA_5);   // Attention, désouder SB16&SB18 si utilisation I2c
DigitalOut ledD7(PA_6);   
DigitalOut ledD6(PA_7);

DigitalIn  SW4_1(PA_1);
DigitalIn  SW4_0(PA_3);

InterruptIn SW1(PB_4, PullUp); 
InterruptIn SW2(PB_5, PullUp); 
InterruptIn SW3(PA_8, PullUp); 

AnalogIn adc_RV1(PA_0);

CAN can(PA_11, PA_12);
//Serial pc(USBTX, USBRX);

int value_SW4;              // valeur 0,1,2,3 
char Data[5] = "GEII";

/* Envoi d'une trame de donnees */
void AppuiSW1() {
  if (value_SW4 == 1)
  {
    if (can.write(CANMessage(2021, Data, 5 , CANData, CANStandard))) // Rmq : tableau = pointeur
        ledD6 = !ledD6;
  } 
}

/* Envoi d'une trame de requete */
void AppuiSW2() {
  if (can.write(CANMessage(1620, CANStandard ))) {
    ledD7 = !ledD7;
  } 
}

int LectureSW4(){
    int ETAT;
    int value_SW4_0 = SW4_0.read();
    int value_SW4_1 = SW4_1.read();
    
    if (value_SW4_1 == 1) {
        if (value_SW4_0 == 1)
            ETAT = 3;
        else
            ETAT = 2;
    }
    else {
        if (value_SW4_0 == 1)
            ETAT = 1;
        else
            ETAT = 0;       
    }
    return ETAT;
}


int main() {
    //pc.baud(115200);
    //pc.printf("Affichage serie\n");
    
    can.frequency(500000); 
    
    //CANMessage msg;

    OLED.speed (SSD1306::Medium);  // set working frequency
    OLED.init();                   // initialize SSD1306
    OLED.cls();                    // clear frame buffer
    OLED.locate (0,0);             // set text cursor to line 3, column 1
    OLED.printf ("GEII"); // print to frame buffer
    OLED.redraw();                 // updates actual display transferring frame buffer over I2C bus 
    
    SW1.fall(&AppuiSW1);

    while(1) 
    {     
        value_SW4 = LectureSW4();
        OLED.locate (2,0);             
        OLED.printf("ADC A0=%2.1f", (adc_RV1.read()*100));
        //printf("ADC VRef = %f\n", adc_vref.read());         
        OLED.locate (3,0);          
        OLED.printf("Valeur SW4_1=%d", SW4_0.read());
        OLED.locate (4,0);          
        OLED.printf("Valeur SW4_2=%d", SW4_1.read());
        OLED.locate (5,0);          
        OLED.printf("Valeur SW4=%d", value_SW4);
        OLED.redraw();  
        wait(1.0);
    }
}