Lucio Hallage / Mbed 2 deprecated ignicaofonica

Dependencies:   CANMsg mbed

Committer:
lucio_hallage
Date:
Thu Dec 15 16:47:32 2022 +0000
Revision:
0:4d8fdecf2bbf
Child:
1:49a28b314101
ignicao

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lucio_hallage 0:4d8fdecf2bbf 1 #include "mbed.h"
lucio_hallage 0:4d8fdecf2bbf 2 #include "CAN.h"
lucio_hallage 0:4d8fdecf2bbf 3 #include "can_helper.h"
lucio_hallage 0:4d8fdecf2bbf 4 #include "stdio.h"
lucio_hallage 0:4d8fdecf2bbf 5
lucio_hallage 0:4d8fdecf2bbf 6 InterruptIn ign(D8);
lucio_hallage 0:4d8fdecf2bbf 7 InterruptIn botao(PC_13); // definição do botão de usuário
lucio_hallage 0:4d8fdecf2bbf 8
lucio_hallage 0:4d8fdecf2bbf 9 Serial pc(USBTX, USBRX);
lucio_hallage 0:4d8fdecf2bbf 10 CAN can1(PA_11, PA_12);
lucio_hallage 0:4d8fdecf2bbf 11
lucio_hallage 0:4d8fdecf2bbf 12 PwmOut rot(D9);
lucio_hallage 0:4d8fdecf2bbf 13 PwmOut ign1(D7);
lucio_hallage 0:4d8fdecf2bbf 14 PwmOut ign2(D14);
lucio_hallage 0:4d8fdecf2bbf 15
lucio_hallage 0:4d8fdecf2bbf 16
lucio_hallage 0:4d8fdecf2bbf 17 // AnalogIn pot(PB_1);
lucio_hallage 0:4d8fdecf2bbf 18 //---------Dados em hexadecimal de cada mensagem-------
lucio_hallage 0:4d8fdecf2bbf 19 static char info = 0x55;
lucio_hallage 0:4d8fdecf2bbf 20
lucio_hallage 0:4d8fdecf2bbf 21 void toggle(void);
lucio_hallage 0:4d8fdecf2bbf 22 void outputFloat(void);
lucio_hallage 0:4d8fdecf2bbf 23 int ig = 0;
lucio_hallage 0:4d8fdecf2bbf 24 float leitura;
lucio_hallage 0:4d8fdecf2bbf 25 float leitura_count;
lucio_hallage 0:4d8fdecf2bbf 26 int RPM;
lucio_hallage 0:4d8fdecf2bbf 27 float RPM_medio;
lucio_hallage 0:4d8fdecf2bbf 28 float ta;
lucio_hallage 0:4d8fdecf2bbf 29 int av=20;
lucio_hallage 0:4d8fdecf2bbf 30 int fase=0;
lucio_hallage 0:4d8fdecf2bbf 31 int c;
lucio_hallage 0:4d8fdecf2bbf 32 int co;
lucio_hallage 0:4d8fdecf2bbf 33 Timer debounce;
lucio_hallage 0:4d8fdecf2bbf 34 Timer timer;
lucio_hallage 0:4d8fdecf2bbf 35 CANMessage msg;
lucio_hallage 0:4d8fdecf2bbf 36
lucio_hallage 0:4d8fdecf2bbf 37
lucio_hallage 0:4d8fdecf2bbf 38
lucio_hallage 0:4d8fdecf2bbf 39
lucio_hallage 0:4d8fdecf2bbf 40 int main() {
lucio_hallage 0:4d8fdecf2bbf 41 debounce.start();
lucio_hallage 0:4d8fdecf2bbf 42 timer.start();
lucio_hallage 0:4d8fdecf2bbf 43 ign.rise(&toggle);
lucio_hallage 0:4d8fdecf2bbf 44 pc.baud(115200);
lucio_hallage 0:4d8fdecf2bbf 45 while(1) {
lucio_hallage 0:4d8fdecf2bbf 46 if (timer.read()>5) {
lucio_hallage 0:4d8fdecf2bbf 47
lucio_hallage 0:4d8fdecf2bbf 48 //outputFloat(RPM);
lucio_hallage 0:4d8fdecf2bbf 49
lucio_hallage 0:4d8fdecf2bbf 50 char rpm[4];
lucio_hallage 0:4d8fdecf2bbf 51 sprintf(rpm, "%d", RPM);
lucio_hallage 0:4d8fdecf2bbf 52 can1.write(CANMessage(20, rpm , 8,CANData,CANStandard ));
lucio_hallage 0:4d8fdecf2bbf 53 if(can1.read(msg)) {
lucio_hallage 0:4d8fdecf2bbf 54 if (msg.id==6){
lucio_hallage 0:4d8fdecf2bbf 55 if (msg.data=="0x09"){
lucio_hallage 0:4d8fdecf2bbf 56 av= 4*10^-3*RPM +6;
lucio_hallage 0:4d8fdecf2bbf 57 }
lucio_hallage 0:4d8fdecf2bbf 58 if (msg.data=="0x10"){
lucio_hallage 0:4d8fdecf2bbf 59 av= 6*10^-3*RPM +4;
lucio_hallage 0:4d8fdecf2bbf 60 }
lucio_hallage 0:4d8fdecf2bbf 61 if (msg.data=="0x11"){
lucio_hallage 0:4d8fdecf2bbf 62 av= -9*10^-7*RPM*RPM+0.0091*RPM+1.6;
lucio_hallage 0:4d8fdecf2bbf 63 }
lucio_hallage 0:4d8fdecf2bbf 64 //if (msg.data==""){
lucio_hallage 0:4d8fdecf2bbf 65 // av= -8*57^-7*RPM^2+0.00954*RPM+1.6;
lucio_hallage 0:4d8fdecf2bbf 66 // }
lucio_hallage 0:4d8fdecf2bbf 67 // if (msg.data==""){
lucio_hallage 0:4d8fdecf2bbf 68 // av= 6*10^-3*RPM +5.4;
lucio_hallage 0:4d8fdecf2bbf 69 // }
lucio_hallage 0:4d8fdecf2bbf 70
lucio_hallage 0:4d8fdecf2bbf 71 // av=float(msg.data)
lucio_hallage 0:4d8fdecf2bbf 72 }
lucio_hallage 0:4d8fdecf2bbf 73
lucio_hallage 0:4d8fdecf2bbf 74
lucio_hallage 0:4d8fdecf2bbf 75 printf("\n\r Message id :%d", msg.id);
lucio_hallage 0:4d8fdecf2bbf 76
lucio_hallage 0:4d8fdecf2bbf 77 printf("\n\r Message received: %s", msg.data);
lucio_hallage 0:4d8fdecf2bbf 78 }
lucio_hallage 0:4d8fdecf2bbf 79 timer.reset();
lucio_hallage 0:4d8fdecf2bbf 80 }
lucio_hallage 0:4d8fdecf2bbf 81 }
lucio_hallage 0:4d8fdecf2bbf 82 }
lucio_hallage 0:4d8fdecf2bbf 83
lucio_hallage 0:4d8fdecf2bbf 84 void outputFloat(float value) {
lucio_hallage 0:4d8fdecf2bbf 85 unsigned char * charPtr = (unsigned char*)&value; // create a char * that points to the location of value
lucio_hallage 0:4d8fdecf2bbf 86 for (int i = 0; i<4; i++) { // each byte in value
lucio_hallage 0:4d8fdecf2bbf 87 pc.putc(*(charPtr + i)); // send the next value pointed to by charPtr it over the serial port.
lucio_hallage 0:4d8fdecf2bbf 88 }
lucio_hallage 0:4d8fdecf2bbf 89 }
lucio_hallage 0:4d8fdecf2bbf 90
lucio_hallage 0:4d8fdecf2bbf 91 void toggle() {
lucio_hallage 0:4d8fdecf2bbf 92 ig++;
lucio_hallage 0:4d8fdecf2bbf 93 if (ig==31){
lucio_hallage 0:4d8fdecf2bbf 94 ig++;
lucio_hallage 0:4d8fdecf2bbf 95 leitura = debounce.read();
lucio_hallage 0:4d8fdecf2bbf 96 if (fase==0){
lucio_hallage 0:4d8fdecf2bbf 97 ign1.period(leitura*2); // 4 second period
lucio_hallage 0:4d8fdecf2bbf 98 ign1.write(0.050f/2);
lucio_hallage 0:4d8fdecf2bbf 99 }
lucio_hallage 0:4d8fdecf2bbf 100 if (fase==1){
lucio_hallage 0:4d8fdecf2bbf 101 ign2.period(leitura*2); // 4 second period
lucio_hallage 0:4d8fdecf2bbf 102 ign2.write(0.050f/2);
lucio_hallage 0:4d8fdecf2bbf 103 }
lucio_hallage 0:4d8fdecf2bbf 104 ta= av*1000/(RPM*6);
lucio_hallage 0:4d8fdecf2bbf 105 wait_us((leitura*1000-ta)*1000);
lucio_hallage 0:4d8fdecf2bbf 106 rot.period(leitura); // 4 second period
lucio_hallage 0:4d8fdecf2bbf 107 rot.write(0.050f);
lucio_hallage 0:4d8fdecf2bbf 108 RPM = 60/(leitura);
lucio_hallage 0:4d8fdecf2bbf 109 fase++;
lucio_hallage 0:4d8fdecf2bbf 110 if (fase>=2){
lucio_hallage 0:4d8fdecf2bbf 111 fase=0;
lucio_hallage 0:4d8fdecf2bbf 112 }
lucio_hallage 0:4d8fdecf2bbf 113 ig=0;
lucio_hallage 0:4d8fdecf2bbf 114 debounce.reset();
lucio_hallage 0:4d8fdecf2bbf 115
lucio_hallage 0:4d8fdecf2bbf 116
lucio_hallage 0:4d8fdecf2bbf 117 }
lucio_hallage 0:4d8fdecf2bbf 118
lucio_hallage 0:4d8fdecf2bbf 119 }
lucio_hallage 0:4d8fdecf2bbf 120