ECE 4180 final project. Sound and Bluetooth activated coffee maker

Dependencies:   mbed wave_player mbed-rtos C12832_lcd 4DGL-uLCD-SE LCD_fonts SDFileSystem

Revision:
5:18b2796e4847
Parent:
4:79863d2ea5a0
Child:
6:e4aba042979b
diff -r 79863d2ea5a0 -r 18b2796e4847 main.cpp
--- a/main.cpp	Sun Sep 22 17:57:46 2013 +0000
+++ b/main.cpp	Thu Oct 03 21:28:13 2019 +0000
@@ -9,8 +9,13 @@
 #include "Arial_9.h"
 #include "stdio.h"
 #include "C12832_lcd.h"
+#include "sound.h"
 
+#define sample_freq 11025.0
+//get and set the frequency from wav conversion tool GUI
+int i=0;
 
+Ticker sampletick;
 C12832_LCD LCD;
 AnalogIn Pot1(p19);
 AnalogIn Pot2(p20);
@@ -25,140 +30,162 @@
 // mutex to make the lcd lib thread safe
 Mutex lcd_mutex;
 
-// Thread 1
-// print counter into first line and wait for 1 s
-void thread1(void const *args)
+void audio_sample ()
 {
-    int i;
-    while(true) {       // thread loop
-        lcd_mutex.lock();
-        LCD.locate(0,0);
-        LCD.set_font((unsigned char*) Small_6);
-        LCD.printf("Thread1 count: %d",i);
-        lcd_mutex.unlock();
-        i++;
-        Thread::wait(1000);
-    }
-}
 
-// Thread 2
-// print counter into third line and wait for 0,5s
-void thread2(void const *args)
-{
-    int k;
-    while(true) {       // thread loop
-        lcd_mutex.lock();
-        LCD.locate(0,20);
-        LCD.set_font((unsigned char*) Arial_9);
-        LCD.printf("Thread 2 count : %d",k);
-        lcd_mutex.unlock();
-        k++;
-        Thread::wait(500); // wait 0.5s
+    Speaker = sound_data[i]/255.0;//scale to 0.0 to 1.0 for PWM
+    i++;
+    if (i>= NUM_ELEMENTS) {
+        i = 0;
+        sampletick.detach();
     }
 }
 
-// Thread 3
-// print a sin function in a small window
-// the value of pot 1 changes the speed of the sine wave
-void thread3(void const *args)
-{
-    int i,k,v;
-    double s,a;
-    k = 1;
-    lcd_mutex.lock();
-    LCD.rect(89,0,127,17,1);
-    lcd_mutex.unlock();
-    while(true) {       // thread loop
-        v = Pot1.read_u16();  // get value of pot 1
-        lcd_mutex.lock();
-        for (i=90; i<127; i++) {
-            s = 8 * sin((long double)(i+k) /5);   // pixel to print
-            a = 8 * sin((long double)(i+k-1) /5); // old pixel to erase
-            LCD.pixel(i,9 + (int)a ,0);           // erase pixel
-            LCD.pixel(i,9 + (int)s ,1);           // print pixel
-        }
-        LCD.copy_to_lcd();  // LCD.pixel does not update the lcd
-        lcd_mutex.unlock();
-        k++;
-        Thread::wait(v/100);   // value of pot1 / 100
-    }
-}
-
-// Thread 4
-// input pot 2 and change the contrast of LCD
-void thread4(void const *args)
-{
-    int k;
-    while(true) {         // thread loop
-        k = Pot2.read_u16();  // get the value of poti 2
-        k = k >> 10;          // need only 6 bits for contrast
-        lcd_mutex.lock();
-        LCD.set_contrast(k);
-        lcd_mutex.unlock();
-        Thread::wait(500);    // wait 0.5s
-    }
-}
-// Thread 5
-// RGB LED
-void thread5(void const *args)
-{
-    while(true) {         // thread loop
-        RGBLED_r = 0.5 + (rand() % 11)/20.0;
-        RGBLED_g = 0.5 + (rand() % 11)/20.0;
-        RGBLED_b = 0.5 + (rand() % 11)/20.0;
-        Thread::wait(1667);    // wait 1.5s
-    }
-}
-// Thread 6
-// Speaker
-void thread6(void const *args)
-{
-    while(true) {         // thread loop
-        Speaker.period(1.0/800.0);
-        Speaker = 0.01;
-        Thread::wait(1000);    // wait 1.0s
-        Speaker.period(1.0/969.0);
-        Speaker = 0.01;
-        Thread::wait(1000);    // wait 1.0s
-    }
-}
-
-// Thread 7
-// Joystick controls onboard mbed LEDs
-void thread7(void const *args)
-{
-    while(true) {         // thread loop
-        if (joyfire) {
-            leds = 0xf;
-        } else {
-            leds = joy;
-        }
-        Thread::wait(200);    // wait 0.25s
-    }
-}
+//
+//// Thread 1
+//// print counter into first line and wait for 1 s
+//void thread1(void const *args)
+//{
+//    int i;
+//    while(true) {       // thread loop
+//        lcd_mutex.lock();
+//        LCD.locate(0,0);
+//        LCD.set_font((unsigned char*) Small_6);
+//        LCD.printf("Thread1 count: %d",i);
+//        lcd_mutex.unlock();
+//        i++;
+//        Thread::wait(1000);
+//    }
+//}
+//
+//// Thread 2
+//// print counter into third line and wait for 0,5s
+//void thread2(void const *args)
+//{
+//    int k;
+//    while(true) {       // thread loop
+//        lcd_mutex.lock();
+//        LCD.locate(0,20);
+//        LCD.set_font((unsigned char*) Arial_9);
+//        LCD.printf("Thread 2 count : %d",k);
+//        lcd_mutex.unlock();
+//        k++;
+//        Thread::wait(500); // wait 0.5s
+//    }
+//}
+//
+//// Thread 3
+//// print a sin function in a small window
+//// the value of pot 1 changes the speed of the sine wave
+//void thread3(void const *args)
+//{
+//    int i,k,v;
+//    double s,a;
+//    k = 1;
+//    lcd_mutex.lock();
+//    LCD.rect(89,0,127,17,1);
+//    lcd_mutex.unlock();
+//    while(true) {       // thread loop
+//        v = Pot1.read_u16();  // get value of pot 1
+//        lcd_mutex.lock();
+//        for (i=90; i<127; i++) {
+//            s = 8 * sin((long double)(i+k) /5);   // pixel to print
+//            a = 8 * sin((long double)(i+k-1) /5); // old pixel to erase
+//            LCD.pixel(i,9 + (int)a ,0);           // erase pixel
+//            LCD.pixel(i,9 + (int)s ,1);           // print pixel
+//        }
+//        LCD.copy_to_lcd();  // LCD.pixel does not update the lcd
+//        lcd_mutex.unlock();
+//        k++;
+//        Thread::wait(v/100);   // value of pot1 / 100
+//    }
+//}
+//
+//// Thread 4
+//// input pot 2 and change the contrast of LCD
+//void thread4(void const *args)
+//{
+//    int k;
+//    while(true) {         // thread loop
+//        k = Pot2.read_u16();  // get the value of poti 2
+//        k = k >> 10;          // need only 6 bits for contrast
+//        lcd_mutex.lock();
+//        LCD.set_contrast(k);
+//        lcd_mutex.unlock();
+//        Thread::wait(500);    // wait 0.5s
+//    }
+//}
+//// Thread 5
+//// RGB LED
+//void thread5(void const *args)
+//{
+//    while(true) {         // thread loop
+//        RGBLED_r = 0.5 + (rand() % 11)/20.0;
+//        RGBLED_g = 0.5 + (rand() % 11)/20.0;
+//        RGBLED_b = 0.5 + (rand() % 11)/20.0;
+//        Thread::wait(1667);    // wait 1.5s
+//    }
+//}
+//// Thread 6
+//// Speaker
+//void thread6(void const *args)
+//{
+//    while(true) {
+//        //sampletick.attach(&audio_sample, 1.0 / sample_freq);
+//        /*
+//                 // thread loop
+//        Speaker.period(1.0/800.0);
+//        Speaker = 0.01;
+//        Thread::wait(1000);    // wait 1.0s
+//        Speaker.period(1.0/969.0);
+//        Speaker = 0.01;
+//        Thread::wait(1000);    // wait 1.0s
+//        */
+//    }
+//}
+//
+//// Thread 7
+//// Joystick controls onboard mbed LEDs
+//void thread7(void const *args)
+//{
+//    while(true) {         // thread loop
+//        if (joyfire) {
+//            leds = 0xf;
+//        } else {
+//            leds = joy;
+//        }
+//        Thread::wait(200);    // wait 0.25s
+//    }
+//}
 
 
 
 int main()
 {
-    int j;
-    LCD.cls();
-
-    Thread t1(thread1); //start thread1
-    Thread t2(thread2); //start thread2
-    Thread t3(thread3); //start thread3
-    Thread t4(thread4); //start thread4
-    Thread t5(thread5); //start thread5
-    Thread t6(thread6); //start thread6
-    Thread t7(thread7); //start thread7
+    //int j;
+    //LCD.cls();
+    Speaker.period(1.0/250000.0);
+    //Thread t1(thread1); //start thread1
+    //Thread t2(thread2); //start thread2
+    //Thread t3(thread3); //start thread3
+    //Thread t4(thread4); //start thread4
+    //Thread t5(thread5); //start thread5
+    //Thread t6(thread6); //start thread6
+    //Thread t7(thread7); //start thread7
 
     while(true) {       // main is the next thread
-        lcd_mutex.lock();
-        LCD.locate(0,9);
-        LCD.set_font((unsigned char*) Small_7);
-        j = LCD.get_contrast();    // read the actual contrast
-        LCD.printf("contrast : %d",j);
-        lcd_mutex.unlock();
-        Thread::wait(500);   // wait 0.5s
+        //lcd_mutex.lock();
+        
+        
+
+        
+        sampletick.attach(&audio_sample, 1.0 / sample_freq);
+        
+        //LCD.locate(0,9);
+        //LCD.set_font((unsigned char*) Small_7);
+        //j = LCD.get_contrast();    // read the actual contrast
+        //LCD.printf("contrast : %d",j);
+        //lcd_mutex.unlock();
+//        wait(1.0 / sample_freq);   // wait 0.5s
     }
-}
+}
\ No newline at end of file