Team 9 / FRDM-TFC

Fork of FRDM-TFC by Ian Krase

Committer:
emh203
Date:
Mon Mar 17 14:10:28 2014 +0000
Revision:
5:9fd02d06973b
Parent:
4:8a4a3fc59e57
Last commit had bug in code.  Selecting NumCameras=2 was not functional.   Removed this as not necessary.   Simplified loops to send data over USB interface.     Increased update rate to PC &  verified operation with new .net front end

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emh203 3:23cce037011f 1 #include "mbed.h"
emh203 3:23cce037011f 2 #include "TFC.h"
emh203 3:23cce037011f 3
emh203 3:23cce037011f 4
emh203 3:23cce037011f 5 //This macro is to maintain compatibility with Codewarrior version of the sample. This version uses the MBED libraries for serial port access
emh203 3:23cce037011f 6 Serial PC(USBTX,USBRX);
emh203 3:23cce037011f 7
emh203 3:23cce037011f 8 #define TERMINAL_PRINTF PC.printf
emh203 3:23cce037011f 9
emh203 3:23cce037011f 10
emh203 3:23cce037011f 11 //This ticker code is used to maintain compability with the Codewarrior version of the sample. This code uses an MBED Ticker for background timing.
emh203 3:23cce037011f 12
emh203 3:23cce037011f 13 #define NUM_TFC_TICKERS 4
emh203 3:23cce037011f 14
emh203 3:23cce037011f 15 Ticker TFC_TickerObj;
emh203 3:23cce037011f 16
emh203 3:23cce037011f 17 volatile uint32_t TFC_Ticker[NUM_TFC_TICKERS];
emh203 3:23cce037011f 18
emh203 3:23cce037011f 19 void TFC_TickerUpdate()
emh203 3:23cce037011f 20 {
emh203 3:23cce037011f 21 int i;
emh203 3:23cce037011f 22
emh203 3:23cce037011f 23 for(i=0; i<NUM_TFC_TICKERS; i++)
emh203 3:23cce037011f 24 {
emh203 3:23cce037011f 25 if(TFC_Ticker[i]<0xFFFFFFFF)
emh203 3:23cce037011f 26 {
emh203 3:23cce037011f 27 TFC_Ticker[i]++;
emh203 3:23cce037011f 28 }
emh203 3:23cce037011f 29 }
emh203 3:23cce037011f 30 }
emh203 3:23cce037011f 31
emh203 3:23cce037011f 32
emh203 3:23cce037011f 33
emh203 3:23cce037011f 34
emh203 3:23cce037011f 35 int main()
emh203 3:23cce037011f 36 {
emh203 5:9fd02d06973b 37 uint32_t i,t = 0;
emh203 3:23cce037011f 38
emh203 3:23cce037011f 39 PC.baud(115200);
emh203 3:23cce037011f 40 TFC_TickerObj.attach_us(&TFC_TickerUpdate,2000);
emh203 3:23cce037011f 41
emh203 3:23cce037011f 42 TFC_Init();
emh203 3:23cce037011f 43
emh203 3:23cce037011f 44 for(;;)
emh203 3:23cce037011f 45 {
emh203 3:23cce037011f 46 //TFC_Task must be called in your main loop. This keeps certain processing happy (I.E. Serial port queue check)
emh203 3:23cce037011f 47 // TFC_Task();
emh203 3:23cce037011f 48
emh203 3:23cce037011f 49 //This Demo program will look at the middle 2 switch to select one of 4 demo modes.
emh203 3:23cce037011f 50 //Let's look at the middle 2 switches
emh203 3:23cce037011f 51 switch((TFC_GetDIP_Switch()>>1)&0x03)
emh203 3:23cce037011f 52 {
emh203 3:23cce037011f 53 default:
emh203 3:23cce037011f 54 case 0 :
emh203 3:23cce037011f 55 //Demo mode 0 just tests the switches and LED's
emh203 3:23cce037011f 56 if(TFC_PUSH_BUTTON_0_PRESSED)
emh203 3:23cce037011f 57 TFC_BAT_LED0_ON;
emh203 3:23cce037011f 58 else
emh203 3:23cce037011f 59 TFC_BAT_LED0_OFF;
emh203 3:23cce037011f 60
emh203 3:23cce037011f 61 if(TFC_PUSH_BUTTON_1_PRESSED)
emh203 3:23cce037011f 62 TFC_BAT_LED3_ON;
emh203 3:23cce037011f 63 else
emh203 3:23cce037011f 64 TFC_BAT_LED3_OFF;
emh203 3:23cce037011f 65
emh203 3:23cce037011f 66
emh203 3:23cce037011f 67 if(TFC_GetDIP_Switch()&0x01)
emh203 3:23cce037011f 68 TFC_BAT_LED1_ON;
emh203 3:23cce037011f 69 else
emh203 3:23cce037011f 70 TFC_BAT_LED1_OFF;
emh203 3:23cce037011f 71
emh203 3:23cce037011f 72 if(TFC_GetDIP_Switch()&0x08)
emh203 3:23cce037011f 73 TFC_BAT_LED2_ON;
emh203 3:23cce037011f 74 else
emh203 3:23cce037011f 75 TFC_BAT_LED2_OFF;
emh203 3:23cce037011f 76
emh203 3:23cce037011f 77 break;
emh203 3:23cce037011f 78
emh203 3:23cce037011f 79 case 1:
emh203 3:23cce037011f 80
emh203 3:23cce037011f 81 //Demo mode 1 will just move the servos with the on-board potentiometers
emh203 3:23cce037011f 82 if(TFC_Ticker[0]>=20)
emh203 3:23cce037011f 83 {
emh203 3:23cce037011f 84 TFC_Ticker[0] = 0; //reset the Ticker
emh203 3:23cce037011f 85 //Every 20 mSeconds, update the Servos
emh203 3:23cce037011f 86 TFC_SetServo(0,TFC_ReadPot(0));
emh203 3:23cce037011f 87 TFC_SetServo(1,TFC_ReadPot(1));
emh203 3:23cce037011f 88 }
emh203 3:23cce037011f 89 //Let's put a pattern on the LEDs
emh203 3:23cce037011f 90 if(TFC_Ticker[1] >= 125)
emh203 3:23cce037011f 91 {
emh203 3:23cce037011f 92 TFC_Ticker[1] = 0;
emh203 3:23cce037011f 93 t++;
emh203 3:23cce037011f 94 if(t>4)
emh203 3:23cce037011f 95 {
emh203 3:23cce037011f 96 t=0;
emh203 3:23cce037011f 97 }
emh203 3:23cce037011f 98 TFC_SetBatteryLED_Level(t);
emh203 3:23cce037011f 99 }
emh203 3:23cce037011f 100
emh203 3:23cce037011f 101 TFC_SetMotorPWM(0,0); //Make sure motors are off
emh203 3:23cce037011f 102 TFC_HBRIDGE_DISABLE;
emh203 3:23cce037011f 103
emh203 3:23cce037011f 104
emh203 3:23cce037011f 105 break;
emh203 3:23cce037011f 106
emh203 3:23cce037011f 107 case 2 :
emh203 3:23cce037011f 108
emh203 3:23cce037011f 109 //Demo Mode 2 will use the Pots to make the motors move
emh203 3:23cce037011f 110 TFC_HBRIDGE_ENABLE;
emh203 3:23cce037011f 111
emh203 3:23cce037011f 112 TFC_SetMotorPWM(TFC_ReadPot(0),TFC_ReadPot(1));
emh203 3:23cce037011f 113
emh203 3:23cce037011f 114
emh203 3:23cce037011f 115 //Let's put a pattern on the LEDs
emh203 3:23cce037011f 116 if(TFC_Ticker[1] >= 125)
emh203 3:23cce037011f 117 {
emh203 3:23cce037011f 118 TFC_Ticker[1] = 0;
emh203 3:23cce037011f 119 t++;
emh203 3:23cce037011f 120 if(t>4)
emh203 3:23cce037011f 121 {
emh203 3:23cce037011f 122 t=0;
emh203 3:23cce037011f 123 }
emh203 3:23cce037011f 124 TFC_SetBatteryLED_Level(t);
emh203 3:23cce037011f 125 }
emh203 3:23cce037011f 126 break;
emh203 3:23cce037011f 127
emh203 3:23cce037011f 128 case 3 :
emh203 3:23cce037011f 129
redxeth 4:8a4a3fc59e57 130
emh203 3:23cce037011f 131 //Demo Mode 3 will be in Freescale Garage Mode. It will beam data from the Camera to the
emh203 3:23cce037011f 132 //Labview Application
emh203 3:23cce037011f 133
redxeth 4:8a4a3fc59e57 134
emh203 5:9fd02d06973b 135 if(TFC_Ticker[0]>50 && TFC_LineScanImageReady>0)
emh203 3:23cce037011f 136 {
emh203 3:23cce037011f 137 TFC_Ticker[0] = 0;
emh203 3:23cce037011f 138 TFC_LineScanImageReady=0;
emh203 3:23cce037011f 139 TERMINAL_PRINTF("\r\n");
emh203 3:23cce037011f 140 TERMINAL_PRINTF("L:");
emh203 3:23cce037011f 141
emh203 3:23cce037011f 142 if(t==0)
emh203 3:23cce037011f 143 t=4;
emh203 3:23cce037011f 144 else
emh203 3:23cce037011f 145 t--;
emh203 3:23cce037011f 146
emh203 3:23cce037011f 147 TFC_SetBatteryLED_Level(t);
emh203 3:23cce037011f 148
redxeth 4:8a4a3fc59e57 149 // camera 1
emh203 5:9fd02d06973b 150 for(i=0;i<128;i++)
emh203 3:23cce037011f 151 {
emh203 5:9fd02d06973b 152 TERMINAL_PRINTF("%X,",TFC_LineScanImage0[i]);
emh203 3:23cce037011f 153 }
emh203 5:9fd02d06973b 154
emh203 5:9fd02d06973b 155 // camera 2
emh203 5:9fd02d06973b 156 for(i=0;i<128;i++)
emh203 5:9fd02d06973b 157 {
emh203 5:9fd02d06973b 158 if(i==127)
emh203 5:9fd02d06973b 159 TERMINAL_PRINTF("%X\r\n",TFC_LineScanImage1[i]);
emh203 5:9fd02d06973b 160 else
emh203 5:9fd02d06973b 161 TERMINAL_PRINTF("%X,",TFC_LineScanImage1[i]);
emh203 5:9fd02d06973b 162
emh203 5:9fd02d06973b 163 }
emh203 3:23cce037011f 164 }
emh203 5:9fd02d06973b 165
emh203 3:23cce037011f 166 break;
emh203 3:23cce037011f 167 }
emh203 3:23cce037011f 168 }
emh203 3:23cce037011f 169
emh203 3:23cce037011f 170
emh203 3:23cce037011f 171 }
emh203 3:23cce037011f 172