template
Dependencies: 4DGL-uLCD-SE EthernetInterface NTPClient SDFileSystem mbed-rtos mbed wave_player
Fork of 2036lab7_template by
main.cpp
- Committer:
- ssong86
- Date:
- 2016-02-01
- Revision:
- 1:2a0dea19d2ba
- Parent:
- 0:df4d7c0a1594
File content as of revision 1:2a0dea19d2ba:
#include "mbed.h" // Need include below to add the RTOS #include "rtos.h" //#include "EthernetInterface.h" //needed for Extra Credit //#include "NTPClient.h" #include "SDFileSystem.h" #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 wave_player waver(&DACout); 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. // Thread::wait will force at least a "x" millisecond // wait before the thread runs again. During this delay // 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; 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; 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); // Create 3 new thread objects thread1, thread2, and thread3 // The RTOS will immediately start running them Thread thread1(led2_thread); Thread thread2(led3_thread); Thread thread3(led4_thread); // Main continues to run and is actually the first thread. // So a total of four threads are running now. // Each thread blinks an LED, but at a different rate // because of the different values used in Thread::wait(). // // Set time in seconds since Jan 1 1970 (Unix style) // must set time to start Real Time clock running set_time(1286729737); char buffer[12]; time_t seconds; while (true) { // reads time structure seconds = time(NULL); // converts time structure to a string strftime(buffer, 12, "%T", localtime(&seconds)); // print time HH:MM:SS myMutex.lock(); uLCD.locate(1,2); uLCD.printf("%s\n\r", buffer); myMutex.unlock(); // led1 = !led1; // Thread::wait(1000); while(1) { myShiftbrite.write(random_number()*255,random_number()*255,random_number()*255); wait(0.4); } } }