![](/media/cache/profiles/f.jpg.50x50_q85.jpg)
Generates a test signal on an AnalogOut and monitors a signal on an AnalogIn, plotting the test signal or the actual signal depending on a conditional compile. The wait() and wait_ms() library calls for this board are highly inaccurate so a new function is provided to wait for X number of milliseconds -- which is not very accurate.
Dependencies: LCD_DISCO_F429ZI mbed TS_DISCO_F429ZI mbed-os BSP_DISCO_F429ZI
LaserMon-Main.cpp@2:cbcf2695a4a1, 2019-06-17 (annotated)
- Committer:
- Damotclese
- Date:
- Mon Jun 17 17:11:07 2019 +0000
- Revision:
- 2:cbcf2695a4a1
- Parent:
- 1:b9d4b9b8884c
Added average TEC history;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Damotclese | 0:1ebe7d222470 | 1 | |
Damotclese | 0:1ebe7d222470 | 2 | // ---------------------------------------------------------------------- |
Damotclese | 0:1ebe7d222470 | 3 | // LaserMon-Main.cpp |
Damotclese | 0:1ebe7d222470 | 4 | // |
Damotclese | 0:1ebe7d222470 | 5 | // Fredric L. Rice, June 2019 |
Damotclese | 0:1ebe7d222470 | 6 | // |
Damotclese | 0:1ebe7d222470 | 7 | // ---------------------------------------------------------------------- |
Damotclese | 0:1ebe7d222470 | 8 | |
Damotclese | 0:1ebe7d222470 | 9 | #include "mbed.h" // The mbed operating system |
Damotclese | 0:1ebe7d222470 | 10 | #include "LCD_DISCO_F429ZI.h" // For controlling the LCD |
Damotclese | 0:1ebe7d222470 | 11 | #include "TS_DISCO_F429ZI.h" // For controlling the touch screen |
Damotclese | 0:1ebe7d222470 | 12 | #include "LaserMon-TestOutput.h" // For generating test output signal |
Damotclese | 0:1ebe7d222470 | 13 | #include "LaserMon-ScanInput.h" // For monitoring laser power pin |
Damotclese | 2:cbcf2695a4a1 | 14 | #include "LaserMon-TEC.h" // For monitoring the TEC output |
Damotclese | 0:1ebe7d222470 | 15 | #include "LaserMon-Main.h" // Always include ourself |
Damotclese | 0:1ebe7d222470 | 16 | |
Damotclese | 0:1ebe7d222470 | 17 | // ---------------------------------------------------------------------- |
Damotclese | 0:1ebe7d222470 | 18 | // Local data storage |
Damotclese | 0:1ebe7d222470 | 19 | // |
Damotclese | 0:1ebe7d222470 | 20 | // ---------------------------------------------------------------------- |
Damotclese | 0:1ebe7d222470 | 21 | |
Damotclese | 0:1ebe7d222470 | 22 | const char * pch_firstMessage = "Test signal on PA_5"; |
Damotclese | 2:cbcf2695a4a1 | 23 | const char * pch_secondMessage = "Laser Scan on PC_1"; |
Damotclese | 2:cbcf2695a4a1 | 24 | const char * pch_thirdMessage = "TEC signal on PC_3"; |
Damotclese | 2:cbcf2695a4a1 | 25 | |
Damotclese | 2:cbcf2695a4a1 | 26 | // Instantiate a digitial input mapped as our push button |
Damotclese | 2:cbcf2695a4a1 | 27 | static DigitalIn st_pushButton(PA_0); |
Damotclese | 0:1ebe7d222470 | 28 | |
Damotclese | 2:cbcf2695a4a1 | 29 | // We must see the button down for a period of time, we |
Damotclese | 2:cbcf2695a4a1 | 30 | // do a debounce even though the class may do one already |
Damotclese | 2:cbcf2695a4a1 | 31 | static uint16_t u16_buttonDownCount; |
Damotclese | 2:cbcf2695a4a1 | 32 | |
Damotclese | 2:cbcf2695a4a1 | 33 | // This flag informs the laser scan input module whether |
Damotclese | 2:cbcf2695a4a1 | 34 | // it is permitted to plot the scan input or not |
Damotclese | 2:cbcf2695a4a1 | 35 | static bool b_allowPlotting; |
Damotclese | 2:cbcf2695a4a1 | 36 | |
Damotclese | 2:cbcf2695a4a1 | 37 | // We store the scan length in milliseconds offered to this |
Damotclese | 2:cbcf2695a4a1 | 38 | // module by the laser scanner, and we store the TEC voltage |
Damotclese | 2:cbcf2695a4a1 | 39 | // offered by the TEC scanner |
Damotclese | 2:cbcf2695a4a1 | 40 | static uint16_t u16_scanLength; |
Damotclese | 2:cbcf2695a4a1 | 41 | static uint16_t u16_TECVoltage; |
Damotclese | 2:cbcf2695a4a1 | 42 | static uint16_t u16_scanCount; |
Damotclese | 2:cbcf2695a4a1 | 43 | |
Damotclese | 2:cbcf2695a4a1 | 44 | // We talk to Jenkins through an RS232 serial interface |
Damotclese | 2:cbcf2695a4a1 | 45 | static Serial st_Serial1(USE_SERIAL_TX, USE_SERIAL_RX); |
Damotclese | 2:cbcf2695a4a1 | 46 | |
Damotclese | 0:1ebe7d222470 | 47 | // ---------------------------------------------------------------------- |
Damotclese | 0:1ebe7d222470 | 48 | // Define global data storage which we will export |
Damotclese | 0:1ebe7d222470 | 49 | // |
Damotclese | 0:1ebe7d222470 | 50 | // ---------------------------------------------------------------------- |
Damotclese | 0:1ebe7d222470 | 51 | |
Damotclese | 0:1ebe7d222470 | 52 | // We will be using the LCD so instantiate an object locally |
Damotclese | 0:1ebe7d222470 | 53 | LCD_DISCO_F429ZI st_lcd; |
Damotclese | 0:1ebe7d222470 | 54 | |
Damotclese | 0:1ebe7d222470 | 55 | // We will be using the touch screen so instantiate an object |
Damotclese | 0:1ebe7d222470 | 56 | TS_DISCO_F429ZI st_touchScreen; |
Damotclese | 0:1ebe7d222470 | 57 | |
Damotclese | 0:1ebe7d222470 | 58 | // ---------------------------------------------------------------------- |
Damotclese | 0:1ebe7d222470 | 59 | // MainInit() |
Damotclese | 0:1ebe7d222470 | 60 | // |
Damotclese | 0:1ebe7d222470 | 61 | // ---------------------------------------------------------------------- |
Damotclese | 0:1ebe7d222470 | 62 | static void MainInit(void) |
Damotclese | 0:1ebe7d222470 | 63 | { |
Damotclese | 2:cbcf2695a4a1 | 64 | // Initialize locally-held data |
Damotclese | 2:cbcf2695a4a1 | 65 | u16_buttonDownCount = 0; |
Damotclese | 2:cbcf2695a4a1 | 66 | b_allowPlotting = true; |
Damotclese | 2:cbcf2695a4a1 | 67 | u16_scanLength = 0; |
Damotclese | 2:cbcf2695a4a1 | 68 | u16_TECVoltage = 0; |
Damotclese | 2:cbcf2695a4a1 | 69 | u16_scanCount = 0; |
Damotclese | 2:cbcf2695a4a1 | 70 | |
Damotclese | 0:1ebe7d222470 | 71 | // Bring the LCD up |
Damotclese | 0:1ebe7d222470 | 72 | st_lcd.Clear(LCD_COLOR_WHITE); |
Damotclese | 0:1ebe7d222470 | 73 | |
Damotclese | 0:1ebe7d222470 | 74 | // Set the default text color |
Damotclese | 0:1ebe7d222470 | 75 | st_lcd.SetTextColor(LCD_COLOR_BLUE); |
Damotclese | 0:1ebe7d222470 | 76 | |
Damotclese | 0:1ebe7d222470 | 77 | // Set the background color |
Damotclese | 0:1ebe7d222470 | 78 | st_lcd.SetBackColor(LCD_COLOR_WHITE); |
Damotclese | 0:1ebe7d222470 | 79 | |
Damotclese | 0:1ebe7d222470 | 80 | // Set the default font size |
Damotclese | 0:1ebe7d222470 | 81 | BSP_LCD_SetFont(&Font16); |
Damotclese | 2:cbcf2695a4a1 | 82 | |
Damotclese | 2:cbcf2695a4a1 | 83 | // Set the push button to not have an internal pull-up or down |
Damotclese | 2:cbcf2695a4a1 | 84 | st_pushButton.mode(PullNone); |
Damotclese | 2:cbcf2695a4a1 | 85 | |
Damotclese | 2:cbcf2695a4a1 | 86 | // We configure the serial interface |
Damotclese | 2:cbcf2695a4a1 | 87 | st_Serial1.baud(115200); |
Damotclese | 2:cbcf2695a4a1 | 88 | st_Serial1.format(8, SerialBase::None, 1); |
Damotclese | 2:cbcf2695a4a1 | 89 | } |
Damotclese | 2:cbcf2695a4a1 | 90 | |
Damotclese | 2:cbcf2695a4a1 | 91 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 92 | // |
Damotclese | 2:cbcf2695a4a1 | 93 | // |
Damotclese | 2:cbcf2695a4a1 | 94 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 95 | static void MainCheckInbound(void) |
Damotclese | 2:cbcf2695a4a1 | 96 | { |
Damotclese | 2:cbcf2695a4a1 | 97 | // See if there is inbound serial data |
Damotclese | 2:cbcf2695a4a1 | 98 | if (st_Serial1.readable()) |
Damotclese | 2:cbcf2695a4a1 | 99 | { |
Damotclese | 2:cbcf2695a4a1 | 100 | |
Damotclese | 2:cbcf2695a4a1 | 101 | } |
Damotclese | 2:cbcf2695a4a1 | 102 | } |
Damotclese | 2:cbcf2695a4a1 | 103 | |
Damotclese | 2:cbcf2695a4a1 | 104 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 105 | // |
Damotclese | 2:cbcf2695a4a1 | 106 | // |
Damotclese | 2:cbcf2695a4a1 | 107 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 108 | static void MainTransmitOutput(uint8_t * pu8_thisFrame, uint16_t u16_thisCount) |
Damotclese | 2:cbcf2695a4a1 | 109 | { |
Damotclese | 2:cbcf2695a4a1 | 110 | st_Serial1.write(pu8_thisFrame, u16_thisCount, NULL); |
Damotclese | 2:cbcf2695a4a1 | 111 | } |
Damotclese | 2:cbcf2695a4a1 | 112 | |
Damotclese | 2:cbcf2695a4a1 | 113 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 114 | // LaserMonMainInformScanInformation() |
Damotclese | 2:cbcf2695a4a1 | 115 | // |
Damotclese | 2:cbcf2695a4a1 | 116 | // |
Damotclese | 2:cbcf2695a4a1 | 117 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 118 | void LaserMonMainInformScanInformation(uint16_t u16_thisScanLength, uint16_t u16_thisScanCount) |
Damotclese | 2:cbcf2695a4a1 | 119 | { |
Damotclese | 2:cbcf2695a4a1 | 120 | // If we arte displaying information, the scan gets slowed down |
Damotclese | 2:cbcf2695a4a1 | 121 | // while we print the information to the screen, making the scan |
Damotclese | 2:cbcf2695a4a1 | 122 | // information inaccurate. To avoid displaying inaccurate values |
Damotclese | 2:cbcf2695a4a1 | 123 | // we refrain from storing the scan rate while displaying the |
Damotclese | 2:cbcf2695a4a1 | 124 | // information |
Damotclese | 2:cbcf2695a4a1 | 125 | if (true == b_allowPlotting) |
Damotclese | 2:cbcf2695a4a1 | 126 | { |
Damotclese | 2:cbcf2695a4a1 | 127 | // Allow the scan information to get updated |
Damotclese | 2:cbcf2695a4a1 | 128 | u16_scanLength = u16_thisScanLength; |
Damotclese | 2:cbcf2695a4a1 | 129 | } |
Damotclese | 2:cbcf2695a4a1 | 130 | |
Damotclese | 2:cbcf2695a4a1 | 131 | // Always store the scan counter value |
Damotclese | 2:cbcf2695a4a1 | 132 | u16_scanCount = u16_thisScanCount; |
Damotclese | 2:cbcf2695a4a1 | 133 | } |
Damotclese | 2:cbcf2695a4a1 | 134 | |
Damotclese | 2:cbcf2695a4a1 | 135 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 136 | // LaserMonMainInformTECVoltage() |
Damotclese | 2:cbcf2695a4a1 | 137 | // |
Damotclese | 2:cbcf2695a4a1 | 138 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 139 | void LaserMonMainInformTECVoltage(uint16_t u16_thisVoltage) |
Damotclese | 2:cbcf2695a4a1 | 140 | { |
Damotclese | 2:cbcf2695a4a1 | 141 | u16_TECVoltage = u16_thisVoltage; |
Damotclese | 2:cbcf2695a4a1 | 142 | } |
Damotclese | 2:cbcf2695a4a1 | 143 | |
Damotclese | 2:cbcf2695a4a1 | 144 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 145 | // MainReportValues() |
Damotclese | 2:cbcf2695a4a1 | 146 | // |
Damotclese | 2:cbcf2695a4a1 | 147 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 148 | static void MainReportValues(void) |
Damotclese | 2:cbcf2695a4a1 | 149 | { |
Damotclese | 2:cbcf2695a4a1 | 150 | char pch_holdMessage[101] = { 0 }; |
Damotclese | 2:cbcf2695a4a1 | 151 | |
Damotclese | 2:cbcf2695a4a1 | 152 | (void)sprintf(pch_holdMessage, "Scan duration %u", u16_scanLength); |
Damotclese | 2:cbcf2695a4a1 | 153 | st_lcd.DisplayStringAt(1, LINE(1), (uint8_t *)pch_holdMessage, LEFT_MODE); |
Damotclese | 2:cbcf2695a4a1 | 154 | |
Damotclese | 2:cbcf2695a4a1 | 155 | (void)sprintf(pch_holdMessage, "Scan count %u", u16_scanCount); |
Damotclese | 2:cbcf2695a4a1 | 156 | st_lcd.DisplayStringAt(1, LINE(2), (uint8_t *)pch_holdMessage, LEFT_MODE); |
Damotclese | 2:cbcf2695a4a1 | 157 | |
Damotclese | 2:cbcf2695a4a1 | 158 | (void)sprintf(pch_holdMessage, "TEC voltage %1.02f", (float)u16_TECVoltage / 100.0f); |
Damotclese | 2:cbcf2695a4a1 | 159 | st_lcd.DisplayStringAt(1, LINE(3), (uint8_t *)pch_holdMessage, LEFT_MODE); |
Damotclese | 2:cbcf2695a4a1 | 160 | |
Damotclese | 2:cbcf2695a4a1 | 161 | (void)sprintf(pch_holdMessage, "TEC average %1.02f", (float)TECGetLastTenAverage() / 100.0f); |
Damotclese | 2:cbcf2695a4a1 | 162 | st_lcd.DisplayStringAt(1, LINE(4), (uint8_t *)pch_holdMessage, LEFT_MODE); |
Damotclese | 2:cbcf2695a4a1 | 163 | |
Damotclese | 2:cbcf2695a4a1 | 164 | // Build a report for Jenkins or anything else to monitor |
Damotclese | 2:cbcf2695a4a1 | 165 | (void)sprintf(pch_holdMessage, "%u,%1.02f,%1.02f,%u%c%c", |
Damotclese | 2:cbcf2695a4a1 | 166 | u16_scanLength, |
Damotclese | 2:cbcf2695a4a1 | 167 | ((float)u16_TECVoltage / 100.0f), |
Damotclese | 2:cbcf2695a4a1 | 168 | ((float)TECGetLastTenAverage() / 100.0f), |
Damotclese | 2:cbcf2695a4a1 | 169 | u16_scanCount, |
Damotclese | 2:cbcf2695a4a1 | 170 | 0x0d, 0x0a); |
Damotclese | 2:cbcf2695a4a1 | 171 | |
Damotclese | 2:cbcf2695a4a1 | 172 | // Send that report out the serial interface |
Damotclese | 2:cbcf2695a4a1 | 173 | MainTransmitOutput((uint8_t *)pch_holdMessage, (uint16_t)strlen(pch_holdMessage)); |
Damotclese | 2:cbcf2695a4a1 | 174 | } |
Damotclese | 2:cbcf2695a4a1 | 175 | |
Damotclese | 2:cbcf2695a4a1 | 176 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 177 | // MainHandleButtonDown() |
Damotclese | 2:cbcf2695a4a1 | 178 | // |
Damotclese | 2:cbcf2695a4a1 | 179 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 180 | static void MainHandleButtonDown(void) |
Damotclese | 2:cbcf2695a4a1 | 181 | { |
Damotclese | 2:cbcf2695a4a1 | 182 | // Are we currently allowing the laser scan input to be plotted? |
Damotclese | 2:cbcf2695a4a1 | 183 | if (true == b_allowPlotting) |
Damotclese | 2:cbcf2695a4a1 | 184 | { |
Damotclese | 2:cbcf2695a4a1 | 185 | // Flag the fact that we are not allowing the plot |
Damotclese | 2:cbcf2695a4a1 | 186 | b_allowPlotting = false; |
Damotclese | 2:cbcf2695a4a1 | 187 | |
Damotclese | 2:cbcf2695a4a1 | 188 | // Make sure that the display is cleared |
Damotclese | 2:cbcf2695a4a1 | 189 | st_lcd.Clear(LCD_COLOR_WHITE); |
Damotclese | 2:cbcf2695a4a1 | 190 | |
Damotclese | 2:cbcf2695a4a1 | 191 | // Report the lasr scan and TEC voltage values |
Damotclese | 2:cbcf2695a4a1 | 192 | MainReportValues(); |
Damotclese | 2:cbcf2695a4a1 | 193 | } |
Damotclese | 2:cbcf2695a4a1 | 194 | else |
Damotclese | 2:cbcf2695a4a1 | 195 | { |
Damotclese | 2:cbcf2695a4a1 | 196 | // Clear the display |
Damotclese | 2:cbcf2695a4a1 | 197 | st_lcd.Clear(LCD_COLOR_WHITE); |
Damotclese | 2:cbcf2695a4a1 | 198 | |
Damotclese | 2:cbcf2695a4a1 | 199 | // Clear the flag so that the plot of the scan may be displayed |
Damotclese | 2:cbcf2695a4a1 | 200 | b_allowPlotting = true; |
Damotclese | 2:cbcf2695a4a1 | 201 | } |
Damotclese | 2:cbcf2695a4a1 | 202 | } |
Damotclese | 2:cbcf2695a4a1 | 203 | |
Damotclese | 2:cbcf2695a4a1 | 204 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 205 | // MainThread() |
Damotclese | 2:cbcf2695a4a1 | 206 | // |
Damotclese | 2:cbcf2695a4a1 | 207 | // ---------------------------------------------------------------------- |
Damotclese | 2:cbcf2695a4a1 | 208 | static bool MainThread(void) |
Damotclese | 2:cbcf2695a4a1 | 209 | { |
Damotclese | 2:cbcf2695a4a1 | 210 | bool b_restartOneSecondTimer = false; |
Damotclese | 2:cbcf2695a4a1 | 211 | |
Damotclese | 2:cbcf2695a4a1 | 212 | // Acquire / poll the state of the push button |
Damotclese | 2:cbcf2695a4a1 | 213 | int i_buttonState = st_pushButton.read(); |
Damotclese | 2:cbcf2695a4a1 | 214 | |
Damotclese | 2:cbcf2695a4a1 | 215 | // Is the button down? |
Damotclese | 2:cbcf2695a4a1 | 216 | if (1 == i_buttonState) |
Damotclese | 2:cbcf2695a4a1 | 217 | { |
Damotclese | 2:cbcf2695a4a1 | 218 | // The button is not down, was the button down before? |
Damotclese | 2:cbcf2695a4a1 | 219 | // We need to see if the button is down for 10 milliseconds |
Damotclese | 2:cbcf2695a4a1 | 220 | // before we agree that the button is down |
Damotclese | 2:cbcf2695a4a1 | 221 | if (u16_buttonDownCount < 10) |
Damotclese | 2:cbcf2695a4a1 | 222 | { |
Damotclese | 2:cbcf2695a4a1 | 223 | if (10 == ++u16_buttonDownCount) |
Damotclese | 2:cbcf2695a4a1 | 224 | { |
Damotclese | 2:cbcf2695a4a1 | 225 | // The button has been held down long enough |
Damotclese | 2:cbcf2695a4a1 | 226 | MainHandleButtonDown(); |
Damotclese | 2:cbcf2695a4a1 | 227 | |
Damotclese | 2:cbcf2695a4a1 | 228 | // We want to have the one second timer restarted |
Damotclese | 2:cbcf2695a4a1 | 229 | b_restartOneSecondTimer = true; |
Damotclese | 2:cbcf2695a4a1 | 230 | } |
Damotclese | 2:cbcf2695a4a1 | 231 | } |
Damotclese | 2:cbcf2695a4a1 | 232 | } |
Damotclese | 2:cbcf2695a4a1 | 233 | else |
Damotclese | 2:cbcf2695a4a1 | 234 | { |
Damotclese | 2:cbcf2695a4a1 | 235 | // The button is not down so clear the down counter |
Damotclese | 2:cbcf2695a4a1 | 236 | u16_buttonDownCount = 0; |
Damotclese | 2:cbcf2695a4a1 | 237 | } |
Damotclese | 2:cbcf2695a4a1 | 238 | |
Damotclese | 2:cbcf2695a4a1 | 239 | // See if there is inbouns serial data to be processed |
Damotclese | 2:cbcf2695a4a1 | 240 | MainCheckInbound(); |
Damotclese | 2:cbcf2695a4a1 | 241 | |
Damotclese | 2:cbcf2695a4a1 | 242 | // Indicate whether we are displaying the running information or not |
Damotclese | 2:cbcf2695a4a1 | 243 | return b_restartOneSecondTimer; |
Damotclese | 0:1ebe7d222470 | 244 | } |
Damotclese | 0:1ebe7d222470 | 245 | |
Damotclese | 0:1ebe7d222470 | 246 | // ---------------------------------------------------------------------- |
Damotclese | 0:1ebe7d222470 | 247 | // main() |
Damotclese | 0:1ebe7d222470 | 248 | // |
Damotclese | 0:1ebe7d222470 | 249 | // |
Damotclese | 0:1ebe7d222470 | 250 | // ---------------------------------------------------------------------- |
Damotclese | 0:1ebe7d222470 | 251 | int main(void) |
Damotclese | 0:1ebe7d222470 | 252 | { |
Damotclese | 2:cbcf2695a4a1 | 253 | uint16_t u16_oneSecondCounter = 0; |
Damotclese | 2:cbcf2695a4a1 | 254 | bool b_restartOneSecondTimer = false; |
Damotclese | 2:cbcf2695a4a1 | 255 | |
Damotclese | 0:1ebe7d222470 | 256 | // Perform local module initialization, if any |
Damotclese | 0:1ebe7d222470 | 257 | MainInit(); |
Damotclese | 0:1ebe7d222470 | 258 | |
Damotclese | 2:cbcf2695a4a1 | 259 | // Initialize the generating of the output test signal module |
Damotclese | 0:1ebe7d222470 | 260 | TestOutputInit(); |
Damotclese | 0:1ebe7d222470 | 261 | |
Damotclese | 2:cbcf2695a4a1 | 262 | // Initialize the scanning of the the laser drive power module |
Damotclese | 0:1ebe7d222470 | 263 | ScanInputInit(); |
Damotclese | 0:1ebe7d222470 | 264 | |
Damotclese | 2:cbcf2695a4a1 | 265 | // Initialize the scanning of the TEC input and launch thread |
Damotclese | 2:cbcf2695a4a1 | 266 | TECInit(); |
Damotclese | 2:cbcf2695a4a1 | 267 | |
Damotclese | 0:1ebe7d222470 | 268 | // Display information about what signal pigs have what |
Damotclese | 2:cbcf2695a4a1 | 269 | st_lcd.DisplayStringAt(1, LINE(0), (uint8_t *)pch_firstMessage, LEFT_MODE); |
Damotclese | 2:cbcf2695a4a1 | 270 | st_lcd.DisplayStringAt(1, LINE(1), (uint8_t *)pch_secondMessage, LEFT_MODE); |
Damotclese | 2:cbcf2695a4a1 | 271 | st_lcd.DisplayStringAt(1, LINE(2), (uint8_t *)pch_thirdMessage, LEFT_MODE); |
Damotclese | 0:1ebe7d222470 | 272 | |
Damotclese | 0:1ebe7d222470 | 273 | // Go in to a forever loop for the main thread which does nothing |
Damotclese | 0:1ebe7d222470 | 274 | while(true) |
Damotclese | 0:1ebe7d222470 | 275 | { |
Damotclese | 1:b9d4b9b8884c | 276 | // Wait for 1 millisecond |
Damotclese | 1:b9d4b9b8884c | 277 | wait_us(899); |
Damotclese | 2:cbcf2695a4a1 | 278 | |
Damotclese | 2:cbcf2695a4a1 | 279 | // Instead of launching threads whose timing is a problem, |
Damotclese | 2:cbcf2695a4a1 | 280 | // we merely call the once-a-millisecond "thread" functions |
Damotclese | 2:cbcf2695a4a1 | 281 | // to drive the test signal out and the laser scan signal in |
Damotclese | 1:b9d4b9b8884c | 282 | TestOutputThread(); |
Damotclese | 2:cbcf2695a4a1 | 283 | ScanInputThread(b_allowPlotting); |
Damotclese | 2:cbcf2695a4a1 | 284 | b_restartOneSecondTimer = MainThread(); |
Damotclese | 2:cbcf2695a4a1 | 285 | TECThread(); |
Damotclese | 2:cbcf2695a4a1 | 286 | |
Damotclese | 2:cbcf2695a4a1 | 287 | // Have we just started displaying collected information? |
Damotclese | 2:cbcf2695a4a1 | 288 | if (true == b_restartOneSecondTimer) |
Damotclese | 2:cbcf2695a4a1 | 289 | { |
Damotclese | 2:cbcf2695a4a1 | 290 | // Yes, so we will count down the timer |
Damotclese | 2:cbcf2695a4a1 | 291 | u16_oneSecondCounter = 1000; |
Damotclese | 2:cbcf2695a4a1 | 292 | } |
Damotclese | 2:cbcf2695a4a1 | 293 | else |
Damotclese | 2:cbcf2695a4a1 | 294 | { |
Damotclese | 2:cbcf2695a4a1 | 295 | // In case the one second timer is running, stop it |
Damotclese | 2:cbcf2695a4a1 | 296 | b_restartOneSecondTimer = 0; |
Damotclese | 2:cbcf2695a4a1 | 297 | } |
Damotclese | 2:cbcf2695a4a1 | 298 | |
Damotclese | 2:cbcf2695a4a1 | 299 | // Is the one second counter running? |
Damotclese | 2:cbcf2695a4a1 | 300 | if (u16_oneSecondCounter > 0 && false == b_allowPlotting) |
Damotclese | 2:cbcf2695a4a1 | 301 | { |
Damotclese | 2:cbcf2695a4a1 | 302 | // Count down the one second timer and see if it's expired |
Damotclese | 2:cbcf2695a4a1 | 303 | if (0 == --u16_oneSecondCounter) |
Damotclese | 2:cbcf2695a4a1 | 304 | { |
Damotclese | 2:cbcf2695a4a1 | 305 | // Report the current values again |
Damotclese | 2:cbcf2695a4a1 | 306 | MainReportValues(); |
Damotclese | 2:cbcf2695a4a1 | 307 | |
Damotclese | 2:cbcf2695a4a1 | 308 | // Restart the one second timer |
Damotclese | 2:cbcf2695a4a1 | 309 | u16_oneSecondCounter = 1000; |
Damotclese | 2:cbcf2695a4a1 | 310 | } |
Damotclese | 2:cbcf2695a4a1 | 311 | } |
Damotclese | 0:1ebe7d222470 | 312 | } |
Damotclese | 0:1ebe7d222470 | 313 | } |
Damotclese | 0:1ebe7d222470 | 314 | |
Damotclese | 0:1ebe7d222470 | 315 | // End of file |
Damotclese | 0:1ebe7d222470 | 316 |