MotoTrak

Dependencies:   TextLCD mbed

Committer:
justedwa
Date:
Mon Apr 30 18:18:19 2018 +0000
Revision:
1:469510ddcd87
Parent:
0:454412fa8fee
Final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
justedwa 0:454412fa8fee 1 #include "mbed.h"
justedwa 0:454412fa8fee 2 #include <string>
justedwa 0:454412fa8fee 3 #include "parse.h"
justedwa 0:454412fa8fee 4 #include "sense.h"
justedwa 0:454412fa8fee 5 #include "TextLCD.h"
justedwa 1:469510ddcd87 6 #include "FXOS8700CQ.h"
justedwa 1:469510ddcd87 7 #include <math.h>
justedwa 1:469510ddcd87 8 #include "Dht11.h"
justedwa 1:469510ddcd87 9 FXOS8700CQ fxos(PTE25,PTE24,FXOS8700CQ_SLAVE_ADDR1);
justedwa 1:469510ddcd87 10 TextLCD lcd(PTC5,PTC7,D13,D12,D11,D10,TextLCD::LCD16x2);
justedwa 0:454412fa8fee 11 Serial pc(USBTX, USBRX);
justedwa 0:454412fa8fee 12 InterruptIn gearUp(PTA4);
justedwa 0:454412fa8fee 13 InterruptIn gearDown(PTC6);
justedwa 0:454412fa8fee 14 DigitalIn Nswitch(D7);
justedwa 0:454412fa8fee 15 Serial blue(PTC15,PTC14);
justedwa 0:454412fa8fee 16 Ticker display;
justedwa 0:454412fa8fee 17 Ticker Wifi;
justedwa 1:469510ddcd87 18 Ticker lean;
justedwa 1:469510ddcd87 19 Ticker BLE;
justedwa 1:469510ddcd87 20 Ticker th;
justedwa 1:469510ddcd87 21 Dht11 sense(D3);
justedwa 1:469510ddcd87 22 char rx[40];
justedwa 0:454412fa8fee 23 Serial esp8266(PTC4,PTC3);
justedwa 0:454412fa8fee 24 //DigitalOut myled(PTB22);
justedwa 0:454412fa8fee 25 //DigitalOut myled3(PTB21);
justedwa 0:454412fa8fee 26 info* currInfo = (info*) malloc(sizeof(struct info));
justedwa 0:454412fa8fee 27 volatile bool flag = false;
justedwa 0:454412fa8fee 28 long y = 0;
justedwa 0:454412fa8fee 29 void gUp();
justedwa 0:454412fa8fee 30 void gDown();
justedwa 0:454412fa8fee 31 void updateDisplay();
justedwa 0:454412fa8fee 32 void updateWifi();
justedwa 1:469510ddcd87 33 void updateangle();
justedwa 1:469510ddcd87 34 void onBluetoothReceived();
justedwa 1:469510ddcd87 35 void flushBuff();
justedwa 1:469510ddcd87 36 void updateTempH();
justedwa 0:454412fa8fee 37
justedwa 0:454412fa8fee 38 void onBluetoothReceived(void) {
justedwa 1:469510ddcd87 39 if(blue.readable()){
justedwa 1:469510ddcd87 40 //myled = !myled
justedwa 0:454412fa8fee 41 //pc.printf("Interrupt!\r\n");
justedwa 1:469510ddcd87 42 if(blue.readable()) blue.gets(rx,39);
justedwa 1:469510ddcd87 43 flushBuff();
justedwa 1:469510ddcd87 44 //pc.puts("Passed\r\n");
justedwa 0:454412fa8fee 45 //pc.puts("\n");
justedwa 1:469510ddcd87 46 //pc.puts(rx);
justedwa 1:469510ddcd87 47 //if(rx[0] == '['){
justedwa 0:454412fa8fee 48 //pc.puts(rx);
justedwa 1:469510ddcd87 49 //}
justedwa 1:469510ddcd87 50 //else
justedwa 1:469510ddcd87 51 //rx[0] = '\0';
justedwa 0:454412fa8fee 52 }
justedwa 0:454412fa8fee 53 }
justedwa 0:454412fa8fee 54
justedwa 0:454412fa8fee 55 int main()
justedwa 0:454412fa8fee 56 {
justedwa 0:454412fa8fee 57 initializeStruct(currInfo);
justedwa 1:469510ddcd87 58 th.attach(&updateTempH,5);
justedwa 1:469510ddcd87 59 lean.attach(&updateangle,.5);
justedwa 1:469510ddcd87 60 Wifi.attach(&updateWifi,1);
justedwa 1:469510ddcd87 61 BLE.attach(&onBluetoothReceived,.5);
justedwa 1:469510ddcd87 62 display.attach(&updateDisplay,.1);
justedwa 0:454412fa8fee 63 SetGear(currInfo,Nswitch);
justedwa 0:454412fa8fee 64 gearUp.rise(&gUp);
justedwa 0:454412fa8fee 65 gearDown.rise(&gDown);
justedwa 0:454412fa8fee 66 rx[0] = '\0';
justedwa 0:454412fa8fee 67 int status;
justedwa 0:454412fa8fee 68 currInfo->x = 0;
justedwa 0:454412fa8fee 69 //info* currInfo = (info*) malloc(sizeof(struct info));
justedwa 0:454412fa8fee 70 blue.attach(&onBluetoothReceived, Serial::RxIrq);
justedwa 0:454412fa8fee 71 blue.baud(115200);
justedwa 0:454412fa8fee 72 pc.baud(115200);
justedwa 0:454412fa8fee 73 esp8266.baud(115200);
justedwa 0:454412fa8fee 74 pc.printf("start!");
justedwa 0:454412fa8fee 75 // echo back characters and toggle the LED
justedwa 0:454412fa8fee 76 while (1)
justedwa 0:454412fa8fee 77 {
justedwa 0:454412fa8fee 78 //pc.printf("%f %f %f %d \r\n",currInfo->x,currInfo->y,currInfo->speed,currInfo->gear);
justedwa 0:454412fa8fee 79 status = parse(rx,currInfo);
justedwa 0:454412fa8fee 80 }
justedwa 0:454412fa8fee 81 }
justedwa 0:454412fa8fee 82
justedwa 0:454412fa8fee 83 void gUp(){
justedwa 1:469510ddcd87 84 currInfo->crash = 1;
justedwa 1:469510ddcd87 85 pc.printf("CRASH %d",currInfo->crash);
justedwa 0:454412fa8fee 86 if(currInfo->gear == 6)
justedwa 0:454412fa8fee 87 return;
justedwa 1:469510ddcd87 88 else if(currInfo->gear == 0){
justedwa 0:454412fa8fee 89 currInfo->gear = 2;
justedwa 0:454412fa8fee 90 return;
justedwa 0:454412fa8fee 91 }
justedwa 1:469510ddcd87 92 else
justedwa 1:469510ddcd87 93 currInfo->gear++;
justedwa 0:454412fa8fee 94 }
justedwa 0:454412fa8fee 95
justedwa 0:454412fa8fee 96 void gDown(){
justedwa 1:469510ddcd87 97 currInfo->crash = 0;
justedwa 0:454412fa8fee 98 if(currInfo->gear == 0)
justedwa 0:454412fa8fee 99 currInfo->gear++;
justedwa 0:454412fa8fee 100 else if(currInfo->gear == 1)
justedwa 0:454412fa8fee 101 return;
justedwa 0:454412fa8fee 102 else
justedwa 0:454412fa8fee 103 currInfo->gear--;
justedwa 0:454412fa8fee 104 }
justedwa 0:454412fa8fee 105
justedwa 0:454412fa8fee 106 void updateDisplay(){
justedwa 0:454412fa8fee 107 lcd.cls();
justedwa 0:454412fa8fee 108 lcd.locate(0,0);
justedwa 1:469510ddcd87 109 lcd.printf("Angle: %d",currInfo->lean);
justedwa 0:454412fa8fee 110 lcd.locate(0,1);
justedwa 0:454412fa8fee 111 lcd.printf("m/s:%.2f G:%d",currInfo->speed,currInfo->gear);
justedwa 0:454412fa8fee 112 }
justedwa 0:454412fa8fee 113 void updateWifi(){ //[,WIFI,hr,temp,humidity,x,y,speed,lean,accel,gear,]
justedwa 1:469510ddcd87 114 esp8266.printf("[,WIFI,%d,%d,%d,%f,%f,%f,%d,%d,%d,%d,]",currInfo->hr,currInfo->temp,currInfo->humidity,currInfo->x,currInfo->y,currInfo->speed,currInfo->lean,currInfo->accel,currInfo->gear,currInfo->crash);
justedwa 1:469510ddcd87 115 //pc.printf("[,WIFI,%d,%d,%d,%f,%f,%f,%d,%d,%d,%d,]\r\n",currInfo->hr,currInfo->temp,currInfo->humidity,currInfo->x,currInfo->y,currInfo->speed,currInfo->lean,currInfo->accel,currInfo->gear,currInfo->crash);
justedwa 0:454412fa8fee 116 }
justedwa 1:469510ddcd87 117
justedwa 1:469510ddcd87 118 float prevx = 0, prevy = 0, prevz = 0;
justedwa 1:469510ddcd87 119 void updateangle(){
justedwa 1:469510ddcd87 120 SRAWDATA accdata,magdata;
justedwa 1:469510ddcd87 121 float ax,ay,az,mx,my,mz,axf,ayf,xh,yh;
justedwa 1:469510ddcd87 122 double xangle,yangle,zangle,heading;
justedwa 1:469510ddcd87 123 fxos.enable();
justedwa 1:469510ddcd87 124 fxos.get_data(&accdata,&magdata);
justedwa 1:469510ddcd87 125 ax = accdata.x;
justedwa 1:469510ddcd87 126 ay = accdata.y;
justedwa 1:469510ddcd87 127 az = accdata.z;
justedwa 1:469510ddcd87 128 //pc.printf("%f %f %f\r\n",ax,ay,az);
justedwa 1:469510ddcd87 129 xangle = atan2(ax, (sqrt(ay*ay + az*az)));
justedwa 1:469510ddcd87 130 xangle *= 180; xangle /= 3.141592;
justedwa 1:469510ddcd87 131 if(prevx - ax > 6144){
justedwa 1:469510ddcd87 132 currInfo->crash = 1;
justedwa 1:469510ddcd87 133 }
justedwa 1:469510ddcd87 134 currInfo->lean = (int)xangle;
justedwa 1:469510ddcd87 135 currInfo->accel = (float)((ax/4096)*9.8);
justedwa 1:469510ddcd87 136 //pc.printf("%d",currInfo->lean);
justedwa 1:469510ddcd87 137 prevx = ax;
justedwa 1:469510ddcd87 138 prevy = ay;
justedwa 1:469510ddcd87 139 prevz = az;
justedwa 1:469510ddcd87 140 }
justedwa 1:469510ddcd87 141 void flushBuff(){
justedwa 1:469510ddcd87 142 char temp = 0;
justedwa 1:469510ddcd87 143 while(blue.readable()){
justedwa 1:469510ddcd87 144 temp = blue.getc();
justedwa 1:469510ddcd87 145 }
justedwa 1:469510ddcd87 146 return;
justedwa 1:469510ddcd87 147 }
justedwa 1:469510ddcd87 148 void updateTempH(){
justedwa 1:469510ddcd87 149 sense.read();
justedwa 1:469510ddcd87 150 currInfo->temp = sense.getFahrenheit();
justedwa 1:469510ddcd87 151 currInfo->temp = currInfo->temp;
justedwa 1:469510ddcd87 152 currInfo->humidity = sense.getHumidity();
justedwa 1:469510ddcd87 153 currInfo->humidity = currInfo->humidity;
justedwa 1:469510ddcd87 154 }