ECE 4180 Lab 3 Part 3

Dependencies:   4DGL-uLCD-SE USBHost mbed wave_player_appbd

Fork of AppBoard_Waveplayer by jim hamblen

Committer:
abraha2d
Date:
Tue Oct 16 00:25:09 2018 +0000
Revision:
10:e008fb69af75
Parent:
9:f1aebfbe7e78
Save point

Who changed what in which revision?

UserRevisionLine numberNew contents of line
samux 0:0d68fe822228 1 #include "mbed.h"
samux 0:0d68fe822228 2 #include "USBHostMSD.h"
4180_1 9:f1aebfbe7e78 3 #include "wave_player.h"
abraha2d 10:e008fb69af75 4 #include "uLCD_4DGL.h"
samux 0:0d68fe822228 5
4180_1 9:f1aebfbe7e78 6 AnalogOut DACout(p18);
4180_1 9:f1aebfbe7e78 7 PwmOut PWMout(p26);
4180_1 9:f1aebfbe7e78 8
4180_1 9:f1aebfbe7e78 9 wave_player waver(&DACout,&PWMout);
4180_1 9:f1aebfbe7e78 10
abraha2d 10:e008fb69af75 11 PwmOut Rgb(p23);
abraha2d 10:e008fb69af75 12 PwmOut rGb(p24);
abraha2d 10:e008fb69af75 13 PwmOut rgB(p25);
abraha2d 10:e008fb69af75 14
abraha2d 10:e008fb69af75 15 uLCD_4DGL uLCD(p9, p10, p11); // serial tx, serial rx, reset pin;
abraha2d 10:e008fb69af75 16
abraha2d 10:e008fb69af75 17 Mutex uLCD_mutex;
abraha2d 10:e008fb69af75 18
abraha2d 10:e008fb69af75 19 void thread1(void const *args)
abraha2d 10:e008fb69af75 20 {
abraha2d 10:e008fb69af75 21 float x = 0.0;
abraha2d 10:e008fb69af75 22 while(1) {
abraha2d 10:e008fb69af75 23 //get a new random number for PWM
abraha2d 10:e008fb69af75 24 x = rand() / float(RAND_MAX);
abraha2d 10:e008fb69af75 25 //add some exponential brightness scaling
abraha2d 10:e008fb69af75 26 //for more of a fast flash effect
abraha2d 10:e008fb69af75 27 x = x*x*x;
abraha2d 10:e008fb69af75 28 Rgb = x;
abraha2d 10:e008fb69af75 29 rGb = x;
abraha2d 10:e008fb69af75 30 rgB = x;
abraha2d 10:e008fb69af75 31 //fast update rate for welding flashes
abraha2d 10:e008fb69af75 32 Thread::wait(20);
abraha2d 10:e008fb69af75 33 //add a random pause between welds
abraha2d 10:e008fb69af75 34 if (rand() / float(RAND_MAX) > 0.95) {
abraha2d 10:e008fb69af75 35 Rgb = 0;
abraha2d 10:e008fb69af75 36 rGb = 0;
abraha2d 10:e008fb69af75 37 rgB = 0;
abraha2d 10:e008fb69af75 38 Thread::wait(4000.0 * rand() / float(RAND_MAX));
abraha2d 10:e008fb69af75 39 }
abraha2d 10:e008fb69af75 40 }
abraha2d 10:e008fb69af75 41
abraha2d 10:e008fb69af75 42 }
abraha2d 10:e008fb69af75 43
abraha2d 10:e008fb69af75 44 void thread2(void const *args)
abraha2d 10:e008fb69af75 45 {
abraha2d 10:e008fb69af75 46 while(1) {
abraha2d 10:e008fb69af75 47 uLCD_mutex.lock();
abraha2d 10:e008fb69af75 48 uLCD.locate(1,2);
abraha2d 10:e008fb69af75 49 uLCD.printf("Lightning!!!");
abraha2d 10:e008fb69af75 50 uLCD_mutex.unlock();
abraha2d 10:e008fb69af75 51
abraha2d 10:e008fb69af75 52 Thread::wait(20);
abraha2d 10:e008fb69af75 53
abraha2d 10:e008fb69af75 54 uLCD_mutex.lock();
abraha2d 10:e008fb69af75 55 uLCD.locate(1,2);
abraha2d 10:e008fb69af75 56 uLCD.printf(" ");
abraha2d 10:e008fb69af75 57 uLCD_mutex.unlock();
abraha2d 10:e008fb69af75 58
abraha2d 10:e008fb69af75 59 if (rand() / float(RAND_MAX) > 0.95) {
abraha2d 10:e008fb69af75 60 Thread::wait(4000.0 * rand() / float(RAND_MAX));
abraha2d 10:e008fb69af75 61 }
abraha2d 10:e008fb69af75 62 }
abraha2d 10:e008fb69af75 63 }
abraha2d 10:e008fb69af75 64
abraha2d 10:e008fb69af75 65 void thread3(void const *args)
abraha2d 10:e008fb69af75 66 {
abraha2d 10:e008fb69af75 67 while (1) {
abraha2d 10:e008fb69af75 68 uLCD_mutex.lock();
abraha2d 10:e008fb69af75 69 uLCD.locate(1,5);
abraha2d 10:e008fb69af75 70 uLCD.printf("Thunder!!!");
abraha2d 10:e008fb69af75 71 uLCD_mutex.unlock();
abraha2d 10:e008fb69af75 72
abraha2d 10:e008fb69af75 73 Thread::wait(20);
abraha2d 10:e008fb69af75 74
abraha2d 10:e008fb69af75 75 uLCD_mutex.lock();
abraha2d 10:e008fb69af75 76 uLCD.locate(1,5);
abraha2d 10:e008fb69af75 77 uLCD.printf(" ");
abraha2d 10:e008fb69af75 78 uLCD_mutex.unlock();
abraha2d 10:e008fb69af75 79
abraha2d 10:e008fb69af75 80 if (rand() / float(RAND_MAX) > 0.95) {
abraha2d 10:e008fb69af75 81 Thread::wait(4000.0 * rand() / float(RAND_MAX));
abraha2d 10:e008fb69af75 82 }
abraha2d 10:e008fb69af75 83 }
abraha2d 10:e008fb69af75 84 }
abraha2d 10:e008fb69af75 85
4180_1 9:f1aebfbe7e78 86 int main()
4180_1 9:f1aebfbe7e78 87 {
abraha2d 10:e008fb69af75 88 Thread t1(thread1);
abraha2d 10:e008fb69af75 89 Thread t2(thread2);
abraha2d 10:e008fb69af75 90 Thread t3(thread3);
abraha2d 10:e008fb69af75 91
samux 0:0d68fe822228 92 USBHostMSD msd("usb");
4180_1 9:f1aebfbe7e78 93 FILE *wave_file;
4180_1 9:f1aebfbe7e78 94 //setup PWM hardware for a Class D style audio output
4180_1 9:f1aebfbe7e78 95 PWMout.period(1.0/400000.0);
4180_1 9:f1aebfbe7e78 96 printf("\n\n\nHello, wave world!\n");
4180_1 9:f1aebfbe7e78 97 // wait until connected to a USB device
4180_1 9:f1aebfbe7e78 98 while(!msd.connect()) {
samux 0:0d68fe822228 99 Thread::wait(500);
samux 0:0d68fe822228 100 }
abraha2d 10:e008fb69af75 101 while (1) {
abraha2d 10:e008fb69af75 102 //open wav file and play it
abraha2d 10:e008fb69af75 103 wave_file=fopen("/usb/storm-thunder.wav","r");
abraha2d 10:e008fb69af75 104 waver.play(wave_file);
abraha2d 10:e008fb69af75 105 fclose(wave_file);
abraha2d 10:e008fb69af75 106 Thread::wait(4000.0 * rand() / float(RAND_MAX));
abraha2d 10:e008fb69af75 107 }
samux 0:0d68fe822228 108 }