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 20:23:19 2021 +0000
Revision:
13:d21f6477ba19
Parent:
12:441ee5b1cf71
Child:
14:526e0b503646
added semaphore, Thread3 & 4.

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 13:d21f6477ba19 9 semaphore one_slot(1);
hunter64288 12:441ee5b1cf71 10
hunter64288 13:d21f6477ba19 11 Serial bluetooth(PA_9, PA_10); //Blueutooth Tx, Rx
hunter64288 13:d21f6477ba19 12 AnalogIn ain(PA_2); //Potentiometer Input
hunter64288 12:441ee5b1cf71 13
emilmont 1:491820ee784d 14 DigitalOut led1(LED1);
emilmont 1:491820ee784d 15 DigitalOut led2(LED2);
hunter64288 12:441ee5b1cf71 16
hunter64288 13:d21f6477ba19 17 LCD_DISCO_F429ZI lcd; //LCD Library
hunter64288 13:d21f6477ba19 18 Thread thread1; //threads
hunter64288 12:441ee5b1cf71 19 Thread thread2;
hunter64288 13:d21f6477ba19 20 Thread thread3;
hunter64288 13:d21f6477ba19 21 Thread thread4;
emilmont 1:491820ee784d 22
hunter64288 12:441ee5b1cf71 23 void thread1_function() {
hunter64288 12:441ee5b1cf71 24 lcd.Clear(LCD_COLOR_WHITE);
hunter64288 12:441ee5b1cf71 25 lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"TASK1 RUNNING", CENTER_MODE);
hunter64288 12:441ee5b1cf71 26 printf("Task1 Running\n\r");
hunter64288 12:441ee5b1cf71 27 //DigitalOut led1(LED1);
hunter64288 12:441ee5b1cf71 28 //led1 = !led1;
hunter64288 12:441ee5b1cf71 29
hunter64288 12:441ee5b1cf71 30 float samples[10];
hunter64288 12:441ee5b1cf71 31 float volt_value[10];
hunter64288 12:441ee5b1cf71 32 while(1) {
hunter64288 12:441ee5b1cf71 33 for(int i=0; i<10; i++) {
hunter64288 12:441ee5b1cf71 34 //ain.set_reference_voltage(3.0);
hunter64288 12:441ee5b1cf71 35 samples[i] = ain.read()*3;
hunter64288 12:441ee5b1cf71 36 //volt_value[i] = (((float)samples[i])/255.0)*3.0;
hunter64288 12:441ee5b1cf71 37 wait(0.001f);
emilmont 1:491820ee784d 38 }
hunter64288 12:441ee5b1cf71 39
hunter64288 12:441ee5b1cf71 40 bluetooth.printf("Results:\n");
hunter64288 12:441ee5b1cf71 41 for(int i=0; i<10; i++) {
hunter64288 12:441ee5b1cf71 42 bluetooth.printf("%d = , %f\n", i, samples[i]);
hunter64288 12:441ee5b1cf71 43 }
hunter64288 12:441ee5b1cf71 44 Thread::wait(1000);
hunter64288 12:441ee5b1cf71 45 }
hunter64288 12:441ee5b1cf71 46 }
hunter64288 13:d21f6477ba19 47
hunter64288 12:441ee5b1cf71 48 void thread2_function() {
hunter64288 12:441ee5b1cf71 49 lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"TASK2 RUNNING", CENTER_MODE);
hunter64288 12:441ee5b1cf71 50 printf("Task2 Running\n\r");
hunter64288 12:441ee5b1cf71 51
hunter64288 12:441ee5b1cf71 52 while(true) {
hunter64288 12:441ee5b1cf71 53 //float i=0;
hunter64288 12:441ee5b1cf71 54 //led2 = !led2;
hunter64288 12:441ee5b1cf71 55 bluetooth.printf("Hello World !\r\n");
hunter64288 12:441ee5b1cf71 56 Thread::wait(1000);
hunter64288 13:d21f6477ba19 57 //bluetooth.printf("This program runs since %f seconds.\r\n", i++);
hunter64288 13:d21f6477ba19 58 }
hunter64288 13:d21f6477ba19 59 }
hunter64288 12:441ee5b1cf71 60
hunter64288 13:d21f6477ba19 61 void semaphore_test(void const *name)
hunter64288 13:d21f6477ba19 62 {
hunter64288 13:d21f6477ba19 63 while (true) {
hunter64288 13:d21f6477ba19 64 one_slot.acquire();
hunter64288 13:d21f6477ba19 65 printf("%s\n\r", (const char *)name);
hunter64288 13:d21f6477ba19 66 ThisThread::sleep_for(1000);
hunter64288 13:d21f6477ba19 67 one_slot.release();
hunter64288 13:d21f6477ba19 68 }
emilmont 1:491820ee784d 69 }
emilmont 1:491820ee784d 70
emilmont 1:491820ee784d 71 int main() {
hunter64288 12:441ee5b1cf71 72 printf("We are in main.\n\r");
hunter64288 12:441ee5b1cf71 73
hunter64288 12:441ee5b1cf71 74 thread1.set_priority(osPriorityHigh);
hunter64288 12:441ee5b1cf71 75 thread2.set_priority(osPriorityNormal);
hunter64288 13:d21f6477ba19 76
hunter64288 12:441ee5b1cf71 77
hunter64288 12:441ee5b1cf71 78 thread1.start(thread1_function); // Starting the processes
hunter64288 12:441ee5b1cf71 79 thread2.start(thread2_function);
emilmont 1:491820ee784d 80
hunter64288 13:d21f6477ba19 81 thread3.start(test_thread, (void *)"Thread 3");
hunter64288 13:d21f6477ba19 82 thread4.start(test_thread, (void *)"Thread 4");
hunter64288 13:d21f6477ba19 83
hunter64288 12:441ee5b1cf71 84 thread1.join();
hunter64288 12:441ee5b1cf71 85 thread2.join();
hunter64288 13:d21f6477ba19 86 thread3.join();
hunter64288 13:d21f6477ba19 87 thread4.join();
hunter64288 12:441ee5b1cf71 88
hunter64288 12:441ee5b1cf71 89 //wait for threads to complete
hunter64288 12:441ee5b1cf71 90 printf("The end of main.\n\r");
emilmont 1:491820ee784d 91 }
hunter64288 12:441ee5b1cf71 92
hunter64288 12:441ee5b1cf71 93