Complete Build

Dependencies:   4DGL-uLCD-SE1 Motor SDFileSystem X_NUCLEO_53L0A1 mbed-rtos mbed BotwithWavePlayerLevel

Fork of BotWithBluetoothLIDARV2 by Brandon Weiner and Carlos Tallard

main.cpp

Committer:
bdragon52
Date:
2017-10-16
Revision:
15:c8360ceaad61
Parent:
14:cc2e4fbaffd8
Child:
16:61e88b0e3689

File content as of revision 15:c8360ceaad61:

#include "mbed.h"
#include "rtos.h"
#include "uLCD_4DGL.h"
#include "SDFileSystem.h"
#include "wave_player.h"
//nclude "picojpeg.h"

Serial blues(p13,p14);
Serial pc(USBTX, USBRX);
SDFileSystem sd(p5, p6, p7, p9, "sd"); //SD card

AnalogOut DACout(p18);

wave_player waver(&DACout);
 
PwmOut red(p23);
PwmOut blue(p21);
PwmOut green(p22);
    Thread *(test);
PwmOut myled(LED1);
uLCD_4DGL uLCD(p28,p27,p30);
Semaphore three_slots(1);
Thread thread2;
Thread thread3;
Thread thread4;
Thread thread5;
Thread thread6;


 float y=0.0;
 int c=80;
 int d=1;
char bnum=0;
char current='1';
int color=YELLOW;

char previousButton;

double w; //Angular frequency of sinusoidal wave controlling RGB LED
double k; 
 
FILE *wave_file; 
 
void t2() {
    while (true) {
       int a=20;
       int r=8;
       
      three_slots.wait();
       uLCD.background_color(BLACK);
       uLCD.cls();
       uLCD.filled_circle(a, 105-(y*80), r, BLUE);
       uLCD.line(3,25,13,25,RED);
       uLCD.line(3,105,13,105,RED);
     
      
       //while(b<100){
         //  uLCD.filled_circle(a, b, r, BLUE);
         //  b=b+1;
         //  uLCD.filled_circle(a, b-1, r, BLACK);
         //  uLCD.filled_circle(a, b, r, BLUE);
         //  Thread::wait(1000.0*0.002);
         //  }
        //while(b>50){
         //  uLCD.filled_circle(a, b, r, BLUE);
         //  b=b-1;
          // uLCD.filled_circle(a, b+2, r, BLACK);
          // uLCD.filled_circle(a, b, r, BLUE);
           //Thread::wait(1000.0*0.002);
          // }
       
        three_slots.release();  
        Thread::wait(50);
          
    }
}
 
 void t3() {
    while (true) {
         
     
         wave_file=fopen("/sd/Bee Gees - Stayin' Alive.wav","r");
         waver.play(wave_file);
         fclose(wave_file);
         Thread::wait(1000);
    }
}

 void t6() {
    while (true) {
     
         wave_file=fopen("/sd/Joey Scarbury - Believe it or Not.wav","r");
         waver.play(wave_file);
         fclose(wave_file);
         Thread::wait(1000);
    }
}

void t4() {
    while (true) {
          
        three_slots.wait();
        
        if(c==70){
            d=20;
            }
         if(c==110){
            d=-20;
            }
       
        uLCD.filled_circle(c, 64 , 10, WHITE);
        uLCD.filled_circle(c, 64 , 8, color);
        Thread::wait(50);
         uLCD.filled_circle(c, 64 , 10, BLACK);
        c=c+d;
        uLCD.filled_circle(c, 64 , 10, color);
        uLCD.filled_circle(c, 64 , 8, WHITE);
        Thread::wait(50);
        uLCD.filled_circle(c, 64 , 10, BLACK);
        
            three_slots.release(); 
        Thread::wait(50);
      
    }
}
 
 
void t5(){
    
    char bhit = 0;
    //double d = 10;
    
    while(true){
    
         
         if(blues.readable()==1){
             three_slots.wait();
         if (blues.getc()=='!') {
            if (blues.getc()=='B') { //button data
                bnum = blues.getc(); //button number
                bhit = blues.getc(); //button hit = 1; miss = 0;
                
                if ((bnum>='1')&&(bnum<='8')){ //is a number button 1..4
                   current=bnum;
                   //pc.printf("Button Pressed %c bhit = %c PreviousButton = %c CurrentButton = %c\n\r", bnum, bhit, previousButton, current);
                   previousButton = current;
                   if(current=='1'){
                    color=YELLOW;
                    }
                    if(current=='2'){
                    color=BLUE;
                     }
                    if(current=='3'){
                     color=0x551A8B; //Purple
                        }
                    if(current=='4'){
                      color=GREEN;
                    }
                    if(current =='5' && bhit == '0'){
                        color=BLACK;
                        thread3.terminate();
                         //thread3.join();
                        fclose(wave_file);
                        if(wave_file != NULL){
                         pc.printf("after close t3, file is not NULL\n\r");
                        }
                        Thread::wait(100);
                        thread6.start(t6);
                         }
                         
                     if(current =='6' && bhit == '0'){
                     color=RED;
                     thread6.terminate();
                     //thread6.join();
                    fclose(wave_file);
                    if(wave_file != NULL){
                     pc.printf("after close t6, file is not NULL\n\r");
                    }
                    Thread::wait(100);
                    thread3.start(t3);
                    }    
                    if(current =='8' && bhit == '0'){
                      color=ORANGE;
                      k = k*2;
                      if(k > 8.0){
                        k = 8.0;
                        }
                      
                    
                    } 
                    if(current =='7' && bhit == '0'){
                      color=0x00FFFF;
                      k = k*0.5;
                      
                      if(k < 0.125){
                        k = 0.125;
                      }
                    
                    }      
                    
                    
                }//end of if bnum 1 -8
             }//end of if getc B      
        }//end of if getc !
         three_slots.release(); 
        }// end of if readable
        Thread::yield();
        
        
    
    
    
    Thread::wait(50);
   
    }// end of while loop
    
    }



 
int main() {
    thread2.start((t2));
    thread3.start(t3);
    thread4.start((t4));
    thread5.start((t5));

    test = &thread4;
    test->set_priority(osPriorityHigh);
    
    
    
    previousButton = '0';
    
    k = 1.0;
    while(1) {
        for(double x=0.0; x <= 100/k; x = x + 1) {
            w = 3.14159*k/100.0;
            y = sin(w*x); 
            red= y*y*y;
            blue= y*y*y;
            green= y*y*y;
            Thread::wait(1000.0*.025);
        }
        //red= 0.0;
        //blue= 0.0;
        //green= 0.0;
        //Thread::wait(1000.0*2.5/w);
    }
    
    
    
    
}