Générateur 4 trames commande par potentiometre
Fork of testCAN2 by
main.cpp@2:5429aa947ac8, 2018-02-10 (annotated)
- Committer:
- LouisReynier
- Date:
- Sat Feb 10 19:09:09 2018 +0000
- Revision:
- 2:5429aa947ac8
- Parent:
- 1:ce70f7ab3817
G?nerateur 4 trames CAN commande par potentiometre
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
LouisReynier | 0:1ab5fdb4fa56 | 1 | #include "mbed.h" |
LouisReynier | 2:5429aa947ac8 | 2 | #include "C12832.h" |
LouisReynier | 2:5429aa947ac8 | 3 | // LR 10/02/18 |
LouisReynier | 0:1ab5fdb4fa56 | 4 | // |
LouisReynier | 2:5429aa947ac8 | 5 | // bus CAN generateur de trames |
LouisReynier | 0:1ab5fdb4fa56 | 6 | // |
LouisReynier | 2:5429aa947ac8 | 7 | // Emission d'une trame parmi 4 selection à l'aide du pot1 |
LouisReynier | 2:5429aa947ac8 | 8 | // eviter les positions intermédaires du pot1 ! |
LouisReynier | 2:5429aa947ac8 | 9 | // !! emission sur CAN2 p30Rx p29Tx |
LouisReynier | 2:5429aa947ac8 | 10 | // Attention si pas d'ACK faire reset après chaque changement |
LouisReynier | 2:5429aa947ac8 | 11 | // J'ai constaté des comportements bizarre dans cette situation |
LouisReynier | 2:5429aa947ac8 | 12 | // Des infos sur la liaison série |
LouisReynier | 2:5429aa947ac8 | 13 | // La trame est envoyée aussi sur LCD |
LouisReynier | 2:5429aa947ac8 | 14 | // |
LouisReynier | 2:5429aa947ac8 | 15 | // testé à l'analyseur logique = OK !! |
LouisReynier | 0:1ab5fdb4fa56 | 16 | // |
LouisReynier | 2:5429aa947ac8 | 17 | // |
LouisReynier | 0:1ab5fdb4fa56 | 18 | |
LouisReynier | 2:5429aa947ac8 | 19 | |
LouisReynier | 0:1ab5fdb4fa56 | 20 | DigitalOut led1(LED1); |
LouisReynier | 0:1ab5fdb4fa56 | 21 | DigitalOut led2(LED2); |
LouisReynier | 0:1ab5fdb4fa56 | 22 | CAN can1(p9, p10,1000000);// on definit pin et debit |
LouisReynier | 0:1ab5fdb4fa56 | 23 | CAN can2(p30, p29, 1000000); |
LouisReynier | 2:5429aa947ac8 | 24 | Serial pc(USBTX, USBRX); |
LouisReynier | 2:5429aa947ac8 | 25 | AnalogIn pot_1(p19); // potard pour selection |
LouisReynier | 2:5429aa947ac8 | 26 | C12832 lcd(p5, p7, p6, p8, p11); // lcd |
LouisReynier | 2:5429aa947ac8 | 27 | |
LouisReynier | 2:5429aa947ac8 | 28 | |
LouisReynier | 2:5429aa947ac8 | 29 | void send(int id, char octet_emis[], char RouD, char longueur ) |
LouisReynier | 2:5429aa947ac8 | 30 | { |
LouisReynier | 2:5429aa947ac8 | 31 | int emis_ok = 0 ; |
LouisReynier | 2:5429aa947ac8 | 32 | CANMessage msg; |
LouisReynier | 2:5429aa947ac8 | 33 | if (RouD == 'D') |
LouisReynier | 2:5429aa947ac8 | 34 | { emis_ok = can2.write(CANMessage(id, octet_emis, longueur, CANData, CANStandard )) ; |
LouisReynier | 2:5429aa947ac8 | 35 | pc.printf("id: %x, %c L = %d, \nData : %x:%x:%x:%x ... \n", id,RouD,longueur,octet_emis[0],octet_emis[1], octet_emis[2], octet_emis[3] ); |
LouisReynier | 2:5429aa947ac8 | 36 | }// c'ets la valeur retournée par la fonction write |
LouisReynier | 2:5429aa947ac8 | 37 | else |
LouisReynier | 2:5429aa947ac8 | 38 | { emis_ok = can2.write(CANMessage(id, octet_emis, longueur, CANRemote, CANStandard )); |
LouisReynier | 2:5429aa947ac8 | 39 | pc.printf("id: %x, %c L = %d, \nData : %x:%x:%x:%x ... \n", id,RouD,longueur,octet_emis[0],octet_emis[1], octet_emis[2], octet_emis[3] ); |
LouisReynier | 2:5429aa947ac8 | 40 | } |
LouisReynier | 2:5429aa947ac8 | 41 | lcd.locate(0,10); |
LouisReynier | 2:5429aa947ac8 | 42 | lcd.printf("id: %x, %c L = %d, \nData : %x:%x:%x:%x ... \n", id,RouD,longueur,octet_emis[0],octet_emis[1], octet_emis[2], octet_emis[3] ); |
LouisReynier | 2:5429aa947ac8 | 43 | if(emis_ok) { |
LouisReynier | 1:ce70f7ab3817 | 44 | // ici octet emis n'a pas de sens car trame remote ! |
LouisReynier | 2:5429aa947ac8 | 45 | pc.printf("j'emets bien !!! \n"); |
LouisReynier | 0:1ab5fdb4fa56 | 46 | } |
LouisReynier | 0:1ab5fdb4fa56 | 47 | led1 = !led1; |
LouisReynier | 0:1ab5fdb4fa56 | 48 | } |
LouisReynier | 2:5429aa947ac8 | 49 | |
LouisReynier | 2:5429aa947ac8 | 50 | |
LouisReynier | 2:5429aa947ac8 | 51 | |
LouisReynier | 0:1ab5fdb4fa56 | 52 | |
LouisReynier | 0:1ab5fdb4fa56 | 53 | int main() { |
LouisReynier | 2:5429aa947ac8 | 54 | int choix = 0 ; |
LouisReynier | 2:5429aa947ac8 | 55 | int i = 0 ; |
LouisReynier | 0:1ab5fdb4fa56 | 56 | |
LouisReynier | 2:5429aa947ac8 | 57 | char octet_send[9] = "DDDDDDDD"; // valeurs par defaut D=44 |
LouisReynier | 2:5429aa947ac8 | 58 | int identif = 0x123 ; // par défaut |
LouisReynier | 2:5429aa947ac8 | 59 | char RemoteData = 'D' ; |
LouisReynier | 2:5429aa947ac8 | 60 | char length = 2 ; |
LouisReynier | 2:5429aa947ac8 | 61 | |
LouisReynier | 2:5429aa947ac8 | 62 | |
LouisReynier | 0:1ab5fdb4fa56 | 63 | printf("main()\n"); |
LouisReynier | 2:5429aa947ac8 | 64 | lcd.cls(); |
LouisReynier | 2:5429aa947ac8 | 65 | |
LouisReynier | 2:5429aa947ac8 | 66 | |
LouisReynier | 0:1ab5fdb4fa56 | 67 | while(1) { |
LouisReynier | 2:5429aa947ac8 | 68 | choix= 5*pot_1.read(); |
LouisReynier | 2:5429aa947ac8 | 69 | lcd.locate(0,0); |
LouisReynier | 2:5429aa947ac8 | 70 | lcd. printf("Trame %d \n", choix); |
LouisReynier | 2:5429aa947ac8 | 71 | switch (choix) |
LouisReynier | 2:5429aa947ac8 | 72 | { // debut sw |
LouisReynier | 2:5429aa947ac8 | 73 | case (0): // Trame qui passe le noeud 15 en Operationnal state |
LouisReynier | 2:5429aa947ac8 | 74 | { identif = 0x00 ; |
LouisReynier | 2:5429aa947ac8 | 75 | octet_send[0] = 0x01 ; |
LouisReynier | 2:5429aa947ac8 | 76 | octet_send[1] = 0x15 ; |
LouisReynier | 2:5429aa947ac8 | 77 | RemoteData = 'D'; |
LouisReynier | 2:5429aa947ac8 | 78 | length = 2 ; |
LouisReynier | 2:5429aa947ac8 | 79 | break ; |
LouisReynier | 2:5429aa947ac8 | 80 | } // fin case 0 |
LouisReynier | 2:5429aa947ac8 | 81 | case (1): // Trame qui passe le noeud 20 en Operationnal state |
LouisReynier | 2:5429aa947ac8 | 82 | { identif = 0x00 ; |
LouisReynier | 2:5429aa947ac8 | 83 | octet_send[0] = 0x01 ; |
LouisReynier | 2:5429aa947ac8 | 84 | octet_send[1] = 0x20 ; |
LouisReynier | 2:5429aa947ac8 | 85 | RemoteData = 'D'; |
LouisReynier | 2:5429aa947ac8 | 86 | length = 2 ; |
LouisReynier | 2:5429aa947ac8 | 87 | break ; |
LouisReynier | 2:5429aa947ac8 | 88 | } // fin case 1 |
LouisReynier | 2:5429aa947ac8 | 89 | case (2): // trame qui ping le noeud 15 |
LouisReynier | 2:5429aa947ac8 | 90 | { identif = 0x715 ; |
LouisReynier | 2:5429aa947ac8 | 91 | for(i=0;i<9;i++) |
LouisReynier | 2:5429aa947ac8 | 92 | { octet_send[i]='D';} // 44 en hexa par defaut |
LouisReynier | 2:5429aa947ac8 | 93 | RemoteData = 'R'; |
LouisReynier | 2:5429aa947ac8 | 94 | length = 0 ; |
LouisReynier | 2:5429aa947ac8 | 95 | break ; |
LouisReynier | 2:5429aa947ac8 | 96 | } // fin case 2 |
LouisReynier | 2:5429aa947ac8 | 97 | case (3): // trame qui ping le noeud 20 |
LouisReynier | 2:5429aa947ac8 | 98 | { identif = 0x720 ; |
LouisReynier | 2:5429aa947ac8 | 99 | for(i=0;i<9;i++) |
LouisReynier | 2:5429aa947ac8 | 100 | { octet_send[i]='D';} // 44 en hexa par defaut |
LouisReynier | 2:5429aa947ac8 | 101 | RemoteData = 'R'; |
LouisReynier | 2:5429aa947ac8 | 102 | length = 0 ; |
LouisReynier | 2:5429aa947ac8 | 103 | break ; |
LouisReynier | 2:5429aa947ac8 | 104 | } // fin case 3 |
LouisReynier | 2:5429aa947ac8 | 105 | |
LouisReynier | 2:5429aa947ac8 | 106 | default : // 4 ou 5 |
LouisReynier | 2:5429aa947ac8 | 107 | { identif = 0x123 ; |
LouisReynier | 2:5429aa947ac8 | 108 | for(i=0;i<9;i++) |
LouisReynier | 2:5429aa947ac8 | 109 | { octet_send[i]='D';} // 44 en hexa par defaut |
LouisReynier | 2:5429aa947ac8 | 110 | RemoteData = 'D'; |
LouisReynier | 2:5429aa947ac8 | 111 | length = 8 ; |
LouisReynier | 2:5429aa947ac8 | 112 | break ; |
LouisReynier | 2:5429aa947ac8 | 113 | } // fin default |
LouisReynier | 2:5429aa947ac8 | 114 | |
LouisReynier | 2:5429aa947ac8 | 115 | } // fin switch |
LouisReynier | 2:5429aa947ac8 | 116 | |
LouisReynier | 2:5429aa947ac8 | 117 | send(identif, octet_send, RemoteData, length ); |
LouisReynier | 2:5429aa947ac8 | 118 | wait(1); |
LouisReynier | 2:5429aa947ac8 | 119 | }// fin while(1) |
LouisReynier | 2:5429aa947ac8 | 120 | |
LouisReynier | 2:5429aa947ac8 | 121 | } // fin main |
LouisReynier | 2:5429aa947ac8 | 122 | |
LouisReynier | 2:5429aa947ac8 | 123 | /* |
LouisReynier | 2:5429aa947ac8 | 124 | |
LouisReynier | 0:1ab5fdb4fa56 | 125 | printf("loop()\n"); |
LouisReynier | 0:1ab5fdb4fa56 | 126 | if(can2.read(msg)) { |
LouisReynier | 0:1ab5fdb4fa56 | 127 | printf("Message received: %d\n", msg.data[0]); |
LouisReynier | 0:1ab5fdb4fa56 | 128 | led2 = !led2; |
LouisReynier | 0:1ab5fdb4fa56 | 129 | } |
LouisReynier | 0:1ab5fdb4fa56 | 130 | wait(0.2); |
LouisReynier | 0:1ab5fdb4fa56 | 131 | } |
LouisReynier | 2:5429aa947ac8 | 132 | } */ |
LouisReynier | 2:5429aa947ac8 | 133 |