a

Dependencies:   4DGL-uLCD-SE Queue SDFileSystem mbed wave_player

Fork of WavePlayer_HelloWorld by jim hamblen

main.cpp

Committer:
ychen644
Date:
2017-04-26
Revision:
2:09abe388d23e
Parent:
1:5b8e223e983d

File content as of revision 2:09abe388d23e:

//
//#include "mbed.h"
//#include "SDFileSystem.h"
//#include "wave_player.h"
//
//
//SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
//
//AnalogOut DACout(p18);
//
//wave_player waver(&DACout);
//
//int main()
//{
//    FILE *wave_file;
//    printf("\n\n\nHello, wave world!\n");
//    wave_file=fopen("/sd/wavfiles/increasing.wav","r");
//    waver.play(wave_file);
//    fclose(wave_file);
//}


#include "mbed.h"
#include "uLCD_4DGL.h"
#include "queue.h"
#include "SDFileSystem.h"
#include "wave_player.h"
#include <string>
#include <vector>
#include <stdio.h>
 
SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card

AnalogOut DACout(p18);

wave_player waver(&DACout);
 
 // uLCD
 uLCD_4DGL uLCD(p28,p27,p29); // serial tx, serial rx, reset pin;
 
 // Serial PC
 Serial myPc( USBTX, USBRX );
 
 // Bluetooth
 Serial blue(p9,p10);
 
 // Queue
 Queue myQueue(1,15);
 Queue tempQueue(1,15);
 
 // Shiftbrite LED
 DigitalOut latch(p15);
 DigitalOut enable(p16);
 SPI spi(p11, p12, p13);
 
 // LED code
 void RGB_LED(int red, int green, int blue) {
    unsigned int low_color=0;
    unsigned int high_color=0;
    high_color=(blue<<4)|((red&0x3C0)>>6);
    low_color=(((red&0x3F)<<10)|(green));
    spi.write(high_color);
    spi.write(low_color);
    latch=1;
    latch=0;
}
FILE *wave_file;
void speaker(const char* path) {
     wave_file=fopen(path,"r");
     waver.play(wave_file);
     fclose(wave_file);
}

// vector data structure that holds patient info
vector <string> v;

string getCommand(int i) {
     string tempStr = v.at(i);
     int pos = tempStr.find(",");
     return tempStr.substr(0,pos);
}

string getName(int i) {
    string tempStr = v.at(i);
    int pos = tempStr.find(",");
    string command = tempStr.substr(0,pos);
    tempStr.erase(0,pos + 1);
    pos = tempStr.find(",");
    return tempStr.substr(0,pos);
       
}

string getNumber(int i) {
   string tempStr = v.at(i);
   int pos = tempStr.find(",");
   string command = tempStr.substr(0,pos);
   tempStr.erase(0,pos + 1);
   pos = tempStr.find(",");
   string name = tempStr.substr(0,pos);
   tempStr.erase(0,pos + 1);
   return tempStr;   
}

int main() 
 {
    //FILE *wave_file;
    //printf("\n\n\nHello, wave world!\n");
    //wave_file=fopen("/sd/wavfiles/increasing.wav","r");
    //waver.play(wave_file);
    //fclose(wave_file);
    // variables for Serial Port 
    char value[100];
    
    // starting wait time
    int waitTime = 0;
    
    // variables used for getting bluetooth button
    char bnum=0;
    char bhit=0;
    
    // LED variables
    int r=0;
    int g=50;
    int b=0;
    spi.format(16,0);
    spi.frequency(500000);
    enable=0;
    latch=0;
    wait(1);
    
    while(1) {
        // Get bluetooth signal
        if (blue.readable()) {
            if (blue.getc()=='!') {
                if (blue.getc()=='B') { //button data packet
                    bnum = blue.getc(); //button number
                    bhit = blue.getc(); //1=hit, 0=release
                    if (bhit=='1')
                        uLCD.cls();
                    uLCD.locate(3,1);
                    //if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
                        switch (bnum) {
                            case '1': //number button 1
                                if (bhit=='1') {
                                    //uLCD.printf("Next patient");
                                    waitTime -= 15;
                                    //int patientNum = stoi(v.at(0));
                                    int patientNum = std::atoi(getNumber(0).c_str());
                                    switch (patientNum) {
                                        case 1:
                                            speaker("/sd/wavfiles/1.wav");
                                            break;
                                        case 2:
                                            speaker("/sd/wavfiles/2.wav");
                                            break;
                                        case 3:
                                            speaker("/sd/wavfiles/3.wav");
                                            break;
                                        case 4:
                                            speaker("/sd/wavfiles/4.wav");
                                            break;
                                        case 5:
                                            speaker("/sd/wavfiles/5.wav");
                                            break;
                                        case 6:
                                            speaker("/sd/wavfiles/6.wav");
                                            break;
                                        case 7:
                                            speaker("/sd/wavfiles/7.wav");
                                            break;
                                        case 8:
                                            speaker("/sd/wavfiles/8.wav");
                                            break;
                                        case 9:
                                            speaker("/sd/wavfiles/9.wav");
                                            break;
                                        case 10:
                                            speaker("/sd/wavfiles/10.wav");
                                            break;
                                    }
                                    v.erase(v.begin());
                                    myPc.putc('1');
                                }
                                break;
                            case '2': //number button 2
                                if (bhit=='1') {
                                    //uLCD.printf("Increase wait time");
                                    waitTime += 5;
                                    myPc.putc('2');
                                    speaker("/sd/wavfiles/increasing.wav");
                                }
                                break;
                            case '3': //number button 3
                                if (bhit=='1') {
                                    //uLCD.printf("Decrease wait time");
                                    waitTime -= 5;
                                    myPc.putc('3');
                                    speaker("/sd/wavfiles/decreasing.wav");
                                }
                                break;
                            case '4': //number button 4
                                if (bhit=='1') {
                                    //uLCD.printf("Change LED");
                                    if (r == 0) {
                                        r = 50;
                                        g = 0;
                                        speaker("/sd/wavfiles/busy.wav");
                                    } else {
                                        r = 0;
                                        g = 50;
                                        speaker("/sd/wavfiles/available.wav");
                                    }
                                }
                                break;
                        }
                    //}
                }
            }
        }
        // update LED color
        RGB_LED(r,g,b);
        
        // Display wait time on LCD
        uLCD.locate(0,14);
        if (waitTime < 0)
            waitTime = 0;
        uLCD.printf("Wait Time: %d", waitTime);
        
        // get input from Serial Port
        if (myPc.readable()) {
            // store char[] in value
            myPc.gets(value, 20);
            // convert to string
            string temp (value);
            temp = value;
            // decode information
            // (command, name, number)
            int pos = temp.find(",");
            string command = temp.substr(0,pos);
            // if adding patient
            if (command == "Add") {
                v.push_back(temp);
                waitTime += 15;
            // if removing patient
            } else {
                temp.erase(0,pos + 1);
                pos = temp.find(",");
                string name = temp.substr(0,pos);
                // find patient in vector and remove
                for (int i = 0; i < v.size(); i++) {
                    // TODO
                    // make function that handles this
                    string tempStr = v.at(i);
                    int pos = tempStr.find(",");
                    string command = tempStr.substr(0,pos);
                    tempStr.erase(0,pos + 1);
                    pos = tempStr.find(",");
                    string currentName = tempStr.substr(0,pos);
                    if (currentName == name) {
                        v.erase(v.begin() + i);
                    }
                }
                waitTime -= 15;
            }         
            uLCD.cls();  
        } 
        // update patient list on LCD display
        for (int i = 0; i < v.size(); i++) {
              // TODO
              // make function that handles this
              /*string tempStr = v.at(i);
              int pos = tempStr.find(",");
              string command = tempStr.substr(0,pos);
              tempStr.erase(0,pos + 1);
              pos = tempStr.find(",");
              string name = tempStr.substr(0,pos);
              tempStr.erase(0,pos + 1);
              string number = tempStr;*/
              
              uLCD.locate(0,i*2);
              uLCD.printf("%s", getNumber(i));
              uLCD.locate(3,i*2);
              uLCD.printf("%s", getName(i));
                              
            }
    }
 }