![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
This project will enable remote control of a motorised turntable via a WiFi enabled TCP link using ACKme's (http://ack.me/) Wi-Fi enablement platform
Diff: main.cpp
- Revision:
- 1:7b420a2ea7db
- Parent:
- 0:01fd80c0a524
- Child:
- 2:a73037a7d85d
diff -r 01fd80c0a524 -r 7b420a2ea7db main.cpp --- a/main.cpp Tue Aug 26 05:04:24 2014 +0000 +++ b/main.cpp Tue Aug 26 12:33:27 2014 +0000 @@ -2,27 +2,45 @@ enum calib_state_t { UNCALIBRATED, - CALIBRATED, + INITIALISING, CALIBRATING, - INITIALISING,}; + CALIBRATED}; DigitalOut my_led(LED1); // Sanity LED DigitalOut ttDrive(PA_14); // the drive signal for the turntable InterruptIn encoder(PA_13); // Signal from encoder InterruptIn limitSwitch(PA_15); // Signal from limit switch -calib_state_t calib_state = 0; // Flag for calibration state +calib_state_t calib_state = UNCALIBRATED; // Flag for calibration state int encoderMax = 0; // Calibrated maximum value for the encoder +int encoderCurrent = 0; // Keeps track of the current position of the turn table +bool limitFlag = 0; -void calibrate(void); // synchronises and calibrates MCU to turntable -void increment(int *i); // increments value i, used as an interrupt target +void calibrate(); // synchronises and calibrates MCU to turntable +void incrementEncoder(); // increments value i, used as an interrupt target +void resetEncoder(); + + +ConsoleSerial consoleSerial(SERIAL_TX, SERIAL_RX); int main() { + consoleSerial.setBaud(CONSOLE_BAUD); + + my_led = 0; + // Step 1: Attach interrupt signals to appropriate functions + + limitSwitch.mode(PullUp); + limitSwitch.fall(&resetEncoder); //****Ask someone about correct handling of interrupts, including; naming convention (resetEncoder also handles calib_state), potential coupling realted to having a function perform two tasks + encoder.mode(PullDown); + encoder.fall(&incrementEncoder); + encoder.rise(&incrementEncoder); + // Step 2: Calibrate MCU to the turn table + calibrate(); // Step 3: Control turntable using hard coded commands // Step 4: Include WiConnect Library // Step 5: Interpret commands sent over TCP @@ -30,19 +48,69 @@ // Configure sanity LED to blink while(1) { - my_led = !my_led; + //my_led = !my_led; wait(0.5); } } -void calibrate(void) +void calibrate() { - // Step 1: Get the motor turning + // Step 1: Set status to uncalibrated + calib_state = UNCALIBRATED; + // Step 2: Get the motor turning + ttDrive = 1; + calib_state = INITIALISING; + encoderMax = 0; // reset the maximum encoder value + // Step 2: Continue turning until calibration state is "CALIBRATED" // the actual calibration will be handled by interrupts + + while (calib_state != CALIBRATED) + { + // run time reaches here....my_led = 1; + my_led = limitFlag; + if(limitFlag == 1) + { + my_led = 1; + // run time does not reach here + // Step 2: Process the calibration state + limitFlag = 0; + switch(calib_state) + { + case (UNCALIBRATED): + calib_state = INITIALISING; + break; + case (INITIALISING): + calib_state = CALIBRATING; + break; + case (CALIBRATING): + calib_state = CALIBRATED; + break; + case (CALIBRATED): + break; + default: + calib_state = UNCALIBRATED; + } + } + } } -void increment(int *i) +void incrementEncoder() { // Step 1: De-refference pointer and increment the value + if (calib_state == CALIBRATING) + ++encoderMax; + else + ++encoderCurrent; +} + +void resetEncoder() +{ + // code reaches here...my_led = 1; + // Step 1: Set encoderCurrent value to zero + encoderCurrent = 0; + + // Show that the limit switch has been pressed + limitFlag = 1; + my_led = limitFlag; } \ No newline at end of file