![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Bus Can
Dependencies: mbed ssd1306_library
main_Carte2.cpp
- Committer:
- emmanueldavid
- Date:
- 2021-02-11
- Revision:
- 0:793b62d1f1ec
- Child:
- 1:068cd7adbe4d
File content as of revision 0:793b62d1f1ec:
/* * Copyright (c) 2017-2020 Arm Limited and affiliates. * SPDX-License-Identifier: Apache-2.0 */ #if !DEVICE_CAN #error [NOT_SUPPORTED] CAN not supported for this target #endif #include "mbed.h" //#include "can.h" #include "ssd1306.h" SSD1306 OLED (I2C_SDA, I2C_SCL); // assumes default I2C address of 0x78 //Ticker ticker; DigitalOut ledD9(PA_4); //DigitalOut ledD8(PA_5); // NON, désouder SB16 si utilisation I2c //DigitalOut ledD7(PA_6); // NON, désouder SB18 si utilisation I2c 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); /** The constructor takes in RX, and TX pin respectively. * These pins, for this example, are defined in mbed_app.json */ //CAN can1(MBED_CONF_APP_CAN1_RD, MBED_CONF_APP_CAN1_TD); CAN can(PA_11, PA_12); Serial pc(USBTX, USBRX); char counter = 123; char Carte2[] = "K2"; char Carte2bb[] = "K2bb"; static int Nb_messT = 0; int value_SW4=0; /* void send() { //pc.printf("Reception \n"); if (can.write(CANMessage(1337, &counter, 1))) { //pc.printf("wloop()\n"); counter++; //pc.printf("Message sent: %d\n", counter); ledD7 = !ledD7; } } */ void AppuiSW1() { if (can.write(CANMessage(2021, Carte2, 3 , CANData, CANStandard))) {// Rmq : tableau = pointeur ledD6 = !ledD6; Nb_messT++; } } void AppuiSW3() { if (value_SW4 == 2) { if (can.write(CANMessage(1111, Carte2bb, 3 , CANData, CANStandard))) {// Rmq : tableau = pointeur ledD6 = !ledD6; Nb_messT++; } } if (value_SW4 == 3) { if (can.write(CANMessage(2222, Carte2bb, 3 , CANData, CANStandard))) {// Rmq : tableau = pointeur ledD6 = !ledD6; 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; } /* Reset controleur après court-circuit */ /* void AppuiSW3() { can.reset(); OLED.cls(); OLED.locate (0,0); // set text cursor to line 3, column 1 OLED.printf ("GEII - Bus CAN"); // print to frame buffer OLED.locate (2,0); // set text cursor to line 3, column 1 OLED.printf ("SW1"); // print to frame buffer OLED.locate (3,0); // set text cursor to line 3, column 1 OLED.printf ("Envoi trame"); // print to frame buffer OLED.redraw(); } */ /* char *conversionIntChaine(int longueurChaine, int Valeur_int, char *ChaineAffichage) { while (longueurChaine >= 0) { ChaineAffichage[longueurChaine] = (Valeur_int % 10) + 48; Valeur_int /= 10; longueurChaine--; } return (ChaineAffichage); } */ int main() { pc.baud(115200); can.frequency(500000); pc.printf("main()\n"); //ticker.attach(&send, 2.0); CANMessage msg; char Donnees[8]=""; static int Nb_messR = 0; 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.locate (2,0); // set text cursor to line 3, column 1 OLED.printf ("SW1"); // print to frame buffer OLED.locate (3,0); // set text cursor to line 3, column 1 OLED.printf ("Envoi trame"); // print to frame buffer OLED.redraw(); */ SW1.fall(&AppuiSW1); SW3.fall(&AppuiSW3); OLED.locate (0,0); OLED.printf ("Nb Rx = 0"); OLED.locate (1,0); OLED.printf ("Nb Tx = 0"); while (1) { //pc.printf("Reception message \n"); value_SW4 = LectureSW4(); 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("CAN rderrors : %d, CAN tderrors : %d\n", can.rderror(), can.tderror()); } OLED.locate (0,0); OLED.printf ("Nb Rx = %d", Nb_messR); OLED.locate (1,0); OLED.printf ("Nb Tx = %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=%d", can.rderror()); OLED.locate (7,0); OLED.printf("Valeur TEC=%d", can.tderror()); OLED.redraw(); wait(0.2); /* if(!SW2) //Detect Switch Press { ledD7 = !ledD7; while(!SW2); //Wait for Key release } */ } } /* char * itoa (int n) { char *a = malloc (long_int (n) + 1); int i; for (i = 0; n > 0; i++) { a[i] = n % 10 + 48; n = n / 10; } a[i + 1] = '\0'; return retourne (a); } char *create_str(int len, int n, int neg, char *str) { while (len >= 0) { str[len] = (n % 10) + 48; n /= 10; len--; } if (neg < 0) str[0] = '-'; return (str); } */