Original
Dependencies: EFM32_SegmentLCD mbed-os mbed
main.cpp@0:7ade3b6a47a9, 2016-12-14 (annotated)
- Committer:
- ura_pooh
- Date:
- Wed Dec 14 10:30:57 2016 +0000
- Revision:
- 0:7ade3b6a47a9
LCD Library Updated
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ura_pooh | 0:7ade3b6a47a9 | 1 | #include "mbed.h" |
ura_pooh | 0:7ade3b6a47a9 | 2 | #include "rtos.h" |
ura_pooh | 0:7ade3b6a47a9 | 3 | #include "EFM32_SegmentLCD.h" |
ura_pooh | 0:7ade3b6a47a9 | 4 | |
ura_pooh | 0:7ade3b6a47a9 | 5 | // import LCD Library |
ura_pooh | 0:7ade3b6a47a9 | 6 | silabs::EFM32_SegmentLCD segmentDisplay; |
ura_pooh | 0:7ade3b6a47a9 | 7 | |
ura_pooh | 0:7ade3b6a47a9 | 8 | //score counter |
ura_pooh | 0:7ade3b6a47a9 | 9 | int32_t g_count; |
ura_pooh | 0:7ade3b6a47a9 | 10 | |
ura_pooh | 0:7ade3b6a47a9 | 11 | // Hardware Resource |
ura_pooh | 0:7ade3b6a47a9 | 12 | DigitalOut led1(LED1); // LED |
ura_pooh | 0:7ade3b6a47a9 | 13 | DigitalOut led2(LED2); // LED |
ura_pooh | 0:7ade3b6a47a9 | 14 | InterruptIn in1(PB9); // Push Button |
ura_pooh | 0:7ade3b6a47a9 | 15 | InterruptIn in2(PB10); // Push Button |
ura_pooh | 0:7ade3b6a47a9 | 16 | |
ura_pooh | 0:7ade3b6a47a9 | 17 | // for OS Resource |
ura_pooh | 0:7ade3b6a47a9 | 18 | osThreadId MyThread1; // Thread ID |
ura_pooh | 0:7ade3b6a47a9 | 19 | osThreadId MyThread2; // Thread ID |
ura_pooh | 0:7ade3b6a47a9 | 20 | osThreadId MyThread3; // Thread ID |
ura_pooh | 0:7ade3b6a47a9 | 21 | osThreadId MyThread4; // Thread ID |
ura_pooh | 0:7ade3b6a47a9 | 22 | |
ura_pooh | 0:7ade3b6a47a9 | 23 | // Button Handler |
ura_pooh | 0:7ade3b6a47a9 | 24 | void in1_handler() { |
ura_pooh | 0:7ade3b6a47a9 | 25 | osSignalSet(MyThread1, 3); //set signal for thread1 |
ura_pooh | 0:7ade3b6a47a9 | 26 | g_count++; // Update score for single count |
ura_pooh | 0:7ade3b6a47a9 | 27 | } |
ura_pooh | 0:7ade3b6a47a9 | 28 | |
ura_pooh | 0:7ade3b6a47a9 | 29 | // Button Handler |
ura_pooh | 0:7ade3b6a47a9 | 30 | void in2_handler() { |
ura_pooh | 0:7ade3b6a47a9 | 31 | osSignalSet(MyThread2, 10); // set signal for thread2 |
ura_pooh | 0:7ade3b6a47a9 | 32 | g_count+=2; // Update score for double count |
ura_pooh | 0:7ade3b6a47a9 | 33 | } |
ura_pooh | 0:7ade3b6a47a9 | 34 | |
ura_pooh | 0:7ade3b6a47a9 | 35 | // Thread1 |
ura_pooh | 0:7ade3b6a47a9 | 36 | void led1_thread(void const *args) { |
ura_pooh | 0:7ade3b6a47a9 | 37 | MyThread1 = Thread::gettid(); // Get this thread ID |
ura_pooh | 0:7ade3b6a47a9 | 38 | while(true) { |
ura_pooh | 0:7ade3b6a47a9 | 39 | Thread::signal_wait(3, osWaitForever ); // Waiting signal as 3 from BTN1 |
ura_pooh | 0:7ade3b6a47a9 | 40 | led1 = !led1; //Toggled LED0 |
ura_pooh | 0:7ade3b6a47a9 | 41 | segmentDisplay.Number(g_count); // Display update for current count value |
ura_pooh | 0:7ade3b6a47a9 | 42 | Thread::wait(100); // Wait 100ms |
ura_pooh | 0:7ade3b6a47a9 | 43 | Thread::yield(); // Dispath Other Thread |
ura_pooh | 0:7ade3b6a47a9 | 44 | } |
ura_pooh | 0:7ade3b6a47a9 | 45 | |
ura_pooh | 0:7ade3b6a47a9 | 46 | } |
ura_pooh | 0:7ade3b6a47a9 | 47 | |
ura_pooh | 0:7ade3b6a47a9 | 48 | // Thread2 |
ura_pooh | 0:7ade3b6a47a9 | 49 | void led2_thread(void const *args) { |
ura_pooh | 0:7ade3b6a47a9 | 50 | MyThread2 = Thread::gettid(); // Get this thread ID |
ura_pooh | 0:7ade3b6a47a9 | 51 | while (true) { |
ura_pooh | 0:7ade3b6a47a9 | 52 | Thread::signal_wait(10, osWaitForever); // Waiting signal as 10 from BTN2 |
ura_pooh | 0:7ade3b6a47a9 | 53 | led2 = !led2; // Toggled LED1 |
ura_pooh | 0:7ade3b6a47a9 | 54 | segmentDisplay.Number(g_count); //Display update for current count value |
ura_pooh | 0:7ade3b6a47a9 | 55 | Thread::wait(100); // Wait 100ms |
ura_pooh | 0:7ade3b6a47a9 | 56 | Thread::yield(); // Dispatch Other Thread |
ura_pooh | 0:7ade3b6a47a9 | 57 | } |
ura_pooh | 0:7ade3b6a47a9 | 58 | } |
ura_pooh | 0:7ade3b6a47a9 | 59 | |
ura_pooh | 0:7ade3b6a47a9 | 60 | // Thread3 |
ura_pooh | 0:7ade3b6a47a9 | 61 | void btn1_thread(void const *args) { |
ura_pooh | 0:7ade3b6a47a9 | 62 | int32_t btn_cnt1; // for Display control |
ura_pooh | 0:7ade3b6a47a9 | 63 | MyThread3 = Thread::gettid(); // Get This Thread ID |
ura_pooh | 0:7ade3b6a47a9 | 64 | btn_cnt1 =0; // Status Initialize |
ura_pooh | 0:7ade3b6a47a9 | 65 | |
ura_pooh | 0:7ade3b6a47a9 | 66 | while(true) { |
ura_pooh | 0:7ade3b6a47a9 | 67 | if(btn_cnt1 == 0) { // Status Check |
ura_pooh | 0:7ade3b6a47a9 | 68 | segmentDisplay.Write("Bay-"); // Display Update for Text |
ura_pooh | 0:7ade3b6a47a9 | 69 | btn_cnt1 = 1; // Change Status |
ura_pooh | 0:7ade3b6a47a9 | 70 | } |
ura_pooh | 0:7ade3b6a47a9 | 71 | else { |
ura_pooh | 0:7ade3b6a47a9 | 72 | segmentDisplay.Write("Blade"); // Display Update for Text |
ura_pooh | 0:7ade3b6a47a9 | 73 | btn_cnt1 =0; // Change Status |
ura_pooh | 0:7ade3b6a47a9 | 74 | } |
ura_pooh | 0:7ade3b6a47a9 | 75 | Thread::wait(1000); // Wait 1000ms |
ura_pooh | 0:7ade3b6a47a9 | 76 | Thread::yield(); // Dispatch Other Thread |
ura_pooh | 0:7ade3b6a47a9 | 77 | } |
ura_pooh | 0:7ade3b6a47a9 | 78 | } |
ura_pooh | 0:7ade3b6a47a9 | 79 | |
ura_pooh | 0:7ade3b6a47a9 | 80 | // Thread4 |
ura_pooh | 0:7ade3b6a47a9 | 81 | void btn2_thread(void const *args) { |
ura_pooh | 0:7ade3b6a47a9 | 82 | int32_t count; // for Counter Value |
ura_pooh | 0:7ade3b6a47a9 | 83 | MyThread4 = Thread::gettid(); // Get Thread ID |
ura_pooh | 0:7ade3b6a47a9 | 84 | count=0; // Counter Initialize |
ura_pooh | 0:7ade3b6a47a9 | 85 | while(true) { |
ura_pooh | 0:7ade3b6a47a9 | 86 | segmentDisplay.ARing(count & 0x7, (count & 0x8) == 0); // Ring Display Update |
ura_pooh | 0:7ade3b6a47a9 | 87 | if(count > 16) count=0; //Display Counter Value Update |
ura_pooh | 0:7ade3b6a47a9 | 88 | else count++; // Counter Increment |
ura_pooh | 0:7ade3b6a47a9 | 89 | Thread::wait(1000); // Wait 1000ms |
ura_pooh | 0:7ade3b6a47a9 | 90 | Thread::yield(); // Dispatch Other Thread |
ura_pooh | 0:7ade3b6a47a9 | 91 | } |
ura_pooh | 0:7ade3b6a47a9 | 92 | } |
ura_pooh | 0:7ade3b6a47a9 | 93 | |
ura_pooh | 0:7ade3b6a47a9 | 94 | // Main |
ura_pooh | 0:7ade3b6a47a9 | 95 | int main() { |
ura_pooh | 0:7ade3b6a47a9 | 96 | g_count =0; // Global Counter Clear |
ura_pooh | 0:7ade3b6a47a9 | 97 | Thread thread1(led1_thread); // Create Thread |
ura_pooh | 0:7ade3b6a47a9 | 98 | Thread thread2(led2_thread); // Create Thread |
ura_pooh | 0:7ade3b6a47a9 | 99 | Thread thread3(btn1_thread); // Create Thread |
ura_pooh | 0:7ade3b6a47a9 | 100 | Thread thread4(btn2_thread); // Create Thread |
ura_pooh | 0:7ade3b6a47a9 | 101 | |
ura_pooh | 0:7ade3b6a47a9 | 102 | // Initialize pushbutton handler |
ura_pooh | 0:7ade3b6a47a9 | 103 | in1.rise(NULL); // BTN0 Initialize |
ura_pooh | 0:7ade3b6a47a9 | 104 | in1.fall(in1_handler); // BTN0 Handler Configuration |
ura_pooh | 0:7ade3b6a47a9 | 105 | in2.rise(NULL); // BTN1 Initialize |
ura_pooh | 0:7ade3b6a47a9 | 106 | in2.fall(in2_handler); // BTN1 Handler Configuration |
ura_pooh | 0:7ade3b6a47a9 | 107 | |
ura_pooh | 0:7ade3b6a47a9 | 108 | wait(1); // Wait for Display |
ura_pooh | 0:7ade3b6a47a9 | 109 | segmentDisplay.Write("Shoot!"); // Display This Message |
ura_pooh | 0:7ade3b6a47a9 | 110 | |
ura_pooh | 0:7ade3b6a47a9 | 111 | // Loop |
ura_pooh | 0:7ade3b6a47a9 | 112 | while (true) { |
ura_pooh | 0:7ade3b6a47a9 | 113 | wait(1000); |
ura_pooh | 0:7ade3b6a47a9 | 114 | } |
ura_pooh | 0:7ade3b6a47a9 | 115 | } |