![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
A mbed RTOS based multimeter application that sends results to a phone over the Bluetooth module.
Dependencies: LCD_DISCO_F429ZI mbed mbed-rtos BSP_DISCO_F429ZI
main.cpp@14:526e0b503646, 2021-01-17 (annotated)
- Committer:
- hunter64288
- Date:
- Sun Jan 17 21:38:16 2021 +0000
- Revision:
- 14:526e0b503646
- Parent:
- 13:d21f6477ba19
- Child:
- 15:9c5fb6600570
two thread - one function ; using semaphore.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emilmont | 1:491820ee784d | 1 | #include "mbed.h" |
mbed_official | 11:0309bef74ba8 | 2 | #include "rtos.h" |
hunter64288 | 12:441ee5b1cf71 | 3 | #include "LCD_DISCO_F429ZI.h" |
hunter64288 | 12:441ee5b1cf71 | 4 | //#include <AnalogIn.h> |
hunter64288 | 12:441ee5b1cf71 | 5 | |
hunter64288 | 12:441ee5b1cf71 | 6 | //float message_t |
hunter64288 | 12:441ee5b1cf71 | 7 | //MemoryPool<message_t, 10> mpool; |
hunter64288 | 12:441ee5b1cf71 | 8 | //Queue<message_t, > queue; |
hunter64288 | 14:526e0b503646 | 9 | Semaphore one_slot(1); |
hunter64288 | 14:526e0b503646 | 10 | //InterruptIn button(PA_0); |
hunter64288 | 12:441ee5b1cf71 | 11 | |
hunter64288 | 13:d21f6477ba19 | 12 | Serial bluetooth(PA_9, PA_10); //Blueutooth Tx, Rx |
hunter64288 | 14:526e0b503646 | 13 | AnalogIn ain(PA_0); //Potentiometer Input |
hunter64288 | 12:441ee5b1cf71 | 14 | |
emilmont | 1:491820ee784d | 15 | DigitalOut led1(LED1); |
emilmont | 1:491820ee784d | 16 | DigitalOut led2(LED2); |
hunter64288 | 12:441ee5b1cf71 | 17 | |
hunter64288 | 13:d21f6477ba19 | 18 | LCD_DISCO_F429ZI lcd; //LCD Library |
hunter64288 | 13:d21f6477ba19 | 19 | Thread thread1; //threads |
hunter64288 | 12:441ee5b1cf71 | 20 | Thread thread2; |
hunter64288 | 13:d21f6477ba19 | 21 | Thread thread3; |
hunter64288 | 13:d21f6477ba19 | 22 | Thread thread4; |
emilmont | 1:491820ee784d | 23 | |
hunter64288 | 14:526e0b503646 | 24 | void voltage_function(void const *name) { |
hunter64288 | 12:441ee5b1cf71 | 25 | lcd.Clear(LCD_COLOR_WHITE); |
hunter64288 | 12:441ee5b1cf71 | 26 | lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"TASK1 RUNNING", CENTER_MODE); |
hunter64288 | 12:441ee5b1cf71 | 27 | printf("Task1 Running\n\r"); |
hunter64288 | 14:526e0b503646 | 28 | led1 = !led1; |
hunter64288 | 12:441ee5b1cf71 | 29 | |
hunter64288 | 12:441ee5b1cf71 | 30 | float samples[10]; |
hunter64288 | 14:526e0b503646 | 31 | |
hunter64288 | 12:441ee5b1cf71 | 32 | while(1) { |
hunter64288 | 14:526e0b503646 | 33 | one_slot.wait(); |
hunter64288 | 14:526e0b503646 | 34 | printf("%s acquires semaphore\n\r", (const char *)name); |
hunter64288 | 14:526e0b503646 | 35 | Thread::wait(1000); |
hunter64288 | 14:526e0b503646 | 36 | |
hunter64288 | 12:441ee5b1cf71 | 37 | for(int i=0; i<10; i++) { |
hunter64288 | 12:441ee5b1cf71 | 38 | //ain.set_reference_voltage(3.0); |
hunter64288 | 12:441ee5b1cf71 | 39 | samples[i] = ain.read()*3; |
hunter64288 | 12:441ee5b1cf71 | 40 | wait(0.001f); |
emilmont | 1:491820ee784d | 41 | } |
hunter64288 | 12:441ee5b1cf71 | 42 | |
hunter64288 | 12:441ee5b1cf71 | 43 | bluetooth.printf("Results:\n"); |
hunter64288 | 12:441ee5b1cf71 | 44 | for(int i=0; i<10; i++) { |
hunter64288 | 12:441ee5b1cf71 | 45 | bluetooth.printf("%d = , %f\n", i, samples[i]); |
hunter64288 | 12:441ee5b1cf71 | 46 | } |
hunter64288 | 14:526e0b503646 | 47 | printf("Displayed by %s\n\r", (const char *)name); |
hunter64288 | 14:526e0b503646 | 48 | Thread::wait(1000); |
hunter64288 | 14:526e0b503646 | 49 | one_slot.release(); |
hunter64288 | 14:526e0b503646 | 50 | printf("%s releases semaphore\n\r", (const char *)name); |
hunter64288 | 12:441ee5b1cf71 | 51 | Thread::wait(1000); |
hunter64288 | 12:441ee5b1cf71 | 52 | } |
hunter64288 | 12:441ee5b1cf71 | 53 | } |
hunter64288 | 13:d21f6477ba19 | 54 | |
hunter64288 | 14:526e0b503646 | 55 | /*void thread2_function() { |
hunter64288 | 12:441ee5b1cf71 | 56 | lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"TASK2 RUNNING", CENTER_MODE); |
hunter64288 | 12:441ee5b1cf71 | 57 | printf("Task2 Running\n\r"); |
hunter64288 | 12:441ee5b1cf71 | 58 | |
hunter64288 | 12:441ee5b1cf71 | 59 | while(true) { |
hunter64288 | 12:441ee5b1cf71 | 60 | //float i=0; |
hunter64288 | 14:526e0b503646 | 61 | led2 = !led2; |
hunter64288 | 12:441ee5b1cf71 | 62 | bluetooth.printf("Hello World !\r\n"); |
hunter64288 | 12:441ee5b1cf71 | 63 | Thread::wait(1000); |
hunter64288 | 13:d21f6477ba19 | 64 | //bluetooth.printf("This program runs since %f seconds.\r\n", i++); |
hunter64288 | 13:d21f6477ba19 | 65 | } |
hunter64288 | 14:526e0b503646 | 66 | }*/ |
hunter64288 | 12:441ee5b1cf71 | 67 | |
hunter64288 | 14:526e0b503646 | 68 | /*void btn_int(){ |
hunter64288 | 14:526e0b503646 | 69 | |
hunter64288 | 14:526e0b503646 | 70 | one_slot.release(); |
hunter64288 | 14:526e0b503646 | 71 | }*/ |
hunter64288 | 14:526e0b503646 | 72 | |
hunter64288 | 14:526e0b503646 | 73 | /*void semaphore_test(void const *name) |
hunter64288 | 13:d21f6477ba19 | 74 | { |
hunter64288 | 13:d21f6477ba19 | 75 | while (true) { |
hunter64288 | 14:526e0b503646 | 76 | one_slot.wait(); |
hunter64288 | 14:526e0b503646 | 77 | |
hunter64288 | 14:526e0b503646 | 78 | printf("%s acquires semaphore\n\r", (const char *)name); |
hunter64288 | 14:526e0b503646 | 79 | Thread::wait(1000); |
hunter64288 | 13:d21f6477ba19 | 80 | one_slot.release(); |
hunter64288 | 14:526e0b503646 | 81 | printf("%s releases semaphore\n\r", (const char *)name); |
hunter64288 | 13:d21f6477ba19 | 82 | } |
hunter64288 | 14:526e0b503646 | 83 | }*/ |
emilmont | 1:491820ee784d | 84 | |
emilmont | 1:491820ee784d | 85 | int main() { |
hunter64288 | 12:441ee5b1cf71 | 86 | printf("We are in main.\n\r"); |
hunter64288 | 12:441ee5b1cf71 | 87 | |
hunter64288 | 12:441ee5b1cf71 | 88 | thread1.set_priority(osPriorityHigh); |
hunter64288 | 12:441ee5b1cf71 | 89 | thread2.set_priority(osPriorityNormal); |
hunter64288 | 14:526e0b503646 | 90 | //thread3.set_priority(osPriorityNormal); |
hunter64288 | 14:526e0b503646 | 91 | //thread4.set_priority(osPriorityLow); |
hunter64288 | 12:441ee5b1cf71 | 92 | |
hunter64288 | 14:526e0b503646 | 93 | thread1.start(voltage_function, (void *)"Thread 1"); // Starting the processes |
hunter64288 | 14:526e0b503646 | 94 | thread2.start(voltage_function, (void *)"Thread 2"); |
emilmont | 1:491820ee784d | 95 | |
hunter64288 | 14:526e0b503646 | 96 | //button.rise(&btn_int); |
hunter64288 | 14:526e0b503646 | 97 | //thread3.start(semaphore_test, (void *)"Thread 3"); |
hunter64288 | 14:526e0b503646 | 98 | //thread4.start(semaphore_test, (void *)"Thread 4"); |
hunter64288 | 13:d21f6477ba19 | 99 | |
hunter64288 | 12:441ee5b1cf71 | 100 | thread1.join(); |
hunter64288 | 12:441ee5b1cf71 | 101 | thread2.join(); |
hunter64288 | 13:d21f6477ba19 | 102 | thread3.join(); |
hunter64288 | 13:d21f6477ba19 | 103 | thread4.join(); |
hunter64288 | 12:441ee5b1cf71 | 104 | |
hunter64288 | 12:441ee5b1cf71 | 105 | //wait for threads to complete |
hunter64288 | 12:441ee5b1cf71 | 106 | printf("The end of main.\n\r"); |
emilmont | 1:491820ee784d | 107 | } |
hunter64288 | 12:441ee5b1cf71 | 108 | |
hunter64288 | 12:441ee5b1cf71 | 109 |