template

Dependencies:   4DGL-uLCD-SE EthernetInterface NTPClient SDFileSystem mbed-rtos mbed wave_player

Fork of 2036lab7_template by jim hamblen

Revision:
1:2a0dea19d2ba
Parent:
0:df4d7c0a1594
--- a/main.cpp	Mon Apr 06 12:28:01 2015 +0000
+++ b/main.cpp	Mon Feb 01 06:41:04 2016 +0000
@@ -7,12 +7,15 @@
 #include "uLCD_4DGL.h"
 #include "TMP36.h"
 #include "wave_player.h"
+#include "Shiftbrite.h"
 // Setup four builtin leds for use by threads
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
 DigitalOut led3(LED3);
 DigitalOut led4(LED4);
 
+Shiftbrite myShiftbrite(p9, p10, p11, p12, p13);// ei li di n/c ci
+
 AnalogOut DACout(p18); // used to play sound on speaker
 
 //wave player plays a *.wav file to D/A and a PWM
@@ -21,7 +24,7 @@
 uLCD_4DGL uLCD(p28,p27,p29); // serial tx, serial rx, reset pin;
 
 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card setup
-
+Mutex myMutex;
 
 // Setup function code for three new threads to run.
 // Put in a while loop so that threads run forever.
@@ -30,40 +33,71 @@
 // the other threads will run
 // DO NOT use wait() with the RTOS!!!!!
 // wait just burns processor time and no other threads run
+inline float random_number()
+{
+    return (rand()/(float(RAND_MAX)));
+}
+
+
 void led2_thread(void const *argument)
 {
     led2 = 1;
+    //myShiftbrite.write(50,50,0);
     while (true) {
         led2 = !led2;
+        myShiftbrite.write(204,255,255);
         Thread::wait(2000);
     }
 }
 void led3_thread(void const *argument)
 {
     led3 = 1;
+     FILE *wave_file;
+     myShiftbrite.write(50,50,0);
     while (true) {
-        led3 = !led3;
-        Thread::wait(4000);
+    led3 = !led3;
+    myMutex.lock();
+    uLCD.printf("\n\n\nHello, wave world!\n");
+    myMutex.unlock();
+    
+    wave_file=fopen("/sd/fire.wav","r");
+    waver.play(wave_file);
+    fclose(wave_file);
+    Thread::wait(4000);
     }
 }
 void led4_thread(void const *argument)
 {
     TMP36 myTMP36(p20);
+    float tempC, tempF;
     led4 = 1;
+    myShiftbrite.write(50,50,0);
     while (true) {
         led4 = !led4;
-        Thread::wait(8000);
-    }
+        tempC = myTMP36.read();
+        tempF = (9.0*tempC)/5.0 + 32.0;
+        myMutex.lock();
+        uLCD.baudrate(3000000); //jack up baud rate to max for fast display
+        //uLCD.text_width(2); //2x size text
+        //uLCD.text_height(2);
+        uLCD.locate(2,4);
+        uLCD.printf("%5.2F F \n\r", tempF);
+        myMutex.unlock();
+        Thread::wait(4000);
+        }
 }
 
+
 int main()
 {
     led1 = 1;
 // code to set time in extra credit option goes here
 //
-    uLCD.baudrate(3000000); //jack up baud rate to max for fast display
-    uLCD.text_width(2); //2x size text
-    uLCD.text_height(2);
+    
+    //uLCD.baudrate(3000000); //jack up baud rate to max for fast display
+    //uLCD.text_width(2); //2x size text
+    //uLCD.text_height(2);
+    
 // Create 3 new thread objects thread1, thread2, and thread3
 // The RTOS will immediately start running them
     Thread thread1(led2_thread);
@@ -85,9 +119,20 @@
 // converts time structure to a string
         strftime(buffer, 12, "%T", localtime(&seconds));
 // print time HH:MM:SS
-        uLCD.locate(0,2);
+        myMutex.lock();
+        uLCD.locate(1,2);
         uLCD.printf("%s\n\r", buffer);
-        led1 = !led1;
-        Thread::wait(1000);
+        myMutex.unlock();
+   //     led1 = !led1;
+    //    Thread::wait(1000);
+    
+    while(1)
+    {
+        myShiftbrite.write(random_number()*255,random_number()*255,random_number()*255);
+        wait(0.4);
+    }
     }
 }
+
+
+