ok
Dependencies: mbed ssd1306_library
main_TP2.cpp@6:d4fcbe0b2050, 2022-03-28 (annotated)
- Committer:
- emmanueldavid
- Date:
- Mon Mar 28 06:25:02 2022 +0000
- Revision:
- 6:d4fcbe0b2050
ok
Who changed what in which revision?
User | Revision | Line number | New 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 | } |