program for RoPiT

Dependencies:   Servo mbed

main.cpp

Committer:
s1222546
Date:
2014-08-27
Revision:
0:5e1d466088b4

File content as of revision 0:5e1d466088b4:

#include "mbed.h"
#include "Servo.h"

//pushbuttons
InterruptIn interruptbutton(D8);
DigitalIn button1(D7);
DigitalIn button2(D6);
DigitalIn button3(D5);

//LEDs
DigitalOut ledon(D4);
DigitalOut led1(D1);
DigitalOut led2(D2);
DigitalOut led3(D3);

//myleds
DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);

//buzzer
DigitalOut buzzer(PTC5);

//servo's
Servo servo1(D13);
Servo servo2(D10);
Servo servo3(D11);
Servo servo4(D12);
Servo servo5(D9);

//transistoren
DigitalOut transistor1(PTA17);
DigitalOut transistor2(PTC16);
DigitalOut transistor3(PTC17);
DigitalOut transistor4(PTA16);
DigitalOut transistor5(PTC13);

//potmeters
AnalogIn POT1(A1);
AnalogIn POT2(A2);
AnalogIn POT3(A3);
AnalogIn POT4(A4);
AnalogIn POT5(A5);

//timer
Timer timer;

//variabelen
float bnp=0;
float menu=1;
float song;
float learning;
float m;
float tellen;
float finger;
float a;
float p;
float transistors;
float o;
float c;
float servo_melody_run;
float feedback_melody_run;
float POT_melody_run;
float hoek1a;
float hoek2a;
float hoek3a;
float hoek4a;
float hoek5a;
float hoek1b;
float hoek2b;
float hoek3b;
float hoek4b;
float hoek5b;
float hoek1;
float hoek2;
float hoek3;
float hoek4;
float hoek5;
extern "C" void NVIC_SystemReset();

//programma reset
void startover()
{
    led1=1;
    wait(0.2);
    led2=1;
    wait(0.2);
    led3=1;
    wait(0.5);
    led1=0;
    led2=0;
    led3=0;
    menu=1;
    NVIC_SystemReset();
}


//programma onderdelen aansturing servo's
// transistors_on
void transistors_on()
{
    transistor1=1;
    transistor2=1;
    transistor3=1;
    transistor4=1;
    transistor5=1;
}

// transistors_off
void transistors_off()
{
    transistor1=0;
    transistor2=0;
    transistor3=0;
    transistor4=0;
    transistor5=0;
}

// aftellen
void aftellen()
{
    buzzer=1;
    wait(0.2);
    buzzer=0;
    wait(c-0.2);
    buzzer=1;
    wait(0.2);
    buzzer=0;
    wait(c-0.2);
    buzzer=1;
    wait(0.2);
    buzzer=0;
    wait(c-0.2);
    buzzer=1;
    wait(0.2);
    buzzer=0;
    wait(c-0.2);
    m=1;
}

//aftellen_kalibreren
void aftellen_kalibreren()
{
    buzzer=1;
    wait(0.2);
    buzzer=0;
    wait(0.8);
    buzzer=1;
    wait(0.2);
    buzzer=0;
    wait(0.8);
    buzzer=1;
    wait(0.2);
    buzzer=0;
    wait(0.8);
    buzzer=1;
    wait(0.2);
    buzzer=0;
    wait(0.8);
}


//kalibreren
void kalibreren()
{
    aftellen_kalibreren();
    hoek1a=POT1.read();
    hoek2a=POT2.read();
    hoek3a=POT3.read();
    hoek4a=POT4.read();
    hoek5a=POT5.read();
    wait(5);
    aftellen_kalibreren();
    hoek1b=POT1.read();
    hoek2b=POT2.read();
    hoek3b=POT3.read();
    hoek4b=POT4.read();
    hoek5b=POT5.read();

    hoek1=0.75*(hoek1a-hoek1b);
    hoek2=0.75*(hoek2a-hoek2b);
    hoek3=0.75*(hoek3a-hoek3b);
    hoek4=0.75*(hoek4a-hoek4b);
    hoek5=0.75*(hoek5a-hoek5b);
    led1=0;
    led2=0;
    led3=0;
}

// melody_1
void melody_1()
{
    if(m==0) {
        aftellen();
    }
    if(m==1) {
        finger=1;
        ++o;
    }
    if(m==2) {
        finger=2;
        ++o;
    }
    if(m==3) {
        finger=3;
        ++o;
    }
    if(m==4) {
        finger=4;
        ++o;
    }
    if(m==5) {
        finger=5;
        ++o;
    }
    if(m==6) {
        finger=0;
        feedback_melody_run=0;
        servo_melody_run=0;
        POT_melody_run=0;
        tellen=1;
        timer.stop();
        timer.reset();
    }
}


// melody_2
void melody_2()
{
    if(m==0) {
        aftellen();
    }
    if(m==1) {
        finger=1;
        ++o;
    }
    if(m==2) {
        finger=5;
        ++o;
    }
    if(m==3) {
        finger=2;
    }
    if(m==4) {
        finger=4;
        ++o;
    }
    if(m==5) {
        finger=3;
        ++o;
    }
    if(m==6) {
        finger=0;
        feedback_melody_run=0;
        servo_melody_run=0;
        POT_melody_run=0;
        tellen=1;
        timer.stop();
        timer.reset();
    }
}

// melody_3
void melody_3()
{
    if(m==0) {
        aftellen();
    }
    if(m==1) {
        finger=1;
        ++o;
    }
    if(m==2) {
        finger=2;
        ++o;
    }
    if(m==3) {
        finger=5;
        ++o;
    }
    if(m==4) {
        finger=4;
        ++o;
    }
    if(m==5) {
        finger=3;
        ++o;
    }
    if(m==6) {
        finger=0;
        feedback_melody_run=0;
        servo_melody_run=0;
        POT_melody_run=0;
        tellen=1;
        m=0;
        timer.stop();
        timer.reset();
    }
}

// melody
void melody()
{
    if(song==1) {
        melody_1();
    }
    if(song==2) {
        melody_2();
    }
    if(song==3) {
        melody_3();
    }
}

//POT
void POT()
{
    melody();
    if(finger==1) {
        if(POT1.read()>=hoek1) {
            ++m;
        }
    }
    if(finger==2) {
        if(POT2.read()>=hoek2) {
            ++m;
        }
    }
    if(finger==3) {
        if(POT3.read()>=hoek3) {
            ++m;
        }
    }
    if(finger==4) {
        if(POT4.read()>=hoek4) {
            ++m;
        }
    }
    if(finger==5) {
        if(POT5.read()>=hoek5) {
            ++m;
        }
    }
}

// servo
void servo()
{
    melody();
    if(finger==1) {
        transistor1=1;
        servo1=1;
        wait(a);
        servo1=0.5;
    }
    if(finger==2) {
        transistor2=1;
        servo2=1;
        wait(a);
        servo2=0.5;
    }
    if(finger==3) {
        transistor3=1;
        servo3=1;
        wait(a);
        servo3=0.5;
    }
    if(finger==4) {
        transistor4=1;
        servo4=0;
        wait(a);
        servo4=0.5;
    }
    if(finger==5) {
        transistor5=1;
        servo5=0;
        wait(a);
        servo5=0.5;
    }
    ++m;
}

//feedback
void feedback()
{
    melody();
    if(finger==1) {
        timer.start();
        while(m==o) {
            if(POT1.read()>=hoek1) {
                ++m;
            }
            if(timer.read()>=c+a) {
                transistor1=1;
                servo1=1;
                wait(a);
                servo1=0.5;
                wait(a);
                transistor1=0;
                ++m;
            }
        }
    }
    if(finger==2) {
        timer.start();
        while(m==o) {
            if(POT2.read()>=hoek2) {
                ++m;
            }
            if(timer.read()>=2*c+a) {
                transistor2=1;
                servo2=1;
                wait(a);
                servo2=0.5;
                wait(a);
                transistor2=0;
                ++m;
            }
        }
    }
    if(finger==3) {
        timer.start();
        while(m==o) {
            if(POT3.read()>=hoek3) {
                ++m;
            }
            if(timer.read()>=2*c+a) {
                transistor3=1;
                servo3=1;
                wait(a);
                servo3=0.5;
                wait(a);
                transistor3=0;
                ++m;
            }
        }
    }
    if(finger==4) {
        timer.start();
        while(m==o) {
            if(POT4.read()>=hoek4) {
                ++m;
            }
            if(timer.read()>=3*c+a) {
                transistor4=1;
                servo4=1;
                wait(a);
                servo4=0.5;
                wait(a);
                transistor4=0;
                ++m;
            }
        }
    }
    if(finger==5) {
        timer.start();
        while(m==o) {
            if(POT5.read()>=hoek5) {
                ++m;
            }
            if(timer.read()>=4*c+a) {
                transistor5=1;
                servo5=1;
                wait(a);
                servo5=0.5;
                wait(a);
                transistor5=0;
                ++m;
            }
        }
    }
}

//servo_melody()
void servo_melody()
{
    if(transistors==1) {
        transistors_on();
        transistors=0;
        servo_melody_run=1;
        m=0;
    }
    while(servo_melody_run==1) {
        servo();
    }
}

//POT_melody()
void POT_melody()
{
    if(transistors==1) {
        transistors_off();
        transistors=0;
        POT_melody_run=1;
        m=0;
    }
    while(POT_melody_run==1) {
        POT();
    }
}

//feedback_melody()
void feedback_melody()
{
    if(transistors==1) {
        transistors_off();
        transistors=0;
        feedback_melody_run=1;
        m=0;
        o=0;
    }
    while(feedback_melody_run==1) {
        feedback();
    }
}








int main()
{
    led1=0;
    led2=0;
    led3=0;
    myled1=1;
    myled2=1;
    myled3=1;
    while(1) {
        ledon=1;
        interruptbutton.fall(&startover);
//menu
        if(button1==0) {
            if(bnp==1 && menu==1) {
                led1=1;
                song=1;
                menu=2;
                wait(0.5);
                led1=0;
                bnp=0;
            }
            if(bnp==1 && menu==2) {
                led1=1;
                learning=1;
                menu=3;
                wait(0.5);
                led1=0;
                bnp=0;
            }
            if(bnp==1 && menu==3) {
                led1=1;
                p=60;
                menu=4;
                wait(0.5);
                led1=0;
                bnp=0;
            }
        }
        if(button2==0) {
            if(bnp==1 && menu==1) {
                led2=1;
                song=2;
                menu=2;
                wait(0.5);
                led2=0;
                bnp=0;
            }
            if(bnp==1 && menu==2) {
                led2=1;
                learning=2;
                menu=3;
                wait(0.5);
                led2=0;
                bnp=0;
            }
            if(bnp==1 && menu==3) {
                led2=1;
                p=100;
                menu=4;
                wait(0.5);
                led2=0;
                bnp=0;
            }
        }
        if(button3==0) {
            if(bnp==1 && menu==1) {
                led3=1;
                song=3;
                menu=2;
                wait(0.5);
                led3=0;
                bnp=0;
            }
            if(bnp==1 && menu==2) {
                led3=1;
                learning=3;
                menu=3;
                wait(0.5);
                led3=0;
                bnp=0;
            }
            if(bnp==1 && menu==3) {
                led3=1;
                p=120;
                menu=4;
                wait(0.5);
                led3=0;
                bnp=0;
            }
            if(button2==0 && bnp==0) {
                led3=1;
                led2=1;
                if(button1==0 &&bnp==0) {
                    led1=1;
                    p=100;
                    kalibreren();
                }
            }
        }
        if(button1==1 && button2==1 && button3==1) {
            bnp=1;
        }
//programma
        if(menu==4) {
            c=60/p;
            a=0.5*c;
            if(learning==1) {
                transistors=1;
                POT_melody();
            }
            if(learning==2) {
                 transistors=1;
                servo_melody();
                wait(3);
                transistors=1;
                feedback_melody();
                wait(3);
                transistors=1;
                servo_melody();
                wait(3);
                transistors=1;
                feedback_melody();
                wait(3);
                transistors=1;
                servo_melody();
                wait(3);
                transistors=1;
                feedback_melody();
            }
            if(learning==3) {
               
                transistors=1;
                servo_melody();
                wait(3);
                transistors=1;
                POT_melody();
                wait(3);
                transistors=1;
                servo_melody();
                wait(3);
                transistors=1;
                POT_melody();
                wait(3);
                transistors=1;
                servo_melody();
                wait(3);
                transistors=1;
                POT_melody();               
            }
            menu=1;
        }
    }
}