Craig Raslawski / Mbed 2 deprecated RTOS_threadingWorking

Dependencies:   4DGL-uLCD-SE SDFileSystem ShiftBrite mbed-rtos mbed wave_player

Fork of RTOS_threading by James Plager

Files at this revision

API Documentation at this revision

Comitter:
jplager3
Date:
Sun Feb 26 19:52:01 2017 +0000
Parent:
11:0309bef74ba8
Child:
13:72e2a45b7847
Commit message:
Still needs kinks in BT control and uLCD worked out;

Changed in this revision

4DGL-uLCD-SE.lib Show annotated file Show diff for this revision Revisions of this file
SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
ShiftBrite.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
wave_player.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/4DGL-uLCD-SE.lib	Sun Feb 26 19:52:01 2017 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/4180_1/code/4DGL-uLCD-SE/#2cb1845d7681
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDFileSystem.lib	Sun Feb 26 19:52:01 2017 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/mbed_official/code/SDFileSystem/#8db0d3b02cec
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ShiftBrite.lib	Sun Feb 26 19:52:01 2017 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/jwaters9/code/ShiftBrite/#466ea48e852a
--- a/main.cpp	Wed Feb 15 14:04:02 2017 -0600
+++ b/main.cpp	Sun Feb 26 19:52:01 2017 +0000
@@ -1,22 +1,165 @@
 #include "mbed.h"
 #include "rtos.h"
- 
+#include "uLCD_4DGL.h"
+#include "ShiftBrite.h"
+#include "SDFileSystem.h"
+#include "wave_player.h"
+
+Mutex mutex;    //handles writing to the LCD
+Mutex mutex2;   //used for color changing
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
-Thread thread;
- 
-void led2_thread() {
-    while (true) {
-        led2 = !led2;
-        Thread::wait(1000);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+Thread thread1;
+Thread thread2;
+Thread thread3;
+Thread thread4;
+DigitalOut latch(p15);
+DigitalOut enable(p16);
+SPI spi(p11, p12, p13);
+uLCD_4DGL uLCD(p28,p27,p29); //(p27, p28, p30);    //tx, rx, rst
+ShiftBrite myBrite(p15,p16,spi); //latch, enable, spi
+SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
+AnalogOut DACout(p18);      //must be p18
+RawSerial BT(p9, p10);  //bluetooth pinout
+int red = 200;
+int blue = 0;
+int green = 0;
+FILE *wave_file;        //global bc its gotta be changed by Main while running in child thread
+unsigned int redHex = 0xFF0000;
+unsigned int grnHex = 0x00FF00;
+unsigned int bluHex = 0x0000FF;
+
+
+wave_player waver(&DACout);
+
+void LCD_thread1() {
+    while(1){    
+        mutex.lock();
+        uLCD.filled_circle(64, 64, 12, 0xFF0000);
+        mutex.unlock();
+        wait(.5);
+        mutex.lock();
+        uLCD.filled_circle(64, 64, 12, 0x0000FF);
+        mutex.unlock();
+        wait(.5);
+    }     
+}
+void LCD_thread2() {    //update a timer on the display every 100ms
+    uLCD.cls();
+    float time = 0.0;
+    int count =0;
+    while(1) {
+        Thread::wait(60);
+        //time = time + 0.25;
+        uLCD.locate(0,0);
+        mutex.lock();
+        count++;
+        uLCD.printf("Counting! %i \n", count);
+        mutex.unlock();
     }
 }
- 
-int main() {
-    thread.start(led2_thread);
+void LED_thread() {
+    //flash red & blue for police siren
+    while(1){
+        mutex2.lock();
+        //myBrite.Write(red,green,blue);
+        myBrite.Write(150, green, 0);
+        mutex2.unlock();
+        wait(.5);
+        mutex2.lock();
+        myBrite.Write(0,green,150);
+        //myBrite.Write(blue,green,red);  // change LEDs so Red=OFF, Blue=ON
+        mutex2.unlock();
+        wait(.5); 
+    }
+} 
+void BT_thread() {
+    // use mutex to lock getc(), printf(), scanf()
+    // don't unlock until you've checked that it's readable() 
+    char bnum=0;
+    while(1) {
+        mutex.lock();
+        if (BT.getc()=='!') {
+            if (BT.getc()=='B') { //button data
+                bnum = BT.getc(); //button number
+                if (bnum == '1') {
+                    green = 250;  
+                }
+                if (bnum == '2') {
+                    
+                }
+                if (bnum == '3') {
+                    green = 250;  
+                }
+                if (bnum == '4') {
+                    green = 0;
+                }
+                //if ((bnum>='1')&&(bnum<='4')) //is a number button 1..4
+                //    myled[bnum-'1']=blue.getc()-'0'; //turn on/off that num LED
+            }
+        }
+        mutex.unlock();
+    }  
     
-    while (true) {
-        led1 = !led1;
-        Thread::wait(500);
+}
+void sound_thread(){
+    //FILE *wave_file;
+    wave_file=fopen("/sd/Police_Siren.wav","r");    
+    if (wave_file == NULL){
+           led1=led2=led3=led4 = 1;
     }
+    waver.play(wave_file);
+    fclose(wave_file);  
 }
+int main() {
+    thread1.start(LED_thread);  //police lights work
+    thread2.start(LCD_thread1);
+    thread3.start(LCD_thread2);
+    thread4.start(sound_thread);
+    // use mutex to lock getc(), printf(), scanf()
+    // don't unlock until you've checked that it's readable() 
+    char bnum=0;
+    while(1) {
+        mutex.lock();
+        if (BT.getc()=='!') {
+            if (BT.getc()=='B') { //button data
+                bnum = BT.getc(); //button number
+                if (bnum == '1') {  //turn Green LED on
+                    green = 250; 
+                    led1 = 1;
+                    led2=led3=led4=0; 
+                }
+                if (bnum == '2') { // turn Green LED off
+                    green = 0;
+                    led1=led3=led4=0;
+                    led2=1;
+                }
+                if (bnum == '3') {  // change sound file playing
+                    green = 250;  
+                    led2=led1=led4=0;
+                    led3=1;
+                    fclose(wave_file);        //stop police siren from playing
+                    
+                    FILE *wave_file2;
+                    wave_file2=fopen("/sd/banker_calling.wav","r");
+                    if (wave_file2 == NULL){
+                        led1=led2=0;
+                        led3=led4=1;
+                    }
+                    waver.play(wave_file2);
+                    fclose(wave_file2);
+                    
+
+                }
+                if (bnum == '4') {  // change LCD colors
+                    bluHex = 0x00FF00;  //change the lights to flash red/grn
+                    led2=led3=led1=0;
+                    led4=1;
+                }
+            }
+        }
+    } 
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wave_player.lib	Sun Feb 26 19:52:01 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/sravet/code/wave_player/#acc3e18e77ad