Justin Edwards
/
BLIRQ
MotoTrak
main.cpp@1:469510ddcd87, 2018-04-30 (annotated)
- Committer:
- justedwa
- Date:
- Mon Apr 30 18:18:19 2018 +0000
- Revision:
- 1:469510ddcd87
- Parent:
- 0:454412fa8fee
Final
Who changed what in which revision?
User | Revision | Line number | New 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 | } |