chad
Dependencies: MCP23017 WattBob_TextLCD mbed-rtos mbed
Diff: tasks.cpp
- Revision:
- 13:ad04937ca366
- Child:
- 14:ede0e7ed2745
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tasks.cpp Tue Mar 07 22:32:06 2017 +0000 @@ -0,0 +1,156 @@ +#include "main.h" + +// Task 1: Measure input frequency +void Task1(void) +{ + timer.reset(); + + // If the input signal is low, wait for a rising edge to start counting + if (FqIn == 0) + { + while(FqIn == 0) + wait_us(SampFreq); + timer.start(); // Start timer + while(FqIn == 1) // Keep counting as long as signal is high + wait_us(SampFreq); + } + + // If the input signal is high, wait for a falling edge to start counting + else if (FqIn == 1) + { + while(FqIn == 1) + wait_us(SampFreq); + timer.start(); // Start timer + while(FqIn == 0) // Keep counting as long as signal is high + wait_us(SampFreq); + } + + timer.stop(); // Stop counting when signal changes + period = timer.read()*2; // Convert the time into a period + freq = 1000000/period; // Convert the period into a frequency + + lcd->locate(1,0); + lcd->printf("F: %d", timer.read()); + + return; +} + + +//////////////////////////////////////////////////////////////////////////////// +// +// Read Digital input switch +// +void Task2(void) +{ + if (DSIn == 1) + switch_state = 1; + else if (DSIn == 0) + switch_state = 0; + else + switch_state = 0; + // switch_state = DSIn == 1 ? 1: 0; + return; +} + + +//////////////////////////////////////////////////////////////////////////////// +// +// Output watchdog timer pulse +// +void Task3(void) +{ + WD_pulse = 1; // Pulse High + wait_us(WD); // Leave high for specified length + WD_pulse = 0; + return; +} + +//////////////////////////////////////////////////////////////////////////////// +// +// Read and filter 2 analogue inputs +// 3.3V max +// +void Task4(void) +{ + A1_val = 0; + A2_val = 0; + + for(int i=0; i<3; i++) + { + A1_val = A1_val + A1_val + (A1_in * 3.3); + A2_val = A2_val + A2_val + (A2_in * 3.3); + } + + A1_val = (A1_val / 3); + A2_val = (A2_val / 3); + + return; +} + +//////////////////////////////////////////////////////////////////////////////// +// +// Display Frequency, digital and filterd analogue values on LCD +// +void Task5(void) +{ + lcd->cls(); + lcd->locate(0,0); + //lcd->printf("F%d S%d% A1d% A2d",freq,switch_state,A1_val,A2_val); + lcd->printf("F%d",freq); + //lcd->printf("test"); + + return; +} + +//////////////////////////////////////////////////////////////////////////////// +// +// Error check +// If switch_1 is ON & (average_analogue_in_1 > average_analogue_in_2) error code 3 +// Else error code 0 +// +void Task6(void) +{/* + if(switch_state == 1 && (A1_val > A2_val)) + error_code = 3; + else + error_code = 0;*/ + + error_code++; + + //lcd->cls(); + lcd->locate(1,0); + lcd->printf("Error: %d", error_code); + + wait_us(100); + return; +} + +//////////////////////////////////////////////////////////////////////////////// +// +// Log frequency, digital and filtered analogue values to uSD +// +void Task7(void) +{ + logcount++; + fprintf(fp,"Log: %d,Freq: %dHz,Digital_In: %d,Analogue_1: %d,Analogue_2: %d\n",logcount,freq,switch_state,A1_val,A2_val); + + return; +} + +//////////////////////////////////////////////////////////////////////////////// +// +// Shutdown on switch +// +/*void Task8() +{ + if(DS_sIn == 1) + { + tick.detach(); + fprintf(fp, "\nTask 5 took %dms to complete\n", T5.read_ms()); + fprintf(fp, "\nCyclic Executive stopped\n"); + fclose(fp); + } + else{ + } +} +*/