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

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?

UserRevisionLine numberNew 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