Original
Dependencies: EFM32_SegmentLCD mbed-os mbed
Diff: main.cpp
- Revision:
- 0:7ade3b6a47a9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Dec 14 10:30:57 2016 +0000 @@ -0,0 +1,115 @@ +#include "mbed.h" +#include "rtos.h" +#include "EFM32_SegmentLCD.h" + +// import LCD Library +silabs::EFM32_SegmentLCD segmentDisplay; + +//score counter +int32_t g_count; + +// Hardware Resource +DigitalOut led1(LED1); // LED +DigitalOut led2(LED2); // LED +InterruptIn in1(PB9); // Push Button +InterruptIn in2(PB10); // Push Button + +// for OS Resource +osThreadId MyThread1; // Thread ID +osThreadId MyThread2; // Thread ID +osThreadId MyThread3; // Thread ID +osThreadId MyThread4; // Thread ID + +// Button Handler +void in1_handler() { + osSignalSet(MyThread1, 3); //set signal for thread1 + g_count++; // Update score for single count +} + +// Button Handler +void in2_handler() { + osSignalSet(MyThread2, 10); // set signal for thread2 + g_count+=2; // Update score for double count +} + +// Thread1 +void led1_thread(void const *args) { + MyThread1 = Thread::gettid(); // Get this thread ID + while(true) { + Thread::signal_wait(3, osWaitForever ); // Waiting signal as 3 from BTN1 + led1 = !led1; //Toggled LED0 + segmentDisplay.Number(g_count); // Display update for current count value + Thread::wait(100); // Wait 100ms + Thread::yield(); // Dispath Other Thread + } + +} + +// Thread2 +void led2_thread(void const *args) { + MyThread2 = Thread::gettid(); // Get this thread ID + while (true) { + Thread::signal_wait(10, osWaitForever); // Waiting signal as 10 from BTN2 + led2 = !led2; // Toggled LED1 + segmentDisplay.Number(g_count); //Display update for current count value + Thread::wait(100); // Wait 100ms + Thread::yield(); // Dispatch Other Thread + } +} + +// Thread3 +void btn1_thread(void const *args) { + int32_t btn_cnt1; // for Display control + MyThread3 = Thread::gettid(); // Get This Thread ID + btn_cnt1 =0; // Status Initialize + + while(true) { + if(btn_cnt1 == 0) { // Status Check + segmentDisplay.Write("Bay-"); // Display Update for Text + btn_cnt1 = 1; // Change Status + } + else { + segmentDisplay.Write("Blade"); // Display Update for Text + btn_cnt1 =0; // Change Status + } + Thread::wait(1000); // Wait 1000ms + Thread::yield(); // Dispatch Other Thread + } +} + +// Thread4 +void btn2_thread(void const *args) { + int32_t count; // for Counter Value + MyThread4 = Thread::gettid(); // Get Thread ID + count=0; // Counter Initialize + while(true) { + segmentDisplay.ARing(count & 0x7, (count & 0x8) == 0); // Ring Display Update + if(count > 16) count=0; //Display Counter Value Update + else count++; // Counter Increment + Thread::wait(1000); // Wait 1000ms + Thread::yield(); // Dispatch Other Thread + } +} + +// Main +int main() { + g_count =0; // Global Counter Clear + Thread thread1(led1_thread); // Create Thread + Thread thread2(led2_thread); // Create Thread + Thread thread3(btn1_thread); // Create Thread + Thread thread4(btn2_thread); // Create Thread + + // Initialize pushbutton handler + in1.rise(NULL); // BTN0 Initialize + in1.fall(in1_handler); // BTN0 Handler Configuration + in2.rise(NULL); // BTN1 Initialize + in2.fall(in2_handler); // BTN1 Handler Configuration + + wait(1); // Wait for Display + segmentDisplay.Write("Shoot!"); // Display This Message + + // Loop + while (true) { + wait(1000); + } +} \ No newline at end of file