Bus Can

Dependencies:   mbed ssd1306_library

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?

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 "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 */