Permet de créer, envoyer, filtrer et decrypter la trame meteo.

Dependencies:   mbed meteoCAN

Committer:
Station_Meteo_Laos
Date:
Mon Jun 17 10:27:49 2019 +0000
Revision:
0:ddcef4072662
Child:
1:265dc028a37d
fonctionne

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Station_Meteo_Laos 0:ddcef4072662 1 #include "mbed.h"
Station_Meteo_Laos 0:ddcef4072662 2
Station_Meteo_Laos 0:ddcef4072662 3
Station_Meteo_Laos 0:ddcef4072662 4 #define can_len 8
Station_Meteo_Laos 0:ddcef4072662 5
Station_Meteo_Laos 0:ddcef4072662 6 Serial pc(USBTX, USBRX, 115200); // tx, rx for Tera Term output
Station_Meteo_Laos 0:ddcef4072662 7
Station_Meteo_Laos 0:ddcef4072662 8 DigitalOut myled(LED1); // LED1 displays messsage sent Status
Station_Meteo_Laos 0:ddcef4072662 9 CAN can1(PA_11, PA_12); // CAN interface
Station_Meteo_Laos 0:ddcef4072662 10 CANMessage msg; // create empty CAN message
Station_Meteo_Laos 0:ddcef4072662 11
Station_Meteo_Laos 0:ddcef4072662 12
Station_Meteo_Laos 0:ddcef4072662 13 int main() {
Station_Meteo_Laos 0:ddcef4072662 14
Station_Meteo_Laos 0:ddcef4072662 15 uint16_t id_can, len_can=0, i, octet;
Station_Meteo_Laos 0:ddcef4072662 16 char trame[8];
Station_Meteo_Laos 0:ddcef4072662 17 uint8_t ok=0;
Station_Meteo_Laos 0:ddcef4072662 18
Station_Meteo_Laos 0:ddcef4072662 19 do{
Station_Meteo_Laos 0:ddcef4072662 20 pc.printf("\nTaper 1 pour envoyer un message CAN custom ou 0 pour afficher le contenu des trames CAN sur le bus : ");
Station_Meteo_Laos 0:ddcef4072662 21 scanf("%u",&ok);
Station_Meteo_Laos 0:ddcef4072662 22 pc.printf("%u", ok);
Station_Meteo_Laos 0:ddcef4072662 23 }while(ok>1);
Station_Meteo_Laos 0:ddcef4072662 24
Station_Meteo_Laos 0:ddcef4072662 25 pc.printf("\n");
Station_Meteo_Laos 0:ddcef4072662 26
Station_Meteo_Laos 0:ddcef4072662 27 if(ok == 1){
Station_Meteo_Laos 0:ddcef4072662 28
Station_Meteo_Laos 0:ddcef4072662 29 pc.printf("Entrez l'ID CAN de votre trame : ");
Station_Meteo_Laos 0:ddcef4072662 30 pc.printf(">");
Station_Meteo_Laos 0:ddcef4072662 31 scanf("%hu",&id_can);
Station_Meteo_Laos 0:ddcef4072662 32 pc.printf("%hu", id_can);
Station_Meteo_Laos 0:ddcef4072662 33 pc.printf("\n");
Station_Meteo_Laos 0:ddcef4072662 34
Station_Meteo_Laos 0:ddcef4072662 35 pc.printf("Entrez le nombre d'octet de donnees de votre trame (de 0 a 8) : ");
Station_Meteo_Laos 0:ddcef4072662 36 do{
Station_Meteo_Laos 0:ddcef4072662 37 pc.printf(">");
Station_Meteo_Laos 0:ddcef4072662 38 scanf("%hu",&len_can);
Station_Meteo_Laos 0:ddcef4072662 39 }while(8<len_can);
Station_Meteo_Laos 0:ddcef4072662 40 pc.printf("%hu", len_can);
Station_Meteo_Laos 0:ddcef4072662 41 pc.printf("\n");
Station_Meteo_Laos 0:ddcef4072662 42
Station_Meteo_Laos 0:ddcef4072662 43 if(len_can != 0){
Station_Meteo_Laos 0:ddcef4072662 44 pc.printf("Entrez successivement chaque octet de donnee (de 0 a 255) :\n");
Station_Meteo_Laos 0:ddcef4072662 45 for(i=0;i<len_can;i++){
Station_Meteo_Laos 0:ddcef4072662 46 pc.printf(" -> Octet[%hu] : ",i);
Station_Meteo_Laos 0:ddcef4072662 47 do{
Station_Meteo_Laos 0:ddcef4072662 48 pc.printf(">");
Station_Meteo_Laos 0:ddcef4072662 49 scanf("%hu",&octet);
Station_Meteo_Laos 0:ddcef4072662 50 }while(255<octet);
Station_Meteo_Laos 0:ddcef4072662 51 trame[i] = octet;
Station_Meteo_Laos 0:ddcef4072662 52 pc.printf("%hu", trame[i]);
Station_Meteo_Laos 0:ddcef4072662 53 pc.printf("\n");
Station_Meteo_Laos 0:ddcef4072662 54 }
Station_Meteo_Laos 0:ddcef4072662 55 pc.printf("\n");
Station_Meteo_Laos 0:ddcef4072662 56 }
Station_Meteo_Laos 0:ddcef4072662 57
Station_Meteo_Laos 0:ddcef4072662 58 pc.printf("**********Envoi de la trame par bus CAN**********\n\n");
Station_Meteo_Laos 0:ddcef4072662 59
Station_Meteo_Laos 0:ddcef4072662 60 if (can1.write(CANMessage(id_can, trame, len_can))) {
Station_Meteo_Laos 0:ddcef4072662 61 pc.printf("Message envoye !\n"); // display message
Station_Meteo_Laos 0:ddcef4072662 62 myled = !myled;
Station_Meteo_Laos 0:ddcef4072662 63 }
Station_Meteo_Laos 0:ddcef4072662 64 else{
Station_Meteo_Laos 0:ddcef4072662 65 pc.printf("Echec de l'envoi\n");
Station_Meteo_Laos 0:ddcef4072662 66 can1.reset(); // Reset CANbus if there is a problem
Station_Meteo_Laos 0:ddcef4072662 67 }
Station_Meteo_Laos 0:ddcef4072662 68 wait(1.0); // wait a second
Station_Meteo_Laos 0:ddcef4072662 69 }
Station_Meteo_Laos 0:ddcef4072662 70 else{
Station_Meteo_Laos 0:ddcef4072662 71 pc.printf("\nRecepetion en cours...");
Station_Meteo_Laos 0:ddcef4072662 72 while(1){
Station_Meteo_Laos 0:ddcef4072662 73 if(can1.read(msg)) { // if message is available, read into msg
Station_Meteo_Laos 0:ddcef4072662 74 pc.printf("\n");
Station_Meteo_Laos 0:ddcef4072662 75 pc.printf("|******TRAME RECU**********|\n");
Station_Meteo_Laos 0:ddcef4072662 76 printf("ID de la trame CAN : %d\n", msg.id);
Station_Meteo_Laos 0:ddcef4072662 77 printf("Nombre d'octets recus: %d\n", msg.len); // display message data
Station_Meteo_Laos 0:ddcef4072662 78 for(i=0;i<msg.len;i++) printf(" -> data[%d] = %d\n", i, msg.data[i]);
Station_Meteo_Laos 0:ddcef4072662 79 }
Station_Meteo_Laos 0:ddcef4072662 80 myled = !myled;
Station_Meteo_Laos 0:ddcef4072662 81 }
Station_Meteo_Laos 0:ddcef4072662 82 }
Station_Meteo_Laos 0:ddcef4072662 83
Station_Meteo_Laos 0:ddcef4072662 84
Station_Meteo_Laos 0:ddcef4072662 85 }