embed simulator

Dependencies:   mbed C12832

Committer:
kwstasfane1
Date:
Mon Apr 19 22:28:21 2021 +0000
Revision:
0:167e85b50250
Child:
3:e3e73c36a565
Mbed implementation simulator only;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kwstasfane1 0:167e85b50250 1 /*
kwstasfane1 0:167e85b50250 2 Created by Konstantinos Fane
kwstasfane1 0:167e85b50250 3 copy this code to Mbed online simulator
kwstasfane1 0:167e85b50250 4 to run the designed application
kwstasfane1 0:167e85b50250 5 */
kwstasfane1 0:167e85b50250 6
kwstasfane1 0:167e85b50250 7 #include "mbed.h"
kwstasfane1 0:167e85b50250 8 #include <string>
kwstasfane1 0:167e85b50250 9 #include "C12832.h"
kwstasfane1 0:167e85b50250 10
kwstasfane1 0:167e85b50250 11 // LCD display
kwstasfane1 0:167e85b50250 12 C12832 lcd(p5, p7, p6, p8, p11);
kwstasfane1 0:167e85b50250 13
kwstasfane1 0:167e85b50250 14 //dummy measurement values
kwstasfane1 0:167e85b50250 15 float m_freq_hz; // = 120730.546423; //*10^6 Hz
kwstasfane1 0:167e85b50250 16 float m_t_interval_ms = 988.056475;
kwstasfane1 0:167e85b50250 17
kwstasfane1 0:167e85b50250 18 //result to be displayed
kwstasfane1 0:167e85b50250 19 float m_result;
kwstasfane1 0:167e85b50250 20
kwstasfane1 0:167e85b50250 21 //variables used for frequency, period and time interval measruements
kwstasfane1 0:167e85b50250 22 float count1 = 0.0;
kwstasfane1 0:167e85b50250 23
kwstasfane1 0:167e85b50250 24 const char* range_scale [3][3] = {
kwstasfane1 0:167e85b50250 25 {"MHz","KHz","Hz"},
kwstasfane1 0:167e85b50250 26 {"ms","ms","s"},
kwstasfane1 0:167e85b50250 27 {"ms","ms","s"}
kwstasfane1 0:167e85b50250 28 };
kwstasfane1 0:167e85b50250 29
kwstasfane1 0:167e85b50250 30 /* flag to hold which measurement mode to display
kwstasfane1 0:167e85b50250 31 * 0 = Frequency Measurement
kwstasfane1 0:167e85b50250 32 * 1 = Period Measurement
kwstasfane1 0:167e85b50250 33 * 2 = Time interval Measurement
kwstasfane1 0:167e85b50250 34 * to match the index of message display arrays */
kwstasfane1 0:167e85b50250 35 int dsp_mode = 0;
kwstasfane1 0:167e85b50250 36 const char* mode_msg [] = {"Frequency", "Period", "Time Interval"};
kwstasfane1 0:167e85b50250 37
kwstasfane1 0:167e85b50250 38 /* flag to hold which measurement range to display
kwstasfane1 0:167e85b50250 39 * 0 = High Range
kwstasfane1 0:167e85b50250 40 * 1 = Medium Range
kwstasfane1 0:167e85b50250 41 * 2 = Low Range */
kwstasfane1 0:167e85b50250 42 int dsp_range = 0;
kwstasfane1 0:167e85b50250 43 const char* range_msg [] = {"High Resolution", "Medium Resolution", "Low Resolution"};
kwstasfane1 0:167e85b50250 44
kwstasfane1 0:167e85b50250 45 int dsp_time_interval = 0; //0=R-R, 1=F-F, 2=R-F, 3=F-R
kwstasfane1 0:167e85b50250 46
kwstasfane1 0:167e85b50250 47 //Interrupt to be used in actual implementation to read the input square wave signal
kwstasfane1 0:167e85b50250 48 //InterruptIn squareIN(p#) //# = the pin number where the actual signal would be conected to
kwstasfane1 0:167e85b50250 49
kwstasfane1 0:167e85b50250 50 InterruptIn squareIN(p17);
kwstasfane1 0:167e85b50250 51
kwstasfane1 0:167e85b50250 52 //User interface measurement mode and range selection buttons
kwstasfane1 0:167e85b50250 53 InterruptIn mode(p12);
kwstasfane1 0:167e85b50250 54 InterruptIn range(p13);
kwstasfane1 0:167e85b50250 55 InterruptIn time_interval(p14);
kwstasfane1 0:167e85b50250 56
kwstasfane1 0:167e85b50250 57 //For simulation purposes only, multiplier for the count1, to achieve higher simulated frequencies
kwstasfane1 0:167e85b50250 58 InterruptIn incr_freq(p15);
kwstasfane1 0:167e85b50250 59 InterruptIn decr_freq(p16);
kwstasfane1 0:167e85b50250 60 float multi = 1.0;
kwstasfane1 0:167e85b50250 61 void incr();
kwstasfane1 0:167e85b50250 62 void decr();
kwstasfane1 0:167e85b50250 63
kwstasfane1 0:167e85b50250 64 //user defined functions to implement the user interface
kwstasfane1 0:167e85b50250 65 void user_interface_disp();
kwstasfane1 0:167e85b50250 66 void mode_select();
kwstasfane1 0:167e85b50250 67 void range_select();
kwstasfane1 0:167e85b50250 68 void time_interval_type_select();
kwstasfane1 0:167e85b50250 69 void result_calculator();
kwstasfane1 0:167e85b50250 70
kwstasfane1 0:167e85b50250 71 //interrupt service routines
kwstasfane1 0:167e85b50250 72 void counter1_isr();
kwstasfane1 0:167e85b50250 73 void freq_calc_isr();
kwstasfane1 0:167e85b50250 74
kwstasfane1 0:167e85b50250 75 //Timeout task2;
kwstasfane1 0:167e85b50250 76 Ticker tick1; //generate a tick
kwstasfane1 0:167e85b50250 77 Ticker freq1; //generate the 1s interrupt, to measure frequency (direct frequency measurement)
kwstasfane1 0:167e85b50250 78
kwstasfane1 0:167e85b50250 79 int main()
kwstasfane1 0:167e85b50250 80 {
kwstasfane1 0:167e85b50250 81
kwstasfane1 0:167e85b50250 82 //ticker, where it is done periodically, timeout only does it once
kwstasfane1 0:167e85b50250 83 //Direct frequency measurement, measures the number of rising edges every time they occur
kwstasfane1 0:167e85b50250 84 squareIN.rise(&counter1_isr);
kwstasfane1 0:167e85b50250 85 //squareIN.fall(&)
kwstasfane1 0:167e85b50250 86 //For simulation purposes only
kwstasfane1 0:167e85b50250 87 //tick1.attach_us(&counter1_isr, 1); //generate a tick every 100 us = 0.0001s 1us = 100000 s (period)
kwstasfane1 0:167e85b50250 88
kwstasfane1 0:167e85b50250 89 freq1.attach(&freq_calc_isr, 1); //measure the numbed of ticks per 1 second
kwstasfane1 0:167e85b50250 90
kwstasfane1 0:167e85b50250 91
kwstasfane1 0:167e85b50250 92 //interrupt routine for mode and range selection user input
kwstasfane1 0:167e85b50250 93 mode.rise(&mode_select);
kwstasfane1 0:167e85b50250 94 range.rise(&range_select);
kwstasfane1 0:167e85b50250 95 time_interval.rise(&time_interval_type_select);
kwstasfane1 0:167e85b50250 96
kwstasfane1 0:167e85b50250 97 //interrupt routine for multiplier increase/decrease user input
kwstasfane1 0:167e85b50250 98 incr_freq.rise(&incr);
kwstasfane1 0:167e85b50250 99 decr_freq.rise(&decr);
kwstasfane1 0:167e85b50250 100
kwstasfane1 0:167e85b50250 101 while(1)
kwstasfane1 0:167e85b50250 102 {
kwstasfane1 0:167e85b50250 103 user_interface_disp();
kwstasfane1 0:167e85b50250 104 wait_ms(0.001);
kwstasfane1 0:167e85b50250 105 }
kwstasfane1 0:167e85b50250 106
kwstasfane1 0:167e85b50250 107
kwstasfane1 0:167e85b50250 108 }
kwstasfane1 0:167e85b50250 109
kwstasfane1 0:167e85b50250 110 //ISR to count the occurences of incoming signal rising edges
kwstasfane1 0:167e85b50250 111 void counter1_isr()
kwstasfane1 0:167e85b50250 112 {
kwstasfane1 0:167e85b50250 113 //increment counter by 1
kwstasfane1 0:167e85b50250 114 count1 = count1 + 1;
kwstasfane1 0:167e85b50250 115 }
kwstasfane1 0:167e85b50250 116
kwstasfane1 0:167e85b50250 117 //ISR to calculate the period of incoming signal, every 1 second
kwstasfane1 0:167e85b50250 118 void freq_calc_isr()
kwstasfane1 0:167e85b50250 119 {
kwstasfane1 0:167e85b50250 120 //m_freq_hz = count1;
kwstasfane1 0:167e85b50250 121 m_freq_hz = multi * count1;
kwstasfane1 0:167e85b50250 122 count1 = 0;
kwstasfane1 0:167e85b50250 123 }
kwstasfane1 0:167e85b50250 124
kwstasfane1 0:167e85b50250 125 //simulation only
kwstasfane1 0:167e85b50250 126 void incr()
kwstasfane1 0:167e85b50250 127 {
kwstasfane1 0:167e85b50250 128 multi = multi + 1500.5;
kwstasfane1 0:167e85b50250 129 }
kwstasfane1 0:167e85b50250 130
kwstasfane1 0:167e85b50250 131 void decr()
kwstasfane1 0:167e85b50250 132 {
kwstasfane1 0:167e85b50250 133 multi = multi - 100.5;
kwstasfane1 0:167e85b50250 134 if (multi<10.5)
kwstasfane1 0:167e85b50250 135 {
kwstasfane1 0:167e85b50250 136 multi = 0.5;
kwstasfane1 0:167e85b50250 137 }
kwstasfane1 0:167e85b50250 138 }
kwstasfane1 0:167e85b50250 139
kwstasfane1 0:167e85b50250 140 void user_interface_disp()
kwstasfane1 0:167e85b50250 141 {
kwstasfane1 0:167e85b50250 142
kwstasfane1 0:167e85b50250 143 //At startup just print a few things on the lcd and then enter a loop until the user does something
kwstasfane1 0:167e85b50250 144 lcd.cls(); //clear screen
kwstasfane1 0:167e85b50250 145 lcd.locate(1,1);
kwstasfane1 0:167e85b50250 146 lcd.printf("Mode: %s", mode_msg[dsp_mode]);
kwstasfane1 0:167e85b50250 147
kwstasfane1 0:167e85b50250 148 //display the type of time interval measurement if the mode is selected
kwstasfane1 0:167e85b50250 149 if(dsp_mode ==2)
kwstasfane1 0:167e85b50250 150 {
kwstasfane1 0:167e85b50250 151 lcd.locate(90,1);
kwstasfane1 0:167e85b50250 152 if(dsp_time_interval == 0)
kwstasfane1 0:167e85b50250 153 {
kwstasfane1 0:167e85b50250 154 lcd.printf("(R->R)");
kwstasfane1 0:167e85b50250 155 }
kwstasfane1 0:167e85b50250 156 else if(dsp_time_interval == 1)
kwstasfane1 0:167e85b50250 157 {
kwstasfane1 0:167e85b50250 158 lcd.printf("(F->F)");
kwstasfane1 0:167e85b50250 159 }
kwstasfane1 0:167e85b50250 160 else if(dsp_time_interval == 2)
kwstasfane1 0:167e85b50250 161 {
kwstasfane1 0:167e85b50250 162 lcd.printf("(R->F)");
kwstasfane1 0:167e85b50250 163 }
kwstasfane1 0:167e85b50250 164 else if(dsp_time_interval == 3)
kwstasfane1 0:167e85b50250 165 {
kwstasfane1 0:167e85b50250 166 lcd.printf("(F->R)");
kwstasfane1 0:167e85b50250 167 }
kwstasfane1 0:167e85b50250 168
kwstasfane1 0:167e85b50250 169 }
kwstasfane1 0:167e85b50250 170 else
kwstasfane1 0:167e85b50250 171 {
kwstasfane1 0:167e85b50250 172 //simulation only - to display the current multiplier
kwstasfane1 0:167e85b50250 173 lcd.locate(78,1);
kwstasfane1 0:167e85b50250 174 lcd.printf("(x%1.1f)",multi);
kwstasfane1 0:167e85b50250 175 }
kwstasfane1 0:167e85b50250 176
kwstasfane1 0:167e85b50250 177 lcd.locate(1,10);
kwstasfane1 0:167e85b50250 178 lcd.printf("Range: %s", range_msg[dsp_range]);
kwstasfane1 0:167e85b50250 179 lcd.locate(1,20);
kwstasfane1 0:167e85b50250 180 //call the result calculator function
kwstasfane1 0:167e85b50250 181 result_calculator();
kwstasfane1 0:167e85b50250 182
kwstasfane1 0:167e85b50250 183 }
kwstasfane1 0:167e85b50250 184
kwstasfane1 0:167e85b50250 185 void time_interval_type_select()
kwstasfane1 0:167e85b50250 186 {
kwstasfane1 0:167e85b50250 187 if (dsp_time_interval <3)
kwstasfane1 0:167e85b50250 188 {
kwstasfane1 0:167e85b50250 189 dsp_time_interval++;
kwstasfane1 0:167e85b50250 190 }
kwstasfane1 0:167e85b50250 191 else
kwstasfane1 0:167e85b50250 192 {
kwstasfane1 0:167e85b50250 193 dsp_time_interval = 0;
kwstasfane1 0:167e85b50250 194 }
kwstasfane1 0:167e85b50250 195 }
kwstasfane1 0:167e85b50250 196
kwstasfane1 0:167e85b50250 197 //Interrupt service routine to handle the measurement mode selection
kwstasfane1 0:167e85b50250 198 void mode_select()
kwstasfane1 0:167e85b50250 199 {
kwstasfane1 0:167e85b50250 200 if (dsp_mode < 2)
kwstasfane1 0:167e85b50250 201 {
kwstasfane1 0:167e85b50250 202 dsp_mode++;
kwstasfane1 0:167e85b50250 203 }
kwstasfane1 0:167e85b50250 204 else
kwstasfane1 0:167e85b50250 205 {
kwstasfane1 0:167e85b50250 206 dsp_mode = 0;
kwstasfane1 0:167e85b50250 207 }
kwstasfane1 0:167e85b50250 208 }
kwstasfane1 0:167e85b50250 209
kwstasfane1 0:167e85b50250 210 //Interrupt service routine to handle the measurement range selection
kwstasfane1 0:167e85b50250 211 void range_select()
kwstasfane1 0:167e85b50250 212 {
kwstasfane1 0:167e85b50250 213 if (dsp_range < 2)
kwstasfane1 0:167e85b50250 214 {
kwstasfane1 0:167e85b50250 215 dsp_range++;
kwstasfane1 0:167e85b50250 216 }
kwstasfane1 0:167e85b50250 217 else
kwstasfane1 0:167e85b50250 218 {
kwstasfane1 0:167e85b50250 219 dsp_range = 0;
kwstasfane1 0:167e85b50250 220 }
kwstasfane1 0:167e85b50250 221 }
kwstasfane1 0:167e85b50250 222
kwstasfane1 0:167e85b50250 223 void result_calculator()
kwstasfane1 0:167e85b50250 224 {
kwstasfane1 0:167e85b50250 225
kwstasfane1 0:167e85b50250 226 //calculate period from frequency
kwstasfane1 0:167e85b50250 227 float m_period_s = 1/m_freq_hz;
kwstasfane1 0:167e85b50250 228 const char* res[] = {""};
kwstasfane1 0:167e85b50250 229
kwstasfane1 0:167e85b50250 230 if(dsp_mode == 0) //frequency measurement
kwstasfane1 0:167e85b50250 231 {
kwstasfane1 0:167e85b50250 232 if(dsp_range == 0) //High resolution (MHz)
kwstasfane1 0:167e85b50250 233 {
kwstasfane1 0:167e85b50250 234 m_result = m_freq_hz/1000000;
kwstasfane1 0:167e85b50250 235 if(m_result <= 10.001)
kwstasfane1 0:167e85b50250 236 {
kwstasfane1 0:167e85b50250 237 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 238 *res="%3.3f %s";
kwstasfane1 0:167e85b50250 239 }
kwstasfane1 0:167e85b50250 240 else
kwstasfane1 0:167e85b50250 241 {
kwstasfane1 0:167e85b50250 242 *res="Out-of-range... '>10 MHz !'";
kwstasfane1 0:167e85b50250 243 }
kwstasfane1 0:167e85b50250 244
kwstasfane1 0:167e85b50250 245 }
kwstasfane1 0:167e85b50250 246 else if(dsp_range == 1) //medium resolution (KHz)
kwstasfane1 0:167e85b50250 247 {
kwstasfane1 0:167e85b50250 248 m_result = m_freq_hz/1000;
kwstasfane1 0:167e85b50250 249 if(m_result <= 100.001)
kwstasfane1 0:167e85b50250 250 {
kwstasfane1 0:167e85b50250 251 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 252 *res="%3.3f %s";
kwstasfane1 0:167e85b50250 253 }
kwstasfane1 0:167e85b50250 254 else
kwstasfane1 0:167e85b50250 255 {
kwstasfane1 0:167e85b50250 256 *res="Out-of-range... '>100 KHz !'";
kwstasfane1 0:167e85b50250 257 }
kwstasfane1 0:167e85b50250 258 }
kwstasfane1 0:167e85b50250 259 else //low resolution (Hz)
kwstasfane1 0:167e85b50250 260 {
kwstasfane1 0:167e85b50250 261 m_result = m_freq_hz;
kwstasfane1 0:167e85b50250 262 if(m_result <= 100.001)
kwstasfane1 0:167e85b50250 263 {
kwstasfane1 0:167e85b50250 264 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 265 *res="%3.3f %s";
kwstasfane1 0:167e85b50250 266 }
kwstasfane1 0:167e85b50250 267 else
kwstasfane1 0:167e85b50250 268 {
kwstasfane1 0:167e85b50250 269 *res="Out-of-range... '>100 Hz !'";
kwstasfane1 0:167e85b50250 270 }
kwstasfane1 0:167e85b50250 271
kwstasfane1 0:167e85b50250 272 }
kwstasfane1 0:167e85b50250 273
kwstasfane1 0:167e85b50250 274 /* '*res' assignment was moved inside the ifs, to that in case the current
kwstasfane1 0:167e85b50250 275 nuber to be displayed is higher that acceptable upper limit, to delete
kwstasfane1 0:167e85b50250 276 the displayed measurement, and show warning message*/
kwstasfane1 0:167e85b50250 277
kwstasfane1 0:167e85b50250 278 }
kwstasfane1 0:167e85b50250 279 else if (dsp_mode == 1) //period measurement
kwstasfane1 0:167e85b50250 280 {
kwstasfane1 0:167e85b50250 281 if(dsp_range == 0) //High resolution (2.000 +- 0.0001 ms)
kwstasfane1 0:167e85b50250 282 {
kwstasfane1 0:167e85b50250 283 m_result = m_period_s*1000;
kwstasfane1 0:167e85b50250 284 if(m_result <= 2.0001)
kwstasfane1 0:167e85b50250 285 {
kwstasfane1 0:167e85b50250 286 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 287 *res="%1.4f %s";
kwstasfane1 0:167e85b50250 288 }
kwstasfane1 0:167e85b50250 289 else
kwstasfane1 0:167e85b50250 290 {
kwstasfane1 0:167e85b50250 291 *res="Out-of-range... '>2.000 ms !'";
kwstasfane1 0:167e85b50250 292 }
kwstasfane1 0:167e85b50250 293 }
kwstasfane1 0:167e85b50250 294 else if(dsp_range == 1) //medium resolution (20.00 +- 0.01 ms)
kwstasfane1 0:167e85b50250 295 {
kwstasfane1 0:167e85b50250 296 m_result = m_period_s*1000;
kwstasfane1 0:167e85b50250 297 if(m_result <= 20.01)
kwstasfane1 0:167e85b50250 298 {
kwstasfane1 0:167e85b50250 299 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 300 *res="%2.2f %s";
kwstasfane1 0:167e85b50250 301 }
kwstasfane1 0:167e85b50250 302 else
kwstasfane1 0:167e85b50250 303 {
kwstasfane1 0:167e85b50250 304 *res="Out-of-range... '>20.00 ms !'";
kwstasfane1 0:167e85b50250 305 }
kwstasfane1 0:167e85b50250 306 }
kwstasfane1 0:167e85b50250 307 else //low resolution (2.000 +- 0.001 s)
kwstasfane1 0:167e85b50250 308 {
kwstasfane1 0:167e85b50250 309 m_result = m_period_s;
kwstasfane1 0:167e85b50250 310 if(m_result <= 2.001)
kwstasfane1 0:167e85b50250 311 {
kwstasfane1 0:167e85b50250 312 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 313 *res="%1.3f %s";
kwstasfane1 0:167e85b50250 314 }
kwstasfane1 0:167e85b50250 315 else
kwstasfane1 0:167e85b50250 316 {
kwstasfane1 0:167e85b50250 317 *res="Out-of-range... '>2.000 sec'";
kwstasfane1 0:167e85b50250 318 }
kwstasfane1 0:167e85b50250 319 }
kwstasfane1 0:167e85b50250 320 }
kwstasfane1 0:167e85b50250 321 else // "(dsp_mode == 2)" time interval measurement
kwstasfane1 0:167e85b50250 322 {
kwstasfane1 0:167e85b50250 323 if(dsp_range == 0) //High resolution (2.0000 +- 0.0001 ms)
kwstasfane1 0:167e85b50250 324 {
kwstasfane1 0:167e85b50250 325 m_result = m_t_interval_ms;
kwstasfane1 0:167e85b50250 326 if(m_result <= 2.0001)
kwstasfane1 0:167e85b50250 327 {
kwstasfane1 0:167e85b50250 328 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 329 *res="%1.4f %s";
kwstasfane1 0:167e85b50250 330 }
kwstasfane1 0:167e85b50250 331 else
kwstasfane1 0:167e85b50250 332 {
kwstasfane1 0:167e85b50250 333 *res="Out-of-range... '>2.000 ms !'";
kwstasfane1 0:167e85b50250 334 }
kwstasfane1 0:167e85b50250 335 }
kwstasfane1 0:167e85b50250 336 else if(dsp_range == 1) //medium resolution (20.00 +- 0.01 ms)
kwstasfane1 0:167e85b50250 337 {
kwstasfane1 0:167e85b50250 338 m_result = m_t_interval_ms;
kwstasfane1 0:167e85b50250 339 if(m_result <= 20.01)
kwstasfane1 0:167e85b50250 340 {
kwstasfane1 0:167e85b50250 341 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 342 *res="%2.2f %s";
kwstasfane1 0:167e85b50250 343 }
kwstasfane1 0:167e85b50250 344 else
kwstasfane1 0:167e85b50250 345 {
kwstasfane1 0:167e85b50250 346 *res="Out-of-range... '>20.00 ms !'";
kwstasfane1 0:167e85b50250 347 }
kwstasfane1 0:167e85b50250 348 }
kwstasfane1 0:167e85b50250 349 else //low resolution (2.000+-0.0001ms)
kwstasfane1 0:167e85b50250 350 {
kwstasfane1 0:167e85b50250 351 m_result = m_t_interval_ms/10e3;
kwstasfane1 0:167e85b50250 352 if(m_result <= 2.001)
kwstasfane1 0:167e85b50250 353 {
kwstasfane1 0:167e85b50250 354 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 355 *res="%1.3f %s";
kwstasfane1 0:167e85b50250 356 }
kwstasfane1 0:167e85b50250 357 else
kwstasfane1 0:167e85b50250 358 {
kwstasfane1 0:167e85b50250 359 *res="Out-of-range... '>2.000 sec'";
kwstasfane1 0:167e85b50250 360 }
kwstasfane1 0:167e85b50250 361 }
kwstasfane1 0:167e85b50250 362 }
kwstasfane1 0:167e85b50250 363
kwstasfane1 0:167e85b50250 364 //print the result
kwstasfane1 0:167e85b50250 365 lcd.printf(*res,m_result,range_scale[dsp_mode][dsp_range]);
kwstasfane1 0:167e85b50250 366
kwstasfane1 0:167e85b50250 367 }
kwstasfane1 0:167e85b50250 368
kwstasfane1 0:167e85b50250 369 /*
kwstasfane1 0:167e85b50250 370 * Implemention of the vMy_Task1(), if 4 inputs are provided,
kwstasfane1 0:167e85b50250 371 * vMy_Task2 is executed.
kwstasfane1 0:167e85b50250 372 *
kwstasfane1 0:167e85b50250 373 void vMy_Task1_isr()
kwstasfane1 0:167e85b50250 374 {
kwstasfane1 0:167e85b50250 375 input_count = input_count + 1;
kwstasfane1 0:167e85b50250 376 printf("Key pressed!: %d\n", input_count);
kwstasfane1 0:167e85b50250 377 if(input_count == 4)
kwstasfane1 0:167e85b50250 378 {
kwstasfane1 0:167e85b50250 379 printf("4 inputs provided...\n");
kwstasfane1 0:167e85b50250 380 input_count = 0;
kwstasfane1 0:167e85b50250 381 printf("Will move onto task2\n");
kwstasfane1 0:167e85b50250 382
kwstasfane1 0:167e85b50250 383 //call task 2 after 2 seconds to close the led, not the same as the
kwstasfane1 0:167e85b50250 384 //ticker, where it is done periodically, timeout only does it once
kwstasfane1 0:167e85b50250 385 task2.attach(&vMy_Task2, 2.0);
kwstasfane1 0:167e85b50250 386 //call this to turn on the led, after it has been dictated to shut down after 2 secs
kwstasfane1 0:167e85b50250 387 vMy_Task2();
kwstasfane1 0:167e85b50250 388 }
kwstasfane1 0:167e85b50250 389 }
kwstasfane1 0:167e85b50250 390
kwstasfane1 0:167e85b50250 391 void vMy_Task2()
kwstasfane1 0:167e85b50250 392 {
kwstasfane1 0:167e85b50250 393 led1=!led1;
kwstasfane1 0:167e85b50250 394 printf("Task 2 Running… LED1 = %d\n", led1.read());
kwstasfane1 0:167e85b50250 395 }
kwstasfane1 0:167e85b50250 396
kwstasfane1 0:167e85b50250 397 void vMy_Task3()
kwstasfane1 0:167e85b50250 398 {
kwstasfane1 0:167e85b50250 399 led2=1;
kwstasfane1 0:167e85b50250 400 led3=0;
kwstasfane1 0:167e85b50250 401 led4=0;
kwstasfane1 0:167e85b50250 402 printf("Task 3 Running… LED2 = %d, LED3 = %d, LED4 = %d\n", led2.read(), led3.read(), led4.read());
kwstasfane1 0:167e85b50250 403 wait(0.01);
kwstasfane1 0:167e85b50250 404
kwstasfane1 0:167e85b50250 405 }
kwstasfane1 0:167e85b50250 406 */