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

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?

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