bluetooth control

Dependencies:   4DGL-uLCD-SE RgbLED SDFileSystem Speaker mbed-rtos mbed wave_player

Committer:
vm9
Date:
Thu Feb 16 22:31:07 2017 +0000
Revision:
0:016340684080
4180-lab3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vm9 0:016340684080 1 #include "mbed.h"
vm9 0:016340684080 2 #include "rtos.h"
vm9 0:016340684080 3 #include "uLCD_4DGL.h"
vm9 0:016340684080 4 #include "RGBLed.h"
vm9 0:016340684080 5 #include "wave_player.h"
vm9 0:016340684080 6 #include "SDFileSystem.h"
vm9 0:016340684080 7
vm9 0:016340684080 8
vm9 0:016340684080 9 BusOut myled(LED1,LED2,LED3,LED4);
vm9 0:016340684080 10
vm9 0:016340684080 11 //DigitalOut myled(LED1);
vm9 0:016340684080 12 //uLCD_4DGL uLCD(p28, p27, p30);
vm9 0:016340684080 13 uLCD_4DGL uLCD(p9, p10, p6);
vm9 0:016340684080 14 //DigitalOut audio (p26);
vm9 0:016340684080 15 SDFileSystem sd(p11, p12, p13, p8, "sd");
vm9 0:016340684080 16
vm9 0:016340684080 17 AnalogOut DACout(p18);
vm9 0:016340684080 18 wave_player waver(&DACout);
vm9 0:016340684080 19 RawSerial bluemod(p28,p27);
vm9 0:016340684080 20
vm9 0:016340684080 21
vm9 0:016340684080 22
vm9 0:016340684080 23 RGBLed rgb(p23, p22, p21);
vm9 0:016340684080 24
vm9 0:016340684080 25
vm9 0:016340684080 26 Mutex stdio_mutex;
vm9 0:016340684080 27 Mutex lcd_mutex;
vm9 0:016340684080 28 Mutex bluetooth_mutex;
vm9 0:016340684080 29 int i_globe1 = 0;
vm9 0:016340684080 30 int i_globe2 = 0;
vm9 0:016340684080 31 const char* sound = "/sd/wavfiles/applause.wav";
vm9 0:016340684080 32
vm9 0:016340684080 33
vm9 0:016340684080 34
vm9 0:016340684080 35 void send_data(void const * name) {
vm9 0:016340684080 36
vm9 0:016340684080 37 while(1) {
vm9 0:016340684080 38
vm9 0:016340684080 39 stdio_mutex.lock();
vm9 0:016340684080 40 printf("%s %d", name, i_globe1++);
vm9 0:016340684080 41 stdio_mutex.unlock();
vm9 0:016340684080 42 Thread::wait(500);
vm9 0:016340684080 43 }
vm9 0:016340684080 44
vm9 0:016340684080 45
vm9 0:016340684080 46 }
vm9 0:016340684080 47
vm9 0:016340684080 48 void count_1(void const *args) {
vm9 0:016340684080 49
vm9 0:016340684080 50 while(1) {
vm9 0:016340684080 51
vm9 0:016340684080 52 lcd_mutex.lock();
vm9 0:016340684080 53 uLCD.locate(0,0);
vm9 0:016340684080 54 uLCD.printf("%d", i_globe1++);
vm9 0:016340684080 55 lcd_mutex.unlock();
vm9 0:016340684080 56 Thread::wait(500);
vm9 0:016340684080 57 }
vm9 0:016340684080 58
vm9 0:016340684080 59
vm9 0:016340684080 60
vm9 0:016340684080 61 }
vm9 0:016340684080 62
vm9 0:016340684080 63 void count_2(void const *args) {
vm9 0:016340684080 64
vm9 0:016340684080 65 while(1) {
vm9 0:016340684080 66
vm9 0:016340684080 67 lcd_mutex.lock();
vm9 0:016340684080 68 uLCD.locate(5,0);
vm9 0:016340684080 69 uLCD.printf("%d",i_globe2++);
vm9 0:016340684080 70 lcd_mutex.unlock();
vm9 0:016340684080 71 Thread::wait(500);
vm9 0:016340684080 72 }
vm9 0:016340684080 73
vm9 0:016340684080 74
vm9 0:016340684080 75 }
vm9 0:016340684080 76
vm9 0:016340684080 77
vm9 0:016340684080 78 void play_sound(void const *args) {
vm9 0:016340684080 79
vm9 0:016340684080 80
vm9 0:016340684080 81
vm9 0:016340684080 82
vm9 0:016340684080 83 while(1) {
vm9 0:016340684080 84
vm9 0:016340684080 85 FILE* fp = fopen(sound, "r");
vm9 0:016340684080 86 waver.play(fp);
vm9 0:016340684080 87 fclose(fp);
vm9 0:016340684080 88 Thread::wait(1000);
vm9 0:016340684080 89
vm9 0:016340684080 90 }
vm9 0:016340684080 91
vm9 0:016340684080 92 }
vm9 0:016340684080 93
vm9 0:016340684080 94 void control_rgb1(void const *args) {
vm9 0:016340684080 95
vm9 0:016340684080 96 while(1) {
vm9 0:016340684080 97 stdio_mutex.lock();
vm9 0:016340684080 98 rgb.setColor (0, 0.0, 0);
vm9 0:016340684080 99 stdio_mutex.unlock();
vm9 0:016340684080 100 }
vm9 0:016340684080 101 Thread::wait(1000);
vm9 0:016340684080 102 }
vm9 0:016340684080 103
vm9 0:016340684080 104 void control_rgb2(void const *args) {
vm9 0:016340684080 105
vm9 0:016340684080 106 while(1) {
vm9 0:016340684080 107
vm9 0:016340684080 108 //if (on = 0) {
vm9 0:016340684080 109 stdio_mutex.lock() ;
vm9 0:016340684080 110 for (float i = 0; i < 1; i+=.1) {
vm9 0:016340684080 111 rgb.setColor (i, i, 1.0);
vm9 0:016340684080 112
vm9 0:016340684080 113 }
vm9 0:016340684080 114 stdio_mutex.unlock();
vm9 0:016340684080 115 }
vm9 0:016340684080 116 //}
vm9 0:016340684080 117 Thread::wait(1000);
vm9 0:016340684080 118 }
vm9 0:016340684080 119
vm9 0:016340684080 120
vm9 0:016340684080 121 int main() {
vm9 0:016340684080 122
vm9 0:016340684080 123
vm9 0:016340684080 124
vm9 0:016340684080 125 char bred=0;
vm9 0:016340684080 126 char bgreen=0;
vm9 0:016340684080 127 char bblue=0;
vm9 0:016340684080 128 float red = 0.0f;
vm9 0:016340684080 129 float green = 0.0f;
vm9 0:016340684080 130 float blue = 0.0f;
vm9 0:016340684080 131
vm9 0:016340684080 132 Thread t1 (play_sound);
vm9 0:016340684080 133 //Thread::wait(1000);
vm9 0:016340684080 134 //Thread t2 (send_data, (void *)"th 2");
vm9 0:016340684080 135 //Thread::wait(1000);
vm9 0:016340684080 136 //Thread t3 (send_data, (void *)"th 3");
vm9 0:016340684080 137
vm9 0:016340684080 138 //Thread t2 (control_rgb1);
vm9 0:016340684080 139
vm9 0:016340684080 140 //Thread t3 (control_rgb2);
vm9 0:016340684080 141
vm9 0:016340684080 142
vm9 0:016340684080 143 Thread t4 (count_1);
vm9 0:016340684080 144 //Thread::wait(1000);
vm9 0:016340684080 145
vm9 0:016340684080 146
vm9 0:016340684080 147 Thread t5 (count_2);
vm9 0:016340684080 148 char bnum=0;
vm9 0:016340684080 149
vm9 0:016340684080 150 while(1) {
vm9 0:016340684080 151
vm9 0:016340684080 152
vm9 0:016340684080 153 if (bluemod.getc()=='!') {
vm9 0:016340684080 154 if (bluemod.getc()=='C') { //color data packet
vm9 0:016340684080 155 bred = bluemod.getc(); // RGB color values
vm9 0:016340684080 156 bgreen = bluemod.getc();
vm9 0:016340684080 157 bblue = bluemod.getc();
vm9 0:016340684080 158 if (bluemod.getc()==char(~('!' + 'C' + bred + bgreen + bblue))) { //checksum OK?
vm9 0:016340684080 159 red = bred/255.0; //send new color to RGB LED PWM outputs
vm9 0:016340684080 160 green = bgreen/255.0;
vm9 0:016340684080 161 blue = bblue/255.0;
vm9 0:016340684080 162
vm9 0:016340684080 163 bluetooth_mutex.lock();
vm9 0:016340684080 164 rgb.setColor(1 - green, 1 - blue , 1 - red);
vm9 0:016340684080 165 bluetooth_mutex.unlock();
vm9 0:016340684080 166 }
vm9 0:016340684080 167
vm9 0:016340684080 168
vm9 0:016340684080 169
vm9 0:016340684080 170
vm9 0:016340684080 171 }
vm9 0:016340684080 172
vm9 0:016340684080 173 if (bluemod.getc()=='B') { //button data
vm9 0:016340684080 174 bnum = bluemod.getc(); //button number
vm9 0:016340684080 175 if ((bnum =='1') && bluemod.getc()){ //is a number button 1..4
vm9 0:016340684080 176 lcd_mutex.lock();
vm9 0:016340684080 177 //i_globe1 = 0; //turn on/off that num LED
vm9 0:016340684080 178 uLCD.color(0xFF);
vm9 0:016340684080 179 //sound = "/sd/wavfiles/BUZZER.wav";
vm9 0:016340684080 180 lcd_mutex.unlock();
vm9 0:016340684080 181 } else if (bnum == '2' && bluemod.getc()) {
vm9 0:016340684080 182
vm9 0:016340684080 183 lcd_mutex.lock();
vm9 0:016340684080 184 sound = "/sd/wavfiles/BUZZER.wav";
vm9 0:016340684080 185 lcd_mutex.unlock();
vm9 0:016340684080 186 }
vm9 0:016340684080 187 }
vm9 0:016340684080 188
vm9 0:016340684080 189 }
vm9 0:016340684080 190
vm9 0:016340684080 191 Thread::wait(200);
vm9 0:016340684080 192
vm9 0:016340684080 193 }
vm9 0:016340684080 194
vm9 0:016340684080 195
vm9 0:016340684080 196
vm9 0:016340684080 197
vm9 0:016340684080 198
vm9 0:016340684080 199
vm9 0:016340684080 200
vm9 0:016340684080 201
vm9 0:016340684080 202
vm9 0:016340684080 203
vm9 0:016340684080 204
vm9 0:016340684080 205 }
vm9 0:016340684080 206