ECE 4180 Lab 3 Part 3
Dependencies: 4DGL-uLCD-SE USBHost mbed wave_player_appbd
Fork of AppBoard_Waveplayer by
main.cpp@10:e008fb69af75, 2018-10-16 (annotated)
- 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?
User | Revision | Line number | New 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 | } |