This is an example program that actually allows the car to race using the FRDM-TFC library!
Fork of TFC-RACING-DEMO by
main.cpp@1:2ca599933725, 2014-04-28 (annotated)
- Committer:
- morgonXak
- Date:
- Mon Apr 28 15:05:37 2014 +0000
- Revision:
- 1:2ca599933725
- Parent:
- 0:98e98e01a6ce
jguh; \; ;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
redxeth | 0:98e98e01a6ce | 1 | #include "mbed.h" |
redxeth | 0:98e98e01a6ce | 2 | #include "TFC.h" |
redxeth | 0:98e98e01a6ce | 3 | |
redxeth | 0:98e98e01a6ce | 4 | #include "common.h" |
redxeth | 0:98e98e01a6ce | 5 | #include "Spices.h" |
redxeth | 0:98e98e01a6ce | 6 | |
redxeth | 0:98e98e01a6ce | 7 | |
redxeth | 0:98e98e01a6ce | 8 | void TFC_TickerUpdate() |
redxeth | 0:98e98e01a6ce | 9 | { |
redxeth | 0:98e98e01a6ce | 10 | int i; |
redxeth | 0:98e98e01a6ce | 11 | |
redxeth | 0:98e98e01a6ce | 12 | for(i=0; i<NUM_TFC_TICKERS; i++) |
redxeth | 0:98e98e01a6ce | 13 | { |
redxeth | 0:98e98e01a6ce | 14 | if(TFC_Ticker[i]<0xFFFFFFFF) |
redxeth | 0:98e98e01a6ce | 15 | { |
redxeth | 0:98e98e01a6ce | 16 | TFC_Ticker[i]++; |
redxeth | 0:98e98e01a6ce | 17 | } |
redxeth | 0:98e98e01a6ce | 18 | } |
redxeth | 0:98e98e01a6ce | 19 | } |
redxeth | 0:98e98e01a6ce | 20 | |
redxeth | 0:98e98e01a6ce | 21 | void DemoProgram() |
redxeth | 0:98e98e01a6ce | 22 | { |
redxeth | 0:98e98e01a6ce | 23 | uint32_t i,j,t = 0; |
morgonXak | 1:2ca599933725 | 24 | // float ReadPot0, ReadPot1; |
redxeth | 0:98e98e01a6ce | 25 | |
redxeth | 0:98e98e01a6ce | 26 | //Labview Application |
redxeth | 0:98e98e01a6ce | 27 | //note that there are some issues |
redxeth | 0:98e98e01a6ce | 28 | if(TFC_Ticker[0]>1000 && TFC_LineScanImageReady>0) // every 2s ... |
redxeth | 0:98e98e01a6ce | 29 | { |
redxeth | 0:98e98e01a6ce | 30 | TFC_Ticker[0] = 0; |
redxeth | 0:98e98e01a6ce | 31 | TFC_LineScanImageReady=0; // must reset to 0 after detecting non-zero |
redxeth | 0:98e98e01a6ce | 32 | |
redxeth | 0:98e98e01a6ce | 33 | if(t==0) |
redxeth | 0:98e98e01a6ce | 34 | t=4; |
redxeth | 0:98e98e01a6ce | 35 | else |
redxeth | 0:98e98e01a6ce | 36 | t--; |
redxeth | 0:98e98e01a6ce | 37 | |
redxeth | 0:98e98e01a6ce | 38 | TFC_SetBatteryLED_Level(t); |
redxeth | 0:98e98e01a6ce | 39 | |
redxeth | 0:98e98e01a6ce | 40 | for(i=0;i<8;i++) // print one line worth of data (128) from Camera 0 |
redxeth | 0:98e98e01a6ce | 41 | { |
redxeth | 0:98e98e01a6ce | 42 | for(j=0;j<16;j++) |
redxeth | 0:98e98e01a6ce | 43 | { |
redxeth | 0:98e98e01a6ce | 44 | |
redxeth | 0:98e98e01a6ce | 45 | TERMINAL_PRINTF("0x%X",TFC_LineScanImage0[(i*16)+j]); |
redxeth | 0:98e98e01a6ce | 46 | |
redxeth | 0:98e98e01a6ce | 47 | if((i==7) && (j==15)) // when last data reached put in line return |
redxeth | 0:98e98e01a6ce | 48 | TERMINAL_PRINTF("\r\n",TFC_LineScanImage0[(i*16)+j]); |
redxeth | 0:98e98e01a6ce | 49 | else |
redxeth | 0:98e98e01a6ce | 50 | TERMINAL_PRINTF(",",TFC_LineScanImage0[(i*16)+j]); |
redxeth | 0:98e98e01a6ce | 51 | |
redxeth | 0:98e98e01a6ce | 52 | } |
redxeth | 0:98e98e01a6ce | 53 | wait_ms(10); |
morgonXak | 1:2ca599933725 | 54 | } |
morgonXak | 1:2ca599933725 | 55 | }} |
redxeth | 0:98e98e01a6ce | 56 | |
redxeth | 0:98e98e01a6ce | 57 | |
redxeth | 0:98e98e01a6ce | 58 | int main() |
redxeth | 0:98e98e01a6ce | 59 | { |
redxeth | 0:98e98e01a6ce | 60 | // TERMINAL TYPE |
redxeth | 0:98e98e01a6ce | 61 | PC.baud(115200); // works with Excel and TeraTerm |
redxeth | 0:98e98e01a6ce | 62 | //PC.baud(9600); // works with USB Serial Monitor Lite: https://play.google.com/store/apps/details?id=jp.ksksue.app.terminal; doesn't work > 9600 |
redxeth | 0:98e98e01a6ce | 63 | TFC_TickerObj.attach_us(&TFC_TickerUpdate,2000); // update ticker array every 2mS (2000 uS) |
redxeth | 0:98e98e01a6ce | 64 | |
redxeth | 0:98e98e01a6ce | 65 | TFC_Init(); |
redxeth | 0:98e98e01a6ce | 66 | |
redxeth | 0:98e98e01a6ce | 67 | for(;;) |
redxeth | 0:98e98e01a6ce | 68 | { |
redxeth | 0:98e98e01a6ce | 69 | //TFC_Task must be called in your main loop. This keeps certain processing happy (I.E. Serial port queue check) |
redxeth | 0:98e98e01a6ce | 70 | // TFC_Task(); |
redxeth | 0:98e98e01a6ce | 71 | |
redxeth | 0:98e98e01a6ce | 72 | |
redxeth | 0:98e98e01a6ce | 73 | // If DIP switch 1 is high, then run MCP, else Demo program |
redxeth | 0:98e98e01a6ce | 74 | if(TFC_GetDIP_Switch()&0x01) |
redxeth | 0:98e98e01a6ce | 75 | // Run MCP |
redxeth | 0:98e98e01a6ce | 76 | MasterControlProgram(); |
redxeth | 0:98e98e01a6ce | 77 | else |
redxeth | 0:98e98e01a6ce | 78 | // Run Demo Program |
redxeth | 0:98e98e01a6ce | 79 | DemoProgram(); |
redxeth | 0:98e98e01a6ce | 80 | |
redxeth | 0:98e98e01a6ce | 81 | } // end of infinite for loop |
redxeth | 0:98e98e01a6ce | 82 | |
redxeth | 0:98e98e01a6ce | 83 | |
redxeth | 0:98e98e01a6ce | 84 | } |
redxeth | 0:98e98e01a6ce | 85 |