Bus Can

Dependencies:   mbed ssd1306_library

Committer:
emmanueldavid
Date:
Wed Mar 10 18:24:03 2021 +0000
Revision:
1:068cd7adbe4d
Parent:
0:793b62d1f1ec
version 10/03

Who changed what in which revision?

UserRevisionLine numberNew 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 "ssd1306.h"
emmanueldavid 0:793b62d1f1ec 13
emmanueldavid 0:793b62d1f1ec 14 SSD1306 OLED (I2C_SDA, I2C_SCL); // assumes default I2C address of 0x78
emmanueldavid 0:793b62d1f1ec 15
emmanueldavid 0:793b62d1f1ec 16
emmanueldavid 0:793b62d1f1ec 17 //Ticker ticker;
emmanueldavid 0:793b62d1f1ec 18
emmanueldavid 0:793b62d1f1ec 19 DigitalOut ledD9(PA_4);
emmanueldavid 1:068cd7adbe4d 20 DigitalOut ledD8(PA_5); // NON, désouder SB16 si utilisation I2c
emmanueldavid 1:068cd7adbe4d 21 DigitalOut ledD7(PA_6); // NON, désouder SB18 si utilisation I2c
emmanueldavid 0:793b62d1f1ec 22 DigitalOut ledD6(PA_7);
emmanueldavid 0:793b62d1f1ec 23
emmanueldavid 0:793b62d1f1ec 24 DigitalIn SW4_1(PA_1);
emmanueldavid 0:793b62d1f1ec 25 DigitalIn SW4_0(PA_3);
emmanueldavid 1:068cd7adbe4d 26 DigitalIn SW1(PB_4, PullUp);
emmanueldavid 1:068cd7adbe4d 27 DigitalIn SW2(PB_5, PullUp);
emmanueldavid 1:068cd7adbe4d 28 //DigitalIn SW3(PA_8, PullUp);
emmanueldavid 0:793b62d1f1ec 29
emmanueldavid 1:068cd7adbe4d 30 //InterruptIn SW1(PB_4, PullUp);
emmanueldavid 1:068cd7adbe4d 31 //InterruptIn SW2(PB_5, PullUp);
emmanueldavid 0:793b62d1f1ec 32 InterruptIn SW3(PA_8, PullUp);
emmanueldavid 0:793b62d1f1ec 33
emmanueldavid 0:793b62d1f1ec 34 /** The constructor takes in RX, and TX pin respectively.
emmanueldavid 0:793b62d1f1ec 35 * These pins, for this example, are defined in mbed_app.json
emmanueldavid 0:793b62d1f1ec 36 */
emmanueldavid 0:793b62d1f1ec 37 //CAN can1(MBED_CONF_APP_CAN1_RD, MBED_CONF_APP_CAN1_TD);
emmanueldavid 0:793b62d1f1ec 38
emmanueldavid 0:793b62d1f1ec 39 CAN can(PA_11, PA_12);
emmanueldavid 1:068cd7adbe4d 40 //Serial pc(USBTX, USBRX);
emmanueldavid 0:793b62d1f1ec 41
emmanueldavid 0:793b62d1f1ec 42 char counter = 123;
emmanueldavid 1:068cd7adbe4d 43 char Carte2[] = "K2 ";
emmanueldavid 0:793b62d1f1ec 44 char Carte2bb[] = "K2bb";
emmanueldavid 1:068cd7adbe4d 45 int Nb_messT = 0;
emmanueldavid 0:793b62d1f1ec 46 int value_SW4=0;
emmanueldavid 0:793b62d1f1ec 47
emmanueldavid 1:068cd7adbe4d 48 int detectionFrontSW1(void) {
emmanueldavid 1:068cd7adbe4d 49 int frontDescendant = 0;
emmanueldavid 1:068cd7adbe4d 50 static int etatPrecedent1=1;
emmanueldavid 1:068cd7adbe4d 51 int bp = SW1.read();
emmanueldavid 1:068cd7adbe4d 52 if(bp!=etatPrecedent1 && !bp)
emmanueldavid 1:068cd7adbe4d 53 frontDescendant = 1;
emmanueldavid 1:068cd7adbe4d 54 etatPrecedent1= bp;
emmanueldavid 1:068cd7adbe4d 55 return frontDescendant;
emmanueldavid 1:068cd7adbe4d 56 }
emmanueldavid 1:068cd7adbe4d 57
emmanueldavid 1:068cd7adbe4d 58 int detectionFrontSW2(void) {
emmanueldavid 1:068cd7adbe4d 59 int frontDescendant = 0;
emmanueldavid 1:068cd7adbe4d 60 static int etatPrecedent1=1;
emmanueldavid 1:068cd7adbe4d 61 int bp = SW2.read();
emmanueldavid 1:068cd7adbe4d 62 if(bp!=etatPrecedent1 && !bp)
emmanueldavid 1:068cd7adbe4d 63 frontDescendant = 1;
emmanueldavid 1:068cd7adbe4d 64 etatPrecedent1= bp;
emmanueldavid 1:068cd7adbe4d 65 return frontDescendant;
emmanueldavid 1:068cd7adbe4d 66 }
emmanueldavid 1:068cd7adbe4d 67
emmanueldavid 0:793b62d1f1ec 68 /*
emmanueldavid 1:068cd7adbe4d 69 int detectionFrontSW3(void) {
emmanueldavid 1:068cd7adbe4d 70 int frontDescendant = 0;
emmanueldavid 1:068cd7adbe4d 71 static int etatPrecedent1=1;
emmanueldavid 1:068cd7adbe4d 72 int bp = SW3.read();
emmanueldavid 1:068cd7adbe4d 73 if(bp!=etatPrecedent1 && !bp)
emmanueldavid 1:068cd7adbe4d 74 frontDescendant = 1;
emmanueldavid 1:068cd7adbe4d 75 etatPrecedent1= bp;
emmanueldavid 1:068cd7adbe4d 76 return frontDescendant;
emmanueldavid 0:793b62d1f1ec 77 }
emmanueldavid 0:793b62d1f1ec 78 */
emmanueldavid 0:793b62d1f1ec 79
emmanueldavid 1:068cd7adbe4d 80 /* Test Arbitrage */
emmanueldavid 1:068cd7adbe4d 81 void AppuiSW3() {
emmanueldavid 1:068cd7adbe4d 82 if (value_SW4 == 3) {
emmanueldavid 1:068cd7adbe4d 83 if (can.write(CANMessage(60, Carte2bb, 5 , CANData, CANStandard))) { // Rmq : tableau = pointeur
emmanueldavid 1:068cd7adbe4d 84 ledD8 = !ledD8;
emmanueldavid 1:068cd7adbe4d 85 Nb_messT++;
emmanueldavid 1:068cd7adbe4d 86 }
emmanueldavid 0:793b62d1f1ec 87 }
emmanueldavid 1:068cd7adbe4d 88 if (value_SW4 == 2) {
emmanueldavid 1:068cd7adbe4d 89 if (can.write(CANMessage(48, Carte2bb, 5 , CANData, CANStandard))) { // Rmq : tableau = pointeur
emmanueldavid 1:068cd7adbe4d 90 ledD8 = !ledD8;
emmanueldavid 1:068cd7adbe4d 91 Nb_messT++;
emmanueldavid 1:068cd7adbe4d 92 }
emmanueldavid 1:068cd7adbe4d 93 }
emmanueldavid 0:793b62d1f1ec 94 }
emmanueldavid 0:793b62d1f1ec 95
emmanueldavid 0:793b62d1f1ec 96
emmanueldavid 0:793b62d1f1ec 97 int LectureSW4(){
emmanueldavid 0:793b62d1f1ec 98 int ETAT;
emmanueldavid 0:793b62d1f1ec 99 int value_SW4_0 = SW4_0.read();
emmanueldavid 0:793b62d1f1ec 100 int value_SW4_1 = SW4_1.read();
emmanueldavid 0:793b62d1f1ec 101
emmanueldavid 0:793b62d1f1ec 102 if (value_SW4_1 == 1) {
emmanueldavid 0:793b62d1f1ec 103 if (value_SW4_0 == 1)
emmanueldavid 0:793b62d1f1ec 104 ETAT = 3;
emmanueldavid 0:793b62d1f1ec 105 else
emmanueldavid 0:793b62d1f1ec 106 ETAT = 2;
emmanueldavid 0:793b62d1f1ec 107 }
emmanueldavid 0:793b62d1f1ec 108 else {
emmanueldavid 0:793b62d1f1ec 109 if (value_SW4_0 == 1)
emmanueldavid 0:793b62d1f1ec 110 ETAT = 1;
emmanueldavid 0:793b62d1f1ec 111 else
emmanueldavid 0:793b62d1f1ec 112 ETAT = 0;
emmanueldavid 0:793b62d1f1ec 113 }
emmanueldavid 0:793b62d1f1ec 114 return ETAT;
emmanueldavid 0:793b62d1f1ec 115 }
emmanueldavid 0:793b62d1f1ec 116
emmanueldavid 1:068cd7adbe4d 117
emmanueldavid 1:068cd7adbe4d 118 int main()
emmanueldavid 1:068cd7adbe4d 119 {
emmanueldavid 1:068cd7adbe4d 120 //pc.baud(115200);
emmanueldavid 1:068cd7adbe4d 121 //pc.printf("main()\n");
emmanueldavid 1:068cd7adbe4d 122
emmanueldavid 1:068cd7adbe4d 123 can.frequency(500000);
emmanueldavid 1:068cd7adbe4d 124 CANMessage msg;
emmanueldavid 1:068cd7adbe4d 125
emmanueldavid 1:068cd7adbe4d 126 char Donnees[8]="";
emmanueldavid 1:068cd7adbe4d 127 static int Nb_messR = 0;
emmanueldavid 1:068cd7adbe4d 128
emmanueldavid 1:068cd7adbe4d 129 ledD6 = 1; ledD7 = 1; ledD8 = 1; ledD9 = 1;
emmanueldavid 1:068cd7adbe4d 130
emmanueldavid 1:068cd7adbe4d 131 OLED.speed(SSD1306::Medium); // set working frequency
emmanueldavid 1:068cd7adbe4d 132 OLED.init(); // initialize SSD1306
emmanueldavid 1:068cd7adbe4d 133 OLED.cls(); // clear frame buffer
emmanueldavid 1:068cd7adbe4d 134
emmanueldavid 1:068cd7adbe4d 135 OLED.locate (0,0);
emmanueldavid 1:068cd7adbe4d 136 OLED.printf ("NbRx = 0");
emmanueldavid 1:068cd7adbe4d 137 OLED.locate (1,0);
emmanueldavid 1:068cd7adbe4d 138 OLED.printf ("NbTx = 0");
emmanueldavid 1:068cd7adbe4d 139
emmanueldavid 1:068cd7adbe4d 140 SW3.fall(&AppuiSW3);
emmanueldavid 1:068cd7adbe4d 141
emmanueldavid 1:068cd7adbe4d 142 while (1) {
emmanueldavid 1:068cd7adbe4d 143 //pc.printf("Reception message \n");
emmanueldavid 1:068cd7adbe4d 144 value_SW4 = LectureSW4();
emmanueldavid 1:068cd7adbe4d 145
emmanueldavid 1:068cd7adbe4d 146 if (detectionFrontSW1())
emmanueldavid 1:068cd7adbe4d 147 {
emmanueldavid 1:068cd7adbe4d 148 if (value_SW4 == 0) {
emmanueldavid 1:068cd7adbe4d 149 if (can.write(CANMessage(2021, Carte2, 5 , CANData, CANStandard))) { // Rmq : tableau = pointeur
emmanueldavid 1:068cd7adbe4d 150 ledD6 = !ledD6;
emmanueldavid 1:068cd7adbe4d 151 Nb_messT++;
emmanueldavid 1:068cd7adbe4d 152 }
emmanueldavid 1:068cd7adbe4d 153 }
emmanueldavid 1:068cd7adbe4d 154 }
emmanueldavid 1:068cd7adbe4d 155 /*
emmanueldavid 1:068cd7adbe4d 156 if (detectionFrontSW2())
emmanueldavid 1:068cd7adbe4d 157 {
emmanueldavid 1:068cd7adbe4d 158 if (value_SW4 == 0) {
emmanueldavid 1:068cd7adbe4d 159 if (can.write(CANMessage(2021, CANStandard))) { // Remote frame
emmanueldavid 1:068cd7adbe4d 160 ledD7 = !ledD7;
emmanueldavid 1:068cd7adbe4d 161 Nb_messT++;
emmanueldavid 1:068cd7adbe4d 162 }
emmanueldavid 1:068cd7adbe4d 163 }
emmanueldavid 1:068cd7adbe4d 164 }
emmanueldavid 1:068cd7adbe4d 165 */
emmanueldavid 1:068cd7adbe4d 166 /*
emmanueldavid 1:068cd7adbe4d 167 if (detectionFrontSW3())
emmanueldavid 1:068cd7adbe4d 168 {
emmanueldavid 1:068cd7adbe4d 169 if (value_SW4 == 3) {
emmanueldavid 1:068cd7adbe4d 170 if (can.write(CANMessage(60, Carte2bb, 5 , CANData, CANStandard))) { // Rmq : tableau = pointeur
emmanueldavid 1:068cd7adbe4d 171 ledD8 = !ledD8;
emmanueldavid 1:068cd7adbe4d 172 Nb_messT++;
emmanueldavid 1:068cd7adbe4d 173 }
emmanueldavid 1:068cd7adbe4d 174 }
emmanueldavid 1:068cd7adbe4d 175 if (value_SW4 == 2) {
emmanueldavid 1:068cd7adbe4d 176 if (can.write(CANMessage(48, Carte2bb, 5 , CANData, CANStandard))) { // Rmq : tableau = pointeur
emmanueldavid 1:068cd7adbe4d 177 ledD8 = !ledD8;
emmanueldavid 1:068cd7adbe4d 178 Nb_messT++;
emmanueldavid 1:068cd7adbe4d 179 }
emmanueldavid 1:068cd7adbe4d 180 }
emmanueldavid 1:068cd7adbe4d 181 }
emmanueldavid 1:068cd7adbe4d 182 */
emmanueldavid 1:068cd7adbe4d 183
emmanueldavid 1:068cd7adbe4d 184 if (can.read(msg)) {
emmanueldavid 1:068cd7adbe4d 185 Nb_messR++;
emmanueldavid 1:068cd7adbe4d 186 ledD9 = !ledD9;
emmanueldavid 1:068cd7adbe4d 187
emmanueldavid 1:068cd7adbe4d 188 for (int i =0; i < msg.len; i++)
emmanueldavid 1:068cd7adbe4d 189 Donnees[i] = msg.data[i];
emmanueldavid 1:068cd7adbe4d 190
emmanueldavid 1:068cd7adbe4d 191 //pc.printf("ID = 0x%.3x\r\n", msg.id); //ID sous forme 0x suivi de l'id
emmanueldavid 1:068cd7adbe4d 192 //pc.printf("Length = %d\r\n", msg.len);
emmanueldavid 1:068cd7adbe4d 193 //pc.printf("CAN rderrors : %d, CAN tderrors : %d\n", can.rderror(), can.tderror());
emmanueldavid 1:068cd7adbe4d 194
emmanueldavid 1:068cd7adbe4d 195 }
emmanueldavid 1:068cd7adbe4d 196 OLED.locate (0,0);
emmanueldavid 1:068cd7adbe4d 197 OLED.printf ("NbRx = %d", Nb_messR);
emmanueldavid 1:068cd7adbe4d 198 OLED.locate (1,0);
emmanueldavid 1:068cd7adbe4d 199 OLED.printf ("NbTx = %d", Nb_messT);
emmanueldavid 1:068cd7adbe4d 200 OLED.locate (3,0);
emmanueldavid 1:068cd7adbe4d 201 OLED.printf ("Message recu ");
emmanueldavid 1:068cd7adbe4d 202 OLED.locate (4,0);
emmanueldavid 1:068cd7adbe4d 203 OLED.printf ("=> ");
emmanueldavid 1:068cd7adbe4d 204 OLED.puts(Donnees);
emmanueldavid 1:068cd7adbe4d 205 OLED.locate (6,0);
emmanueldavid 1:068cd7adbe4d 206 OLED.printf("Valeur REC=%d", can.rderror());
emmanueldavid 1:068cd7adbe4d 207 OLED.locate (7,0);
emmanueldavid 1:068cd7adbe4d 208 OLED.printf("Valeur TEC=%d", can.tderror());
emmanueldavid 1:068cd7adbe4d 209 OLED.redraw();
emmanueldavid 1:068cd7adbe4d 210 wait(0.2);
emmanueldavid 1:068cd7adbe4d 211 }
emmanueldavid 1:068cd7adbe4d 212 }
emmanueldavid 1:068cd7adbe4d 213
emmanueldavid 1:068cd7adbe4d 214
emmanueldavid 1:068cd7adbe4d 215 /* Envoi d'une trame de requete */
emmanueldavid 1:068cd7adbe4d 216 /*
emmanueldavid 1:068cd7adbe4d 217 void AppuiSW2() {
emmanueldavid 1:068cd7adbe4d 218 if (can.write(CANMessage(1620, CANStandard ))) {
emmanueldavid 1:068cd7adbe4d 219 ledD7 = !ledD7;
emmanueldavid 1:068cd7adbe4d 220 }
emmanueldavid 1:068cd7adbe4d 221 }
emmanueldavid 1:068cd7adbe4d 222 */
emmanueldavid 1:068cd7adbe4d 223 /* Reset controleur après court-circuit */
emmanueldavid 1:068cd7adbe4d 224 /*
emmanueldavid 1:068cd7adbe4d 225 void AppuiSW3() {
emmanueldavid 1:068cd7adbe4d 226 if (can.write(CANMessage(2021, Reset, 6 , CANData, CANStandard))) // Rmq : tableau = pointeur
emmanueldavid 1:068cd7adbe4d 227 ledD8 = !ledD8;
emmanueldavid 1:068cd7adbe4d 228 else
emmanueldavid 1:068cd7adbe4d 229 can.reset();
emmanueldavid 1:068cd7adbe4d 230 }
emmanueldavid 1:068cd7adbe4d 231 */
emmanueldavid 0:793b62d1f1ec 232 /* Reset controleur après court-circuit */
emmanueldavid 0:793b62d1f1ec 233 /*
emmanueldavid 0:793b62d1f1ec 234 void AppuiSW3() {
emmanueldavid 0:793b62d1f1ec 235 can.reset();
emmanueldavid 0:793b62d1f1ec 236 OLED.cls();
emmanueldavid 0:793b62d1f1ec 237 OLED.locate (0,0); // set text cursor to line 3, column 1
emmanueldavid 0:793b62d1f1ec 238 OLED.printf ("GEII - Bus CAN"); // print to frame buffer
emmanueldavid 0:793b62d1f1ec 239 OLED.locate (2,0); // set text cursor to line 3, column 1
emmanueldavid 0:793b62d1f1ec 240 OLED.printf ("SW1"); // print to frame buffer
emmanueldavid 0:793b62d1f1ec 241 OLED.locate (3,0); // set text cursor to line 3, column 1
emmanueldavid 0:793b62d1f1ec 242 OLED.printf ("Envoi trame"); // print to frame buffer
emmanueldavid 0:793b62d1f1ec 243 OLED.redraw();
emmanueldavid 0:793b62d1f1ec 244 }
emmanueldavid 0:793b62d1f1ec 245 */
emmanueldavid 0:793b62d1f1ec 246 /*
emmanueldavid 0:793b62d1f1ec 247 char *conversionIntChaine(int longueurChaine, int Valeur_int, char *ChaineAffichage)
emmanueldavid 0:793b62d1f1ec 248 {
emmanueldavid 0:793b62d1f1ec 249 while (longueurChaine >= 0)
emmanueldavid 0:793b62d1f1ec 250 {
emmanueldavid 0:793b62d1f1ec 251 ChaineAffichage[longueurChaine] = (Valeur_int % 10) + 48;
emmanueldavid 0:793b62d1f1ec 252 Valeur_int /= 10;
emmanueldavid 0:793b62d1f1ec 253 longueurChaine--;
emmanueldavid 0:793b62d1f1ec 254 }
emmanueldavid 0:793b62d1f1ec 255 return (ChaineAffichage);
emmanueldavid 0:793b62d1f1ec 256 }
emmanueldavid 0:793b62d1f1ec 257 */
emmanueldavid 1:068cd7adbe4d 258
emmanueldavid 0:793b62d1f1ec 259 /*
emmanueldavid 0:793b62d1f1ec 260 OLED.locate (0,0); // set text cursor to line 3, column 1
emmanueldavid 0:793b62d1f1ec 261 OLED.printf ("GEII - Bus CAN"); // print to frame buffer
emmanueldavid 0:793b62d1f1ec 262 OLED.locate (2,0); // set text cursor to line 3, column 1
emmanueldavid 0:793b62d1f1ec 263 OLED.printf ("SW1"); // print to frame buffer
emmanueldavid 0:793b62d1f1ec 264 OLED.locate (3,0); // set text cursor to line 3, column 1
emmanueldavid 0:793b62d1f1ec 265 OLED.printf ("Envoi trame"); // print to frame buffer
emmanueldavid 0:793b62d1f1ec 266 OLED.redraw();
emmanueldavid 0:793b62d1f1ec 267 */
emmanueldavid 0:793b62d1f1ec 268
emmanueldavid 0:793b62d1f1ec 269 /*
emmanueldavid 0:793b62d1f1ec 270 char *
emmanueldavid 0:793b62d1f1ec 271 itoa (int n)
emmanueldavid 0:793b62d1f1ec 272 {
emmanueldavid 0:793b62d1f1ec 273
emmanueldavid 0:793b62d1f1ec 274 char *a = malloc (long_int (n) + 1);
emmanueldavid 0:793b62d1f1ec 275 int i;
emmanueldavid 0:793b62d1f1ec 276 for (i = 0; n > 0; i++)
emmanueldavid 0:793b62d1f1ec 277 {
emmanueldavid 0:793b62d1f1ec 278 a[i] = n % 10 + 48;
emmanueldavid 0:793b62d1f1ec 279 n = n / 10;
emmanueldavid 0:793b62d1f1ec 280 }
emmanueldavid 0:793b62d1f1ec 281 a[i + 1] = '\0';
emmanueldavid 0:793b62d1f1ec 282 return retourne (a);
emmanueldavid 0:793b62d1f1ec 283 }
emmanueldavid 0:793b62d1f1ec 284
emmanueldavid 0:793b62d1f1ec 285 char *create_str(int len, int n, int neg, char *str)
emmanueldavid 0:793b62d1f1ec 286 {
emmanueldavid 0:793b62d1f1ec 287 while (len >= 0)
emmanueldavid 0:793b62d1f1ec 288 {
emmanueldavid 0:793b62d1f1ec 289 str[len] = (n % 10) + 48;
emmanueldavid 0:793b62d1f1ec 290 n /= 10;
emmanueldavid 0:793b62d1f1ec 291 len--;
emmanueldavid 0:793b62d1f1ec 292 }
emmanueldavid 0:793b62d1f1ec 293 if (neg < 0)
emmanueldavid 0:793b62d1f1ec 294 str[0] = '-';
emmanueldavid 0:793b62d1f1ec 295 return (str);
emmanueldavid 0:793b62d1f1ec 296 }
emmanueldavid 0:793b62d1f1ec 297 */