ok

Dependencies:   mbed ssd1306_library

Committer:
emmanueldavid
Date:
Mon Mar 28 06:25:02 2022 +0000
Revision:
6:d4fcbe0b2050
ok

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emmanueldavid 6:d4fcbe0b2050 1 /*
emmanueldavid 6:d4fcbe0b2050 2 * Programme principal TP2 - Bus CAN
emmanueldavid 6:d4fcbe0b2050 3 */
emmanueldavid 6:d4fcbe0b2050 4
emmanueldavid 6:d4fcbe0b2050 5 #if !DEVICE_CAN
emmanueldavid 6:d4fcbe0b2050 6 #error [NOT_SUPPORTED] CAN not supported for this target
emmanueldavid 6:d4fcbe0b2050 7 #endif
emmanueldavid 6:d4fcbe0b2050 8
emmanueldavid 6:d4fcbe0b2050 9 #include "mbed.h"
emmanueldavid 6:d4fcbe0b2050 10 #include "ssd1306.h"
emmanueldavid 6:d4fcbe0b2050 11
emmanueldavid 6:d4fcbe0b2050 12 SSD1306 OLED (I2C_SDA, I2C_SCL, 0x78); // assumes default I2C address of 0x78
emmanueldavid 6:d4fcbe0b2050 13
emmanueldavid 6:d4fcbe0b2050 14 DigitalOut ledD9(PA_4);
emmanueldavid 6:d4fcbe0b2050 15 DigitalOut ledD8(PA_5); // Attention, désouder SB16&SB18 si utilisation I2c
emmanueldavid 6:d4fcbe0b2050 16 DigitalOut ledD7(PA_6);
emmanueldavid 6:d4fcbe0b2050 17 DigitalOut ledD6(PA_7);
emmanueldavid 6:d4fcbe0b2050 18
emmanueldavid 6:d4fcbe0b2050 19 DigitalIn SW4_1(PA_1);
emmanueldavid 6:d4fcbe0b2050 20 DigitalIn SW4_0(PA_3);
emmanueldavid 6:d4fcbe0b2050 21 DigitalIn SW1(PB_4, PullUp);
emmanueldavid 6:d4fcbe0b2050 22 DigitalIn SW2(PB_5, PullUp);
emmanueldavid 6:d4fcbe0b2050 23
emmanueldavid 6:d4fcbe0b2050 24 InterruptIn SW3(PA_8, PullUp);
emmanueldavid 6:d4fcbe0b2050 25
emmanueldavid 6:d4fcbe0b2050 26 AnalogIn adc_RV1(PA_0);
emmanueldavid 6:d4fcbe0b2050 27
emmanueldavid 6:d4fcbe0b2050 28 CAN can(PA_11, PA_12);
emmanueldavid 6:d4fcbe0b2050 29 Serial pc(USBTX, USBRX);
emmanueldavid 6:d4fcbe0b2050 30
emmanueldavid 6:d4fcbe0b2050 31 int value_SW4; // valeur 0,1,2,3
emmanueldavid 6:d4fcbe0b2050 32
emmanueldavid 6:d4fcbe0b2050 33 char Reset[6] = "Reset";
emmanueldavid 6:d4fcbe0b2050 34 char Donnees[12]="";
emmanueldavid 6:d4fcbe0b2050 35 char Data[5] = "GEII";
emmanueldavid 6:d4fcbe0b2050 36 char DataArbitrage[5] = "K1bb";
emmanueldavid 6:d4fcbe0b2050 37 int Nb_messT = 0;
emmanueldavid 6:d4fcbe0b2050 38 int Nb_messR = 0;
emmanueldavid 6:d4fcbe0b2050 39
emmanueldavid 6:d4fcbe0b2050 40
emmanueldavid 6:d4fcbe0b2050 41 int detectionFrontSW1(void) {
emmanueldavid 6:d4fcbe0b2050 42 int frontDescendant = 0;
emmanueldavid 6:d4fcbe0b2050 43 static int etatPrecedent1=1;
emmanueldavid 6:d4fcbe0b2050 44 int bp1 = SW1.read();
emmanueldavid 6:d4fcbe0b2050 45 if(bp1!=etatPrecedent1 && !bp1)
emmanueldavid 6:d4fcbe0b2050 46 frontDescendant = 1;
emmanueldavid 6:d4fcbe0b2050 47 etatPrecedent1= bp1;
emmanueldavid 6:d4fcbe0b2050 48 return frontDescendant;
emmanueldavid 6:d4fcbe0b2050 49 }
emmanueldavid 6:d4fcbe0b2050 50
emmanueldavid 6:d4fcbe0b2050 51 int detectionFrontSW2(void) {
emmanueldavid 6:d4fcbe0b2050 52 int frontDescendant = 0;
emmanueldavid 6:d4fcbe0b2050 53 static int etatPrecedent2=1;
emmanueldavid 6:d4fcbe0b2050 54 int bp2 = SW2.read();
emmanueldavid 6:d4fcbe0b2050 55 if(bp2!=etatPrecedent2 && !bp2)
emmanueldavid 6:d4fcbe0b2050 56 frontDescendant = 1;
emmanueldavid 6:d4fcbe0b2050 57 etatPrecedent2= bp2;
emmanueldavid 6:d4fcbe0b2050 58 return frontDescendant;
emmanueldavid 6:d4fcbe0b2050 59 }
emmanueldavid 6:d4fcbe0b2050 60
emmanueldavid 6:d4fcbe0b2050 61 /* Test Arbitrage */
emmanueldavid 6:d4fcbe0b2050 62 void AppuiSW3() {
emmanueldavid 6:d4fcbe0b2050 63 // if (value_SW4 == 3) {
emmanueldavid 6:d4fcbe0b2050 64 if (can.write(CANMessage(60, DataArbitrage, 5 , CANData, CANStandard))) { // Rmq : tableau = pointeur
emmanueldavid 6:d4fcbe0b2050 65 ledD8 = !ledD8;
emmanueldavid 6:d4fcbe0b2050 66 Nb_messT++;
emmanueldavid 6:d4fcbe0b2050 67 }
emmanueldavid 6:d4fcbe0b2050 68 // }
emmanueldavid 6:d4fcbe0b2050 69 }
emmanueldavid 6:d4fcbe0b2050 70
emmanueldavid 6:d4fcbe0b2050 71
emmanueldavid 6:d4fcbe0b2050 72 int LectureSW4(){
emmanueldavid 6:d4fcbe0b2050 73 int ETAT;
emmanueldavid 6:d4fcbe0b2050 74 int value_SW4_0 = SW4_0.read();
emmanueldavid 6:d4fcbe0b2050 75 int value_SW4_1 = SW4_1.read();
emmanueldavid 6:d4fcbe0b2050 76
emmanueldavid 6:d4fcbe0b2050 77 if (value_SW4_1 == 1) {
emmanueldavid 6:d4fcbe0b2050 78 if (value_SW4_0 == 1)
emmanueldavid 6:d4fcbe0b2050 79 ETAT = 3;
emmanueldavid 6:d4fcbe0b2050 80 else
emmanueldavid 6:d4fcbe0b2050 81 ETAT = 2;
emmanueldavid 6:d4fcbe0b2050 82 }
emmanueldavid 6:d4fcbe0b2050 83 else {
emmanueldavid 6:d4fcbe0b2050 84 if (value_SW4_0 == 1)
emmanueldavid 6:d4fcbe0b2050 85 ETAT = 1;
emmanueldavid 6:d4fcbe0b2050 86 else
emmanueldavid 6:d4fcbe0b2050 87 ETAT = 0;
emmanueldavid 6:d4fcbe0b2050 88 }
emmanueldavid 6:d4fcbe0b2050 89 return ETAT;
emmanueldavid 6:d4fcbe0b2050 90 }
emmanueldavid 6:d4fcbe0b2050 91
emmanueldavid 6:d4fcbe0b2050 92 int main() {
emmanueldavid 6:d4fcbe0b2050 93
emmanueldavid 6:d4fcbe0b2050 94 //uint8_t receivedMessage[8];
emmanueldavid 6:d4fcbe0b2050 95
emmanueldavid 6:d4fcbe0b2050 96 pc.baud(115200);
emmanueldavid 6:d4fcbe0b2050 97 pc.printf("Affichage serie Carte 1 \n");
emmanueldavid 6:d4fcbe0b2050 98
emmanueldavid 6:d4fcbe0b2050 99 can.frequency(500000);
emmanueldavid 6:d4fcbe0b2050 100
emmanueldavid 6:d4fcbe0b2050 101 CANMessage msg;
emmanueldavid 6:d4fcbe0b2050 102 //unsigned char REC, TEC ;
emmanueldavid 6:d4fcbe0b2050 103
emmanueldavid 6:d4fcbe0b2050 104 ledD6 = 1; ledD7 = 1; ledD8 = 1; ledD9 = 1;
emmanueldavid 6:d4fcbe0b2050 105
emmanueldavid 6:d4fcbe0b2050 106 OLED.speed (SSD1306::Medium); // set working frequency
emmanueldavid 6:d4fcbe0b2050 107 OLED.init(); // initialize SSD1306
emmanueldavid 6:d4fcbe0b2050 108 OLED.cls(); // clear frame buffer
emmanueldavid 6:d4fcbe0b2050 109
emmanueldavid 6:d4fcbe0b2050 110 SW3.fall(&AppuiSW3); // SW3 sous it
emmanueldavid 6:d4fcbe0b2050 111
emmanueldavid 6:d4fcbe0b2050 112
emmanueldavid 6:d4fcbe0b2050 113 OLED.locate (0,0);
emmanueldavid 6:d4fcbe0b2050 114 OLED.printf ("NbRx = 0");
emmanueldavid 6:d4fcbe0b2050 115 OLED.locate (1,0);
emmanueldavid 6:d4fcbe0b2050 116 OLED.printf ("NbTx = 0");
emmanueldavid 6:d4fcbe0b2050 117
emmanueldavid 6:d4fcbe0b2050 118 while(1)
emmanueldavid 6:d4fcbe0b2050 119 {
emmanueldavid 6:d4fcbe0b2050 120 value_SW4 = LectureSW4();
emmanueldavid 6:d4fcbe0b2050 121
emmanueldavid 6:d4fcbe0b2050 122 if (detectionFrontSW1())
emmanueldavid 6:d4fcbe0b2050 123 {
emmanueldavid 6:d4fcbe0b2050 124 if (value_SW4 == 0) {
emmanueldavid 6:d4fcbe0b2050 125 if (can.write(CANMessage(1975, Data, 5 , CANData, CANStandard))) { // Rmq : tableau = pointeur
emmanueldavid 6:d4fcbe0b2050 126 ledD6 = !ledD6;
emmanueldavid 6:d4fcbe0b2050 127 Nb_messT++;
emmanueldavid 6:d4fcbe0b2050 128 }
emmanueldavid 6:d4fcbe0b2050 129 }
emmanueldavid 6:d4fcbe0b2050 130 }
emmanueldavid 6:d4fcbe0b2050 131 if (detectionFrontSW2())
emmanueldavid 6:d4fcbe0b2050 132 {
emmanueldavid 6:d4fcbe0b2050 133 if (value_SW4 == 0) {
emmanueldavid 6:d4fcbe0b2050 134 if (can.write(CANMessage(1975, CANStandard))) { // Remote frame
emmanueldavid 6:d4fcbe0b2050 135 ledD7 = !ledD7;
emmanueldavid 6:d4fcbe0b2050 136 Nb_messT++;
emmanueldavid 6:d4fcbe0b2050 137 }
emmanueldavid 6:d4fcbe0b2050 138 }
emmanueldavid 6:d4fcbe0b2050 139 }
emmanueldavid 6:d4fcbe0b2050 140
emmanueldavid 6:d4fcbe0b2050 141 if (can.read(msg)) {
emmanueldavid 6:d4fcbe0b2050 142 Nb_messR++;
emmanueldavid 6:d4fcbe0b2050 143 ledD9 = !ledD9;
emmanueldavid 6:d4fcbe0b2050 144 for (int i =0; i < msg.len; i++)
emmanueldavid 6:d4fcbe0b2050 145 Donnees[i] = msg.data[i];
emmanueldavid 6:d4fcbe0b2050 146 pc.printf("ID = 0x%.3x\r\n", msg.id); //ID sous forme 0x suivi de l'id
emmanueldavid 6:d4fcbe0b2050 147 pc.printf("Length = %d\r\n", msg.len);
emmanueldavid 6:d4fcbe0b2050 148 pc.printf("Boucle envoi CAN rderrors : %d, CAN tderrors : %d\n", can.rderror(), can.tderror());
emmanueldavid 6:d4fcbe0b2050 149 //REC = can.rderror();
emmanueldavid 6:d4fcbe0b2050 150 }
emmanueldavid 6:d4fcbe0b2050 151
emmanueldavid 6:d4fcbe0b2050 152 OLED.locate (0,0);
emmanueldavid 6:d4fcbe0b2050 153 OLED.printf ("NbRx = %d", Nb_messR);
emmanueldavid 6:d4fcbe0b2050 154 OLED.locate (1,0);
emmanueldavid 6:d4fcbe0b2050 155 OLED.printf ("NbTx = %d", Nb_messT);
emmanueldavid 6:d4fcbe0b2050 156 OLED.locate (3,0);
emmanueldavid 6:d4fcbe0b2050 157 OLED.printf ("Message recu ");
emmanueldavid 6:d4fcbe0b2050 158 OLED.locate (4,0);
emmanueldavid 6:d4fcbe0b2050 159 OLED.printf ("=> ");
emmanueldavid 6:d4fcbe0b2050 160 OLED.puts(Donnees);
emmanueldavid 6:d4fcbe0b2050 161 OLED.locate (6,0);
emmanueldavid 6:d4fcbe0b2050 162 OLED.printf("Valeur REC=%u", can.rderror());
emmanueldavid 6:d4fcbe0b2050 163 OLED.locate (7,0);
emmanueldavid 6:d4fcbe0b2050 164 OLED.printf("Valeur TEC=%u", can.tderror());
emmanueldavid 6:d4fcbe0b2050 165 OLED.redraw();
emmanueldavid 6:d4fcbe0b2050 166 wait(0.2);
emmanueldavid 6:d4fcbe0b2050 167 }
emmanueldavid 6:d4fcbe0b2050 168 }