ok
Dependencies: mbed ssd1306_library
main_Carte1.cpp
- Committer:
- emmanueldavid
- Date:
- 2021-03-10
- Revision:
- 5:9c975d6bd219
- Parent:
- 4:4f681e272268
File content as of revision 5:9c975d6bd219:
/* * 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" #include "stm32f3xx_hal_can.h" CAN_HandleTypeDef hcan1; typedef enum{ DataFrame, RemoteFrame, ErrorFrame, OverloadFrame } TypeTrame; TypeTrame Trame; SSD1306 OLED (I2C_SDA, I2C_SCL, 0x78); // assumes default I2C address of 0x78 //SSD1306 OLED (I2C_SDA, I2C_SCL, 0x3C); // 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); DigitalIn SW1(PB_4, PullUp); DigitalIn SW2(PB_5, PullUp); //DigitalIn SW3(PA_8, PullUp); //InterruptIn SW1(PB_4, PullUp); //InterruptIn SW2(PB_5, PullUp); InterruptIn SW3(PA_8, PullUp); AnalogIn adc_RV1(PA_0); //Timer antirebond; CAN can(PA_11, PA_12); Serial pc(USBTX, USBRX); int value_SW4; // valeur 0,1,2,3 char Reset[6] = "Reset"; char Donnees[12]=""; char Data[5] = "GEII"; char DataArbitrage[5] = "K1bb"; int Nb_messT = 0; int Nb_messR = 0; int detectionFrontSW1(void) { int frontDescendant = 0; static int etatPrecedent1=1; int bp1 = SW1.read(); if(bp1!=etatPrecedent1 && !bp1) frontDescendant = 1; etatPrecedent1= bp1; return frontDescendant; } int detectionFrontSW2(void) { int frontDescendant = 0; static int etatPrecedent2=1; int bp2 = SW2.read(); if(bp2!=etatPrecedent2 && !bp2) frontDescendant = 1; etatPrecedent2= bp2; return frontDescendant; } /* int detectionFrontSW3(void) { int frontDescendant = 0; static int etatPrecedent1=1; int bp = SW3.read(); if(bp!=etatPrecedent1 && !bp) frontDescendant = 1; etatPrecedent1= bp; return frontDescendant; } */ /* Test Arbitrage */ void AppuiSW3() { if (value_SW4 == 3) { if (can.write(CANMessage(60, DataArbitrage, 5 , CANData, CANStandard))) { // Rmq : tableau = pointeur ledD8 = !ledD8; Nb_messT++; } } } 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() { //HAL_Init(); //uint8_t receivedMessage[8]; //CAN_RxHeaderTypeDef RxHeader; //HAL_CAN_Start(&hcan); pc.baud(115200); pc.printf("Affichage serie Carte 1 \n"); can.frequency(500000); CANMessage msg; //unsigned char REC, TEC ; ledD6 = 1; ledD7 = 1; ledD8 = 1; ledD9 = 1; 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 - Bus CAN"); // print to frame buffer OLED.redraw(); // updates actual display transferring frame buffer over I2C bus */ //SW1.fall(&AppuiSW1); SW3.fall(&AppuiSW3); //antirebond.start(); OLED.locate (0,0); OLED.printf ("NbRx = 0"); OLED.locate (1,0); OLED.printf ("NbTx = 0"); while(1) { value_SW4 = LectureSW4(); if (detectionFrontSW1()) { if (value_SW4 == 0) { if (can.write(CANMessage(1975, Data, 5 , CANData, CANStandard))) { // Rmq : tableau = pointeur ledD6 = !ledD6; Nb_messT++; } } } if (detectionFrontSW2()) { if (value_SW4 == 0) { if (can.write(CANMessage(1975, CANStandard))) { // Remote frame ledD7 = !ledD7; Nb_messT++; } } } /* if (detectionFrontSW3()) { if (value_SW4 == 3) { if (can.write(CANMessage(60, DataArbitrage, 5 , CANData, CANStandard))) { // Rmq : tableau = pointeur ledD8 = !ledD8; Nb_messT++; } } } */ if (can.read(msg)) { Nb_messR++; ledD9 = !ledD9; for (int i =0; i < msg.len; i++) Donnees[i] = msg.data[i]; pc.printf("ID = 0x%.3x\r\n", msg.id); //ID sous forme 0x suivi de l'id pc.printf("Length = %d\r\n", msg.len); pc.printf("Boucle envoi CAN rderrors : %d, CAN tderrors : %d\n", can.rderror(), can.tderror()); //REC = can.rderror(); } OLED.locate (0,0); OLED.printf ("NbRx = %d", Nb_messR); OLED.locate (1,0); OLED.printf ("NbTx = %d", Nb_messT); OLED.locate (3,0); OLED.printf ("Message recu "); OLED.locate (4,0); OLED.printf ("=> "); OLED.puts(Donnees); OLED.locate (6,0); OLED.printf("Valeur REC=%u", can.rderror()); OLED.locate (7,0); OLED.printf("Valeur TEC=%u", can.tderror()); OLED.redraw(); wait(0.2); } } /* Envoi d'une trame de requete */ /* void AppuiSW2() { if (can.write(CANMessage(1620, CANStandard ))) { ledD7 = !ledD7; } } */ /* Envoi d'une trame de donnees */ /* void AppuiSW1() { if (antirebond.read_ms() > 100) { //while(!SW1); if (value_SW4 == 1) { if (can.write(CANMessage(2021, Data, 5 , CANData, CANStandard))) // Rmq : tableau = pointeur ledD6 = !ledD6; } antirebond.reset(); } } */ /* char *conversionIntChaine(int longueurChaine, int Valeur_int, char *ChaineAffichage) { while (longueurChaine >= 0) { ChaineAffichage[longueurChaine] = (Valeur_int % 10) + 48; Valeur_int /= 10; longueurChaine--; } return (ChaineAffichage); } */ /* OLED.locate (2,0); OLED.printf("ADC A0=%2.1f", (adc_RV1.read()*100)); 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); */