Original

Dependencies:   EFM32_SegmentLCD mbed-os mbed

Committer:
ura_pooh
Date:
Wed Dec 14 10:30:57 2016 +0000
Revision:
0:7ade3b6a47a9
LCD Library Updated

Who changed what in which revision?

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