schneider françois / Mbed 2 deprecated LPC1768_simulationCAN

Dependencies:   mbed C12832

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 
00002 #include "mbed.h"
00003 #include "C12832.h"
00004 #include "CanreceiveLib.h"
00005 
00006 Ticker ticker;
00007 DigitalOut led1(LED1);
00008 DigitalOut led2(LED2);
00009 CAN can1(p9, p10);
00010 CAN can2(p30, p29);
00011 char message[8];
00012 int countvitesse = 1;
00013 float gvitesse = 0;
00014 char dpvitesse;
00015 float gregmoteur = 0;
00016 char dpregmoteur;
00017 #define canfrequency 500000
00018 #define idvitesse 0x38D
00019 #define lnvitesse 5
00020 #define idregime 0x208
00021 #define lnregime 8
00022 
00023 // Vitesse 38D : 5 octets / période 40 ms (octet1*256+octet2)*0.01
00024 // Regime moteur 208 : 8 octets / période 10 ms (octet1*256+octet2)*0.125
00025 
00026 AnalogIn vit(p20);
00027 AnalogIn regm(p19);
00028 C12832 lcd(p5, p7, p6, p8, p11);
00029 
00030 void send()
00031 {
00032     unsigned int regime_moteur = (unsigned)(regm.read() * 65535.0);
00033     message[0] = regime_moteur >> 8;
00034     message[1] = regime_moteur - message[0] <<8;
00035     can1.write(CANMessage(idregime, message, lnregime));
00036     if (!(--countvitesse)) {
00037         countvitesse = 4;
00038         unsigned int vitesse = (unsigned)(vit.read() * 25000.0);
00039         message[0] = vitesse >> 8;
00040         message[1] = vitesse - message[1] <<8;
00041         wait_us(100);
00042         can1.write(CANMessage(idvitesse, message, lnvitesse));
00043     }
00044 }
00045 void can2reader(void)
00046 {
00047     CANMessage msg;
00048     float calcul;
00049     if(can2.read(msg)) {
00050         calcul = msg.data[0] << 8 + msg.data[1];
00051         if (msg.id == idvitesse) {
00052             gvitesse = calcul * 0.01;
00053             dpvitesse = true;
00054         } else if (msg.id == idregime) {
00055             gregmoteur = calcul * 0.125;
00056             dpregmoteur = true;
00057         }
00058     }
00059 }
00060 
00061 int main()
00062 {
00063     can1.frequency(canfrequency);
00064     can2.frequency(canfrequency);
00065     lcd.cls();
00066     lcd.locate(0,0);
00067     lcd.printf("Hello simulation BUS can Vers 2");
00068     ticker.attach(&send, 0.01);
00069     can2.attach(&can2reader);
00070     while(1) {
00071         if (dpvitesse) {
00072             lcd.locate(2,11);
00073             lcd.printf("Vitesse   %3.0fkm/h\r\n",gvitesse);
00074             dpvitesse = false;
00075         } else if (dpregmoteur) {
00076             lcd.locate(2,22);
00077             lcd.printf("Reg mot %4.0ftr/min\r\n",gregmoteur);
00078             dpregmoteur = false;
00079         }
00080     }
00081 }