Working reset, flipped logic

Dependencies:   SDFileSystem emic2 mbed-rtos mbed

Fork of BAT_senior_design_Nhi by BAT

main.cpp

Committer:
aismail1997
Date:
2017-10-27
Revision:
18:d14bf57f435b
Parent:
17:08c575082052
Child:
19:ceac47be2e64

File content as of revision 18:d14bf57f435b:

#include "mbed.h"
#include "rtos.h"
#include "wave_player.h"
#include "SDFileSystem.h"
#include "button.h"

// DEFINE I/O
PwmOut myservo(p21);
DigitalIn pb1 (p20);
PwmOut myservo2(p22);
DigitalIn pb2 (p19);
PwmOut myservo3(p23);
DigitalIn pb3 (p18);
PwmOut myservo4(p24);
DigitalIn pb4 (p17);
PwmOut myservo5(p25);
DigitalIn pb5 (p16);
PwmOut myservo6(p26);
DigitalIn pb6 (p15);

//DigitalOut led1(LED1);
//DigitalOut led3(LED3);
//DigitalOut led4(LED4);

//AnalogIn linpot(p20);
//Serial pc(USBTX, USBRX);
//SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
//AnalogOut DACout(p26);
//wave_player waver(&DACout);
button button1(myservo, pb1);
button button2(myservo2, pb2);
button button3(myservo3, pb3);
button button4(myservo4, pb4);
button button5(myservo5, pb5);
button button6(myservo6, pb6);

// INITIALIZE VARIABLES
// add mode, reset buttons
int start = 0;
int submit = 0;
// Buttons begins in up state
int state = 0;
int state2 = 0;
int state3 = 0;
int state4 = 0;
int state5 = 0;
int state6 = 0;
int count = 0;

// FUNCTIONS
// play a file on the speaker
/*void playSound(wave_player waver)
{
    FILE *wave_file;
    wave_file=fopen("/sd/lesson.wav","r");
    waver.play(wave_file);
    fclose(wave_file);
}*/

// THREADS

// thread for the custom button
//int count = 0;

void button_thread()
{
    while(true) {
        // state 0 - button is up, pb = 0
        if (pb1 == 0 && state == 3) {
            // nothing happens here, servo is still
            state = 0;
        }
        // state 1 - button is moving down, pb = 1
        if (pb1 == 1 && state == 0) {
            button1.moveServoIn();
            state = 1;
        }
        // state 2 - button is down, pb = 0
        if (pb1 == 0 && state == 1) {
            // nothing happens here, servo is still
            state = 2;
        }
        // state 3 - button is moving up, pb = 1
        if (pb1 == 1 && state == 2) {
            button1.moveServoOut();
            state = 3;
        }
        // state 4 - handle debouncing while button is down
        /*if (pb1 = 1 && state == 2) {
            count++;
        }*/
    }
}

void button2_thread()
{
    while(true) {
        // state 0 - button is up, pb = 0
        if (pb2 == 0 && state2 == 3) {
            // nothing happens here, servo is still
            state2 = 0;
            //led3 = 0;
            //led4 = 0;
        }
        // state 1 - button is moving down, pb = 1
        if (pb2 == 1 && state2 == 0) {
            button2.moveServoIn();
            state2 = 1;
            //led3 = 0;
            //led4 = 1;
        }
        // state 2 - button is down, pb = 0
        if (pb2 == 0 && state2 == 1) {
            // nothing happens here, servo is still
            state2 = 2;
            //led3 = 1;
            //led4 = 0;
        }
        // state 3 - button is moving up, pb = 1
        if (pb2 == 1 && state2 == 2) {
            button2.moveServoOut();
            state2 = 3;
            //led3 = 1;
            //led4 = 1;
        }
        // state 4 - handle debouncing while button is down
        /*if (pb2 = 1 && state2 == 2) {
            
        }*/

        Thread::wait(100); // wait till thread is done
    }
}

// thread for the custom button
void button3_thread()
{
    while(true) {
        // state 0 - button is up, pb = 0
        if (pb3 == 0 && state3 == 3) {
            // nothing happens here, servo is still
            state3 = 0;
        }
        // state 1 - button is moving down, pb = 1
        if (pb3 == 1 && state3 == 0) {
            button3.moveServoIn();
            state3 = 1;
        }
        // state 2 - button is down, pb = 0
        if (pb3 == 0 && state3 == 1) {
            // nothing happens here, servo is still
            state3 = 2;
        }
        // state 3 - button is moving up, pb = 1
        if (pb3 == 1 && state3 == 2) {
            button3.moveServoOut();
            state3 = 3;
        }
        // state 4 - handle debouncing while button is down
        /*if (pb3 = 1 && state3 == 2) {
            
        }*/

    }
}

// thread for the custom button
void button4_thread()
{
    while(true) {
        // state 0 - button is up, pb = 0
        if (pb4 == 0 && state4 == 3) {
            // nothing happens here, servo is still
            state4 = 0;
        }
        // state 1 - button is moving down, pb = 1
        if (pb4 == 1 && state4 == 0) {
            button4.moveServoIn();
            state4 = 1;
        }
        // state 2 - button is down, pb = 0
        if (pb4 == 0 && state4 == 1) {
            // nothing happens here, servo is still
            state4 = 2;
        }
        // state 3 - button is moving up, pb = 1
        if (pb4 == 1 && state4 == 2) {
            button4.moveServoOut();
            state4 = 3;
        }
        // state 4 - handle debouncing while button is down
        /*if (pb4 = 1 && state4 == 2) {
            
        }*/

    }
}

// thread for the custom button
void button5_thread()
{

    while(true) {
        // state 0 - button is up, pb = 0
        if (pb5 == 0 && state5 == 3) {
            // nothing happens here, servo is still
            state5 = 0;
        }
        // state 1 - button is moving down, pb = 1
        if (pb5 == 1 && state5 == 0) {
            button5.moveServoIn();
            state5 = 1;
        }
        // state 2 - button is down, pb = 0
        if (pb5 == 0 && state5 == 1) {
            // nothing happens here, servo is still
            state5 = 2;
        }
        // state 3 - button is moving up, pb = 1
        if (pb5 == 1 && state5 == 2) {
            button5.moveServoOut();
            state5 = 3;
        }
        // state 4 - handle debouncing while button is down
        /*if (pb5 = 1 && state5 == 2) {
            
        }*/

    }
}

// thread for the custom button
void button6_thread()
{
    while(true) {
        // state 0 - button is up, pb = 0
        if (pb6 == 0 && state6 == 3) {
            // nothing happens here, servo is still
            state6 = 0;
        }
        // state 1 - button is moving down, pb = 1
        if (pb6 == 1 && state6 == 0) {
            button6.moveServoIn();
            state6 = 1;
        }
        // state 2 - button is down, pb = 0
        if (pb6 == 0 && state6 == 1) {
            // nothing happens here, servo is still
            state6 = 2;
        }
        // state 3 - button is moving up, pb = 1
        if (pb6 == 1 && state6 == 2) {
            button6.moveServoOut();
            state6 = 3;
        }
        // state 4 - handle debouncing while button is down
        /*if (pb6 = 1 && state6 == 2) {
            
        }*/

    }
}

void submit_thread()
{
    Thread::wait(500); // wait till thread is done
}

void start_thread()
{
    // read pb_start
    // if 1
    start = 1;
    //pc.printf("start %d ", start);
    // else 0
    Thread::wait(500); // wait till thread is done
}


int main()
{
    // SETUP
    // pull up the pushbutton to prevent bouncing
    pb1.mode(PullUp);
    pb2.mode(PullUp);
    pb3.mode(PullUp);
    pb4.mode(PullUp);
    pb5.mode(PullUp);
    pb6.mode(PullUp);
    wait(.001);

    // servo begins at 30 degrees
    // replace with a button setup function
    for(int i=0; i<=3; i++) {
        myservo = i/100.0;
        wait(0.01);
    }
    for(int i=0; i<=3; i++) {
        myservo2 = i/100.0;
        wait(0.01);
    }
    
    for(int i=0; i<=3; i++) {
        myservo3 = i/100.0;
        wait(0.01);
    }
    
    for(int i=0; i<=3; i++) {
        myservo4 = i/100.0;
        wait(0.01);
    }
    
    for(int i=0; i<=3; i++) {
        myservo5 = i/100.0;
        wait(0.01);
    }

    for(int i=0; i<=3; i++) {
        myservo6 = i/100.0;
        wait(0.01);
    }
    
    //led1 = 1;
    //led2 = 1;
    Thread t1(button_thread);
    Thread t2(button2_thread);
    Thread t3(button3_thread);
    Thread t4(button4_thread);
    Thread t5(button5_thread);
    Thread t6(button6_thread);
    t1.start(button_thread);
    t2.start(button2_thread);
    t3.start(button3_thread);
    t4.start(button4_thread);
    t5.start(button5_thread);
    t6.start(button6_thread);

    // start threads for reset, mode, start
    //Thread t1(start_thread);
    //pc.printf("start thread");
    //Thread t2(submit_thread);
    // setup SDcard and Speaker

    // when started
    //while (start == 0){}
    //Thread t3(button_thread);
    //pc.printf("button thread");
    //Thread t4(button2_thread);
    //pc.printf("button2 thread");

    //Thread t3(submit_thread);

    // when submitted
    //while (submit == 0) {}

    // start button threads and submit thread
    // if submit close button threads and submit thread
    // check result
    // play results on speaker
    // save results

    // read linear potentiometer
    //if (linpot < 0.5) {
    //float potval = linpot;
    //pc.printf("linear pot: %f\n", potval);
    
    // MAIN THREAD
    while(true) {
        Thread::wait(500); // wait till thread is done
    }
}