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
main.cpp
- Committer:
- pkoirala3
- Date:
- 2017-03-18
- Revision:
- 7:4ba0bb973eb9
- Parent:
- 6:1ae0d86d2020
- Child:
- 8:bca5e9169240
File content as of revision 7:4ba0bb973eb9:
#include "mbed.h"
#include "rtos.h"
#include "uLCD_4DGL.h"
#include "Speaker.h"
#include <wave_player.h>
#include <string>
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;
Speaker mySpeaker(p25);
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);
}
}
}
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);
}
}
}
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);
}
*/
