Bus Can
Dependencies: mbed ssd1306_library
main_Carte2.cpp@0:793b62d1f1ec, 2021-02-11 (annotated)
- Committer:
- emmanueldavid
- Date:
- Thu Feb 11 17:05:35 2021 +0000
- Revision:
- 0:793b62d1f1ec
- Child:
- 1:068cd7adbe4d
Modif 11/02
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emmanueldavid | 0:793b62d1f1ec | 1 | /* |
emmanueldavid | 0:793b62d1f1ec | 2 | * Copyright (c) 2017-2020 Arm Limited and affiliates. |
emmanueldavid | 0:793b62d1f1ec | 3 | * SPDX-License-Identifier: Apache-2.0 |
emmanueldavid | 0:793b62d1f1ec | 4 | */ |
emmanueldavid | 0:793b62d1f1ec | 5 | |
emmanueldavid | 0:793b62d1f1ec | 6 | #if !DEVICE_CAN |
emmanueldavid | 0:793b62d1f1ec | 7 | #error [NOT_SUPPORTED] CAN not supported for this target |
emmanueldavid | 0:793b62d1f1ec | 8 | #endif |
emmanueldavid | 0:793b62d1f1ec | 9 | |
emmanueldavid | 0:793b62d1f1ec | 10 | |
emmanueldavid | 0:793b62d1f1ec | 11 | #include "mbed.h" |
emmanueldavid | 0:793b62d1f1ec | 12 | //#include "can.h" |
emmanueldavid | 0:793b62d1f1ec | 13 | #include "ssd1306.h" |
emmanueldavid | 0:793b62d1f1ec | 14 | |
emmanueldavid | 0:793b62d1f1ec | 15 | SSD1306 OLED (I2C_SDA, I2C_SCL); // assumes default I2C address of 0x78 |
emmanueldavid | 0:793b62d1f1ec | 16 | |
emmanueldavid | 0:793b62d1f1ec | 17 | |
emmanueldavid | 0:793b62d1f1ec | 18 | //Ticker ticker; |
emmanueldavid | 0:793b62d1f1ec | 19 | |
emmanueldavid | 0:793b62d1f1ec | 20 | DigitalOut ledD9(PA_4); |
emmanueldavid | 0:793b62d1f1ec | 21 | //DigitalOut ledD8(PA_5); // NON, désouder SB16 si utilisation I2c |
emmanueldavid | 0:793b62d1f1ec | 22 | //DigitalOut ledD7(PA_6); // NON, désouder SB18 si utilisation I2c |
emmanueldavid | 0:793b62d1f1ec | 23 | DigitalOut ledD6(PA_7); |
emmanueldavid | 0:793b62d1f1ec | 24 | |
emmanueldavid | 0:793b62d1f1ec | 25 | DigitalIn SW4_1(PA_1); |
emmanueldavid | 0:793b62d1f1ec | 26 | DigitalIn SW4_0(PA_3); |
emmanueldavid | 0:793b62d1f1ec | 27 | |
emmanueldavid | 0:793b62d1f1ec | 28 | InterruptIn SW1(PB_4, PullUp); |
emmanueldavid | 0:793b62d1f1ec | 29 | InterruptIn SW2(PB_5, PullUp); |
emmanueldavid | 0:793b62d1f1ec | 30 | InterruptIn SW3(PA_8, PullUp); |
emmanueldavid | 0:793b62d1f1ec | 31 | |
emmanueldavid | 0:793b62d1f1ec | 32 | /** The constructor takes in RX, and TX pin respectively. |
emmanueldavid | 0:793b62d1f1ec | 33 | * These pins, for this example, are defined in mbed_app.json |
emmanueldavid | 0:793b62d1f1ec | 34 | */ |
emmanueldavid | 0:793b62d1f1ec | 35 | //CAN can1(MBED_CONF_APP_CAN1_RD, MBED_CONF_APP_CAN1_TD); |
emmanueldavid | 0:793b62d1f1ec | 36 | |
emmanueldavid | 0:793b62d1f1ec | 37 | CAN can(PA_11, PA_12); |
emmanueldavid | 0:793b62d1f1ec | 38 | Serial pc(USBTX, USBRX); |
emmanueldavid | 0:793b62d1f1ec | 39 | |
emmanueldavid | 0:793b62d1f1ec | 40 | char counter = 123; |
emmanueldavid | 0:793b62d1f1ec | 41 | char Carte2[] = "K2"; |
emmanueldavid | 0:793b62d1f1ec | 42 | char Carte2bb[] = "K2bb"; |
emmanueldavid | 0:793b62d1f1ec | 43 | static int Nb_messT = 0; |
emmanueldavid | 0:793b62d1f1ec | 44 | int value_SW4=0; |
emmanueldavid | 0:793b62d1f1ec | 45 | |
emmanueldavid | 0:793b62d1f1ec | 46 | /* |
emmanueldavid | 0:793b62d1f1ec | 47 | void send() |
emmanueldavid | 0:793b62d1f1ec | 48 | { |
emmanueldavid | 0:793b62d1f1ec | 49 | //pc.printf("Reception \n"); |
emmanueldavid | 0:793b62d1f1ec | 50 | if (can.write(CANMessage(1337, &counter, 1))) { |
emmanueldavid | 0:793b62d1f1ec | 51 | //pc.printf("wloop()\n"); |
emmanueldavid | 0:793b62d1f1ec | 52 | counter++; |
emmanueldavid | 0:793b62d1f1ec | 53 | //pc.printf("Message sent: %d\n", counter); |
emmanueldavid | 0:793b62d1f1ec | 54 | ledD7 = !ledD7; |
emmanueldavid | 0:793b62d1f1ec | 55 | } |
emmanueldavid | 0:793b62d1f1ec | 56 | } |
emmanueldavid | 0:793b62d1f1ec | 57 | */ |
emmanueldavid | 0:793b62d1f1ec | 58 | |
emmanueldavid | 0:793b62d1f1ec | 59 | void AppuiSW1() { |
emmanueldavid | 0:793b62d1f1ec | 60 | if (can.write(CANMessage(2021, Carte2, 3 , CANData, CANStandard))) {// Rmq : tableau = pointeur |
emmanueldavid | 0:793b62d1f1ec | 61 | ledD6 = !ledD6; |
emmanueldavid | 0:793b62d1f1ec | 62 | Nb_messT++; |
emmanueldavid | 0:793b62d1f1ec | 63 | } |
emmanueldavid | 0:793b62d1f1ec | 64 | } |
emmanueldavid | 0:793b62d1f1ec | 65 | |
emmanueldavid | 0:793b62d1f1ec | 66 | void AppuiSW3() { |
emmanueldavid | 0:793b62d1f1ec | 67 | if (value_SW4 == 2) { |
emmanueldavid | 0:793b62d1f1ec | 68 | if (can.write(CANMessage(1111, Carte2bb, 3 , CANData, CANStandard))) {// Rmq : tableau = pointeur |
emmanueldavid | 0:793b62d1f1ec | 69 | ledD6 = !ledD6; |
emmanueldavid | 0:793b62d1f1ec | 70 | Nb_messT++; |
emmanueldavid | 0:793b62d1f1ec | 71 | } |
emmanueldavid | 0:793b62d1f1ec | 72 | } |
emmanueldavid | 0:793b62d1f1ec | 73 | if (value_SW4 == 3) { |
emmanueldavid | 0:793b62d1f1ec | 74 | if (can.write(CANMessage(2222, Carte2bb, 3 , CANData, CANStandard))) {// Rmq : tableau = pointeur |
emmanueldavid | 0:793b62d1f1ec | 75 | ledD6 = !ledD6; |
emmanueldavid | 0:793b62d1f1ec | 76 | Nb_messT++; |
emmanueldavid | 0:793b62d1f1ec | 77 | } |
emmanueldavid | 0:793b62d1f1ec | 78 | } |
emmanueldavid | 0:793b62d1f1ec | 79 | } |
emmanueldavid | 0:793b62d1f1ec | 80 | |
emmanueldavid | 0:793b62d1f1ec | 81 | int LectureSW4(){ |
emmanueldavid | 0:793b62d1f1ec | 82 | int ETAT; |
emmanueldavid | 0:793b62d1f1ec | 83 | int value_SW4_0 = SW4_0.read(); |
emmanueldavid | 0:793b62d1f1ec | 84 | int value_SW4_1 = SW4_1.read(); |
emmanueldavid | 0:793b62d1f1ec | 85 | |
emmanueldavid | 0:793b62d1f1ec | 86 | if (value_SW4_1 == 1) { |
emmanueldavid | 0:793b62d1f1ec | 87 | if (value_SW4_0 == 1) |
emmanueldavid | 0:793b62d1f1ec | 88 | ETAT = 3; |
emmanueldavid | 0:793b62d1f1ec | 89 | else |
emmanueldavid | 0:793b62d1f1ec | 90 | ETAT = 2; |
emmanueldavid | 0:793b62d1f1ec | 91 | } |
emmanueldavid | 0:793b62d1f1ec | 92 | else { |
emmanueldavid | 0:793b62d1f1ec | 93 | if (value_SW4_0 == 1) |
emmanueldavid | 0:793b62d1f1ec | 94 | ETAT = 1; |
emmanueldavid | 0:793b62d1f1ec | 95 | else |
emmanueldavid | 0:793b62d1f1ec | 96 | ETAT = 0; |
emmanueldavid | 0:793b62d1f1ec | 97 | } |
emmanueldavid | 0:793b62d1f1ec | 98 | return ETAT; |
emmanueldavid | 0:793b62d1f1ec | 99 | } |
emmanueldavid | 0:793b62d1f1ec | 100 | |
emmanueldavid | 0:793b62d1f1ec | 101 | /* Reset controleur après court-circuit */ |
emmanueldavid | 0:793b62d1f1ec | 102 | /* |
emmanueldavid | 0:793b62d1f1ec | 103 | void AppuiSW3() { |
emmanueldavid | 0:793b62d1f1ec | 104 | can.reset(); |
emmanueldavid | 0:793b62d1f1ec | 105 | OLED.cls(); |
emmanueldavid | 0:793b62d1f1ec | 106 | OLED.locate (0,0); // set text cursor to line 3, column 1 |
emmanueldavid | 0:793b62d1f1ec | 107 | OLED.printf ("GEII - Bus CAN"); // print to frame buffer |
emmanueldavid | 0:793b62d1f1ec | 108 | OLED.locate (2,0); // set text cursor to line 3, column 1 |
emmanueldavid | 0:793b62d1f1ec | 109 | OLED.printf ("SW1"); // print to frame buffer |
emmanueldavid | 0:793b62d1f1ec | 110 | OLED.locate (3,0); // set text cursor to line 3, column 1 |
emmanueldavid | 0:793b62d1f1ec | 111 | OLED.printf ("Envoi trame"); // print to frame buffer |
emmanueldavid | 0:793b62d1f1ec | 112 | OLED.redraw(); |
emmanueldavid | 0:793b62d1f1ec | 113 | } |
emmanueldavid | 0:793b62d1f1ec | 114 | */ |
emmanueldavid | 0:793b62d1f1ec | 115 | /* |
emmanueldavid | 0:793b62d1f1ec | 116 | char *conversionIntChaine(int longueurChaine, int Valeur_int, char *ChaineAffichage) |
emmanueldavid | 0:793b62d1f1ec | 117 | { |
emmanueldavid | 0:793b62d1f1ec | 118 | while (longueurChaine >= 0) |
emmanueldavid | 0:793b62d1f1ec | 119 | { |
emmanueldavid | 0:793b62d1f1ec | 120 | ChaineAffichage[longueurChaine] = (Valeur_int % 10) + 48; |
emmanueldavid | 0:793b62d1f1ec | 121 | Valeur_int /= 10; |
emmanueldavid | 0:793b62d1f1ec | 122 | longueurChaine--; |
emmanueldavid | 0:793b62d1f1ec | 123 | } |
emmanueldavid | 0:793b62d1f1ec | 124 | return (ChaineAffichage); |
emmanueldavid | 0:793b62d1f1ec | 125 | } |
emmanueldavid | 0:793b62d1f1ec | 126 | */ |
emmanueldavid | 0:793b62d1f1ec | 127 | int main() |
emmanueldavid | 0:793b62d1f1ec | 128 | { |
emmanueldavid | 0:793b62d1f1ec | 129 | pc.baud(115200); |
emmanueldavid | 0:793b62d1f1ec | 130 | can.frequency(500000); |
emmanueldavid | 0:793b62d1f1ec | 131 | pc.printf("main()\n"); |
emmanueldavid | 0:793b62d1f1ec | 132 | //ticker.attach(&send, 2.0); |
emmanueldavid | 0:793b62d1f1ec | 133 | CANMessage msg; |
emmanueldavid | 0:793b62d1f1ec | 134 | |
emmanueldavid | 0:793b62d1f1ec | 135 | char Donnees[8]=""; |
emmanueldavid | 0:793b62d1f1ec | 136 | static int Nb_messR = 0; |
emmanueldavid | 0:793b62d1f1ec | 137 | |
emmanueldavid | 0:793b62d1f1ec | 138 | OLED.speed(SSD1306::Medium); // set working frequency |
emmanueldavid | 0:793b62d1f1ec | 139 | OLED.init(); // initialize SSD1306 |
emmanueldavid | 0:793b62d1f1ec | 140 | OLED.cls(); // clear frame buffer |
emmanueldavid | 0:793b62d1f1ec | 141 | /* |
emmanueldavid | 0:793b62d1f1ec | 142 | OLED.locate (0,0); // set text cursor to line 3, column 1 |
emmanueldavid | 0:793b62d1f1ec | 143 | OLED.printf ("GEII - Bus CAN"); // print to frame buffer |
emmanueldavid | 0:793b62d1f1ec | 144 | OLED.locate (2,0); // set text cursor to line 3, column 1 |
emmanueldavid | 0:793b62d1f1ec | 145 | OLED.printf ("SW1"); // print to frame buffer |
emmanueldavid | 0:793b62d1f1ec | 146 | OLED.locate (3,0); // set text cursor to line 3, column 1 |
emmanueldavid | 0:793b62d1f1ec | 147 | OLED.printf ("Envoi trame"); // print to frame buffer |
emmanueldavid | 0:793b62d1f1ec | 148 | OLED.redraw(); |
emmanueldavid | 0:793b62d1f1ec | 149 | */ |
emmanueldavid | 0:793b62d1f1ec | 150 | |
emmanueldavid | 0:793b62d1f1ec | 151 | SW1.fall(&AppuiSW1); |
emmanueldavid | 0:793b62d1f1ec | 152 | SW3.fall(&AppuiSW3); |
emmanueldavid | 0:793b62d1f1ec | 153 | |
emmanueldavid | 0:793b62d1f1ec | 154 | OLED.locate (0,0); |
emmanueldavid | 0:793b62d1f1ec | 155 | OLED.printf ("Nb Rx = 0"); |
emmanueldavid | 0:793b62d1f1ec | 156 | OLED.locate (1,0); |
emmanueldavid | 0:793b62d1f1ec | 157 | OLED.printf ("Nb Tx = 0"); |
emmanueldavid | 0:793b62d1f1ec | 158 | |
emmanueldavid | 0:793b62d1f1ec | 159 | |
emmanueldavid | 0:793b62d1f1ec | 160 | while (1) { |
emmanueldavid | 0:793b62d1f1ec | 161 | //pc.printf("Reception message \n"); |
emmanueldavid | 0:793b62d1f1ec | 162 | value_SW4 = LectureSW4(); |
emmanueldavid | 0:793b62d1f1ec | 163 | |
emmanueldavid | 0:793b62d1f1ec | 164 | if (can.read(msg)) { |
emmanueldavid | 0:793b62d1f1ec | 165 | Nb_messR++; |
emmanueldavid | 0:793b62d1f1ec | 166 | ledD9 = !ledD9; |
emmanueldavid | 0:793b62d1f1ec | 167 | |
emmanueldavid | 0:793b62d1f1ec | 168 | for (int i =0; i < msg.len; i++) |
emmanueldavid | 0:793b62d1f1ec | 169 | Donnees[i] = msg.data[i]; |
emmanueldavid | 0:793b62d1f1ec | 170 | |
emmanueldavid | 0:793b62d1f1ec | 171 | pc.printf("ID = 0x%.3x\r\n", msg.id); //ID sous forme 0x suivi de l'id |
emmanueldavid | 0:793b62d1f1ec | 172 | pc.printf("Length = %d\r\n", msg.len); |
emmanueldavid | 0:793b62d1f1ec | 173 | pc.printf("CAN rderrors : %d, CAN tderrors : %d\n", can.rderror(), can.tderror()); |
emmanueldavid | 0:793b62d1f1ec | 174 | |
emmanueldavid | 0:793b62d1f1ec | 175 | } |
emmanueldavid | 0:793b62d1f1ec | 176 | OLED.locate (0,0); |
emmanueldavid | 0:793b62d1f1ec | 177 | OLED.printf ("Nb Rx = %d", Nb_messR); |
emmanueldavid | 0:793b62d1f1ec | 178 | OLED.locate (1,0); |
emmanueldavid | 0:793b62d1f1ec | 179 | OLED.printf ("Nb Tx = %d", Nb_messT); |
emmanueldavid | 0:793b62d1f1ec | 180 | OLED.locate (3,0); |
emmanueldavid | 0:793b62d1f1ec | 181 | OLED.printf ("Message recu "); |
emmanueldavid | 0:793b62d1f1ec | 182 | OLED.locate (4,0); |
emmanueldavid | 0:793b62d1f1ec | 183 | OLED.printf ("=> "); |
emmanueldavid | 0:793b62d1f1ec | 184 | OLED.puts(Donnees); |
emmanueldavid | 0:793b62d1f1ec | 185 | OLED.locate (6,0); |
emmanueldavid | 0:793b62d1f1ec | 186 | OLED.printf("Valeur REC=%d", can.rderror()); |
emmanueldavid | 0:793b62d1f1ec | 187 | OLED.locate (7,0); |
emmanueldavid | 0:793b62d1f1ec | 188 | OLED.printf("Valeur TEC=%d", can.tderror()); |
emmanueldavid | 0:793b62d1f1ec | 189 | OLED.redraw(); |
emmanueldavid | 0:793b62d1f1ec | 190 | wait(0.2); |
emmanueldavid | 0:793b62d1f1ec | 191 | |
emmanueldavid | 0:793b62d1f1ec | 192 | /* |
emmanueldavid | 0:793b62d1f1ec | 193 | if(!SW2) //Detect Switch Press |
emmanueldavid | 0:793b62d1f1ec | 194 | { |
emmanueldavid | 0:793b62d1f1ec | 195 | ledD7 = !ledD7; |
emmanueldavid | 0:793b62d1f1ec | 196 | while(!SW2); //Wait for Key release |
emmanueldavid | 0:793b62d1f1ec | 197 | } |
emmanueldavid | 0:793b62d1f1ec | 198 | */ |
emmanueldavid | 0:793b62d1f1ec | 199 | } |
emmanueldavid | 0:793b62d1f1ec | 200 | } |
emmanueldavid | 0:793b62d1f1ec | 201 | |
emmanueldavid | 0:793b62d1f1ec | 202 | |
emmanueldavid | 0:793b62d1f1ec | 203 | |
emmanueldavid | 0:793b62d1f1ec | 204 | /* |
emmanueldavid | 0:793b62d1f1ec | 205 | char * |
emmanueldavid | 0:793b62d1f1ec | 206 | itoa (int n) |
emmanueldavid | 0:793b62d1f1ec | 207 | { |
emmanueldavid | 0:793b62d1f1ec | 208 | |
emmanueldavid | 0:793b62d1f1ec | 209 | char *a = malloc (long_int (n) + 1); |
emmanueldavid | 0:793b62d1f1ec | 210 | int i; |
emmanueldavid | 0:793b62d1f1ec | 211 | for (i = 0; n > 0; i++) |
emmanueldavid | 0:793b62d1f1ec | 212 | { |
emmanueldavid | 0:793b62d1f1ec | 213 | a[i] = n % 10 + 48; |
emmanueldavid | 0:793b62d1f1ec | 214 | n = n / 10; |
emmanueldavid | 0:793b62d1f1ec | 215 | } |
emmanueldavid | 0:793b62d1f1ec | 216 | a[i + 1] = '\0'; |
emmanueldavid | 0:793b62d1f1ec | 217 | return retourne (a); |
emmanueldavid | 0:793b62d1f1ec | 218 | } |
emmanueldavid | 0:793b62d1f1ec | 219 | |
emmanueldavid | 0:793b62d1f1ec | 220 | char *create_str(int len, int n, int neg, char *str) |
emmanueldavid | 0:793b62d1f1ec | 221 | { |
emmanueldavid | 0:793b62d1f1ec | 222 | while (len >= 0) |
emmanueldavid | 0:793b62d1f1ec | 223 | { |
emmanueldavid | 0:793b62d1f1ec | 224 | str[len] = (n % 10) + 48; |
emmanueldavid | 0:793b62d1f1ec | 225 | n /= 10; |
emmanueldavid | 0:793b62d1f1ec | 226 | len--; |
emmanueldavid | 0:793b62d1f1ec | 227 | } |
emmanueldavid | 0:793b62d1f1ec | 228 | if (neg < 0) |
emmanueldavid | 0:793b62d1f1ec | 229 | str[0] = '-'; |
emmanueldavid | 0:793b62d1f1ec | 230 | return (str); |
emmanueldavid | 0:793b62d1f1ec | 231 | } |
emmanueldavid | 0:793b62d1f1ec | 232 | */ |