Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE wave_player_appbd
Fork of rtos_mutex by
Diff: main.cpp
- Revision:
- 7:4ba0bb973eb9
- Parent:
- 6:1ae0d86d2020
- Child:
- 8:bca5e9169240
--- a/main.cpp Fri Jan 13 19:49:29 2017 +0000
+++ b/main.cpp Sat Mar 18 13:50:28 2017 +0000
@@ -1,25 +1,122 @@
#include "mbed.h"
+#include "rtos.h"
+#include "uLCD_4DGL.h"
+#include "Speaker.h"
+#include <wave_player.h>
+#include <string>
-Mutex stdio_mutex;
+uLCD_4DGL uLCD(p28, p27, p29); // create a global lcd object
+Serial pc(USBTX, USBRX);
+RawSerial bluemod(p13,p14);
+Mutex uLCDmutex;
+PwmOut blue(p23);
+PwmOut green(p22);
+PwmOut red(p21);
+Thread t1;
Thread t2;
Thread t3;
-
-void notify(const char* name, int state) {
- stdio_mutex.lock();
- printf("%s: %d\n\r", name, state);
- stdio_mutex.unlock();
-}
+
+Speaker mySpeaker(p25);
-void test_thread(void const *args) {
- while (true) {
- notify((const char*)args, 0); wait(1);
- notify((const char*)args, 1); wait(1);
+void threat1RGB(){
+ char bred=0;
+ char bgreen=0;
+ char bblue=0;
+ red = green = blue = 0;
+ while(1){
+ if(bluemod.readable()){
+ uLCDmutex.lock();
+ if (bluemod.getc()=='!'){
+ if (bluemod.getc()=='C'){ //color data packet
+ printf("Color Packet Recieved\r\n");
+ bred = bluemod.getc(); // RGB color values
+ bgreen = bluemod.getc();
+ bblue = bluemod.getc();
+ if (bluemod.getc()==char(~('!' + 'C' + bred + bgreen + bblue))){ //checksum OK?
+ printf("valid checksum, LED changing\r\n");
+ red = bred/255.0; //send new color to RGB LED PWM outputs
+ green = bgreen/255.0;
+ blue = bblue/255.0;
+ }
+ }
+ }
+ uLCDmutex.unlock();
+ Thread::wait(500);
+ }
}
}
-int main() {
- t2.start(callback(test_thread, (void *)"Th 2"));
- t3.start(callback(test_thread, (void *)"Th 3"));
+void thread2image(){
+ while(1){
+ while(bluemod.readable()){
+ uLCDmutex.lock();
+ if(bluemod.getc() == '1'){
+ printf("Image Displaying\r\n");
+ uLCD.media_init();
+ uLCD.set_sector_address(0x0000, 0x0000);
+ uLCD.display_image(0,0);
+ }
+ else if(bluemod.getc() == '2'){
+ printf("Clear Screen\r\n");
+ uLCD.cls();
+ }
+ uLCDmutex.unlock();
+ Thread::wait(500);
+ }
+ }
+}
- test_thread((void *)"Th 1");
+void thread3Audio(){
+ float D41 = 293.665;
+ float Eb4 = 311.127;
+ float F4 = 349.228;
+ float G4 = 391.995;
+ float len = 0.40;
+ float note[18]= {G4, F4, Eb4, Eb4, Eb4, F4, G4, G4, G4, F4, Eb4, F4, G4, F4, Eb4, D41, Eb4, 0.0};
+ float dur[18]= {len, 0.5*len, len, 0.5*len, len, 0.5*len, len, len, 0.5*len, 0.5*len, 0.5*len, 0.5*len, 0.5*len,0.5*len, 1*len, 0.5*len, 1.5*len, 0.0};
+ int playFlag = 0;
+
+ while(1){
+ while(bluemod.readable()){
+ uLCDmutex.lock();
+ if(bluemod.getc() == '3'){
+ printf("Playing Audio\r\n");
+ playFlag = 1;
+ }
+ uLCDmutex.unlock();
+ if(playFlag == 1){
+ for(int i = 0; i < 18; ++i) {mySpeaker.PlayNote(note[i],dur[i],0.5); }
+ playFlag = 0;
+ }
+ Thread::wait(500);
+ }
+ }
+}
+
+int main(){
+ uLCD.cls();
+ uLCD.baudrate(3000000); //jack up baud rate to max for fast display
+ t1.start(threat1RGB);
+ t2.start(thread2image);
+ t3.start(thread3Audio);
+ while(1);
}
+
+
+
+
+/*
+ set_time(0); // Set RTC time to 0
+ char buffer[32];
+ while(1){
+ time_t seconds = time(NULL);
+ strftime(buffer, 32, "%M:%S", localtime(&seconds));
+ uLCDmutex.lock();
+ uLCD.locate(0,0);
+ uLCD.text_width(2); //2X size text
+ uLCD.text_height(2);
+ uLCD.printf("UP: %s", buffer);
+ uLCDmutex.unlock();
+ Thread::wait(500);
+ }
+ */
\ No newline at end of file
