lab 3 rtos bluetooth code
Dependencies: mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem
main.cpp
- Committer:
- carahcamron
- Date:
- 2021-04-12
- Revision:
- 12:8297b1d18cb2
- Parent:
- 11:0309bef74ba8
File content as of revision 12:8297b1d18cb2:
#include "mbed.h" #include "uLCD_4DGL.h" #include "SDFileSystem.h" #include "wave_player.h" #include "rtos.h" //Create class for RGB LED with 3 PWM out; class RGBLed { public: RGBLed(PinName redpin, PinName greenpin, PinName bluepin); void write(float red, float green, float blue); private: PwmOut _redpin; PwmOut _greenpin; PwmOut _bluepin; }; RGBLed::RGBLed (PinName redpin, PinName greenpin, PinName bluepin) : _redpin(redpin), _greenpin(greenpin), _bluepin(bluepin) { //50Hz PWM clock default a bit too low, go to 2000Hz (less flicker) _redpin.period(0.0005); } void RGBLed::write(float red,float green, float blue) { _redpin = red; _greenpin = green; _bluepin = blue; } //----------------------------------------------------- DigitalOut led1(LED1); // MBED Led 1 DigitalOut led2(LED2); // MBED Led 2 RGBLed myLED(p23,p24,p25); // RGB PWM pins uLCD_4DGL LCD(p9,p10,p11); // serial tx, serial rx, reset pin RawSerial bluemod(p28,p27); // bluetooth adafruit serial port SDFileSystem sd(p5, p6, p7, p8, "sd"); // SDcard reader AnalogOut DACout(p18); // Speaker Analog Out wave_player waver(&DACout); // Creates wave player at same address // mutex to make the lcd lib safe Mutex lcd_mutex; Thread thread1; Thread thread2; Thread thread3; // Thread 5 // RGB LED void led_thread() { while(true) { char bred=0; char bgreen=0; char bblue=0; lcd_mutex.lock(); // thread loop bred = 0.5 + (rand() % 11)/20.0; bgreen = 0.5 + (rand() % 11)/20.0; bblue = 0.5 + (rand() % 11)/20.0; myLED.write(bred, bgreen, bblue); lcd_mutex.unlock(); Thread::wait(1667); // wait 1.5s } } void led_thread1() { while (true) { char bred=0; char bgreen=0; char bblue=0; while(1) { if(bluemod.readable()) { lcd_mutex.lock(); if (bluemod.getc()=='!') { if (bluemod.getc()=='C') { // color data packet bred = bluemod.getc(); // RGB color values bgreen = bluemod.getc(); bblue = bluemod.getc(); if (bluemod.getc()==char(~('!' + 'C' + bred + bgreen + bblue))) { //checksum OK? myLED.write(bred/255.0, bgreen/255.0, bblue/255.0); // send new color to RGB LED PWM outputs } } } lcd_mutex.unlock(); } Thread::wait(1000);// wait 1s } } } void waveplayer_thread() { while (true) { FILE *wave_file; printf("\n\n\nHello, wave world!\n"); wave_file=fopen("/sd/sample.wav","r"); waver.play(wave_file); fclose(wave_file); Thread::wait(1500); // wait 0.5s } } void lcd_thread() { while(true) { lcd_mutex.lock(); LCD.filled_circle(32,65,25, 0x000000); LCD.circle(65,65,30,0xFF00FF); LCD.filled_circle(97,65,25, 0xFF0000); lcd_mutex.unlock(); Thread::wait(1500); // wait 0.5s } } int main() { lcd_mutex.lock(); LCD.cls(); LCD.background_color(BLACK); LCD.baudrate(3000000); lcd_mutex.unlock(); thread1.start(led_thread1); //start RGB thread thread2.start(waveplayer_thread); //start LCD thread thread3.start(lcd_thread); //start speaker thread while (true) { led1 = !led1; lcd_mutex.lock(); LCD.filled_circle(97,65,25, 0x000000); LCD.circle(65,65,30,0xFF00FF); LCD.filled_circle(32,65,25, 0x0000FF); lcd_mutex.unlock(); Thread::wait(1000); } }