Générateur 4 trames commande par potentiometre

Dependencies:   C12832 mbed

Fork of testCAN2 by RaC2018

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?

UserRevisionLine numberNew 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