Test fork nhi
Dependencies: SDFileSystem mbed-rtos mbed emic2
Fork of BAT_senior_design by
main.cpp
- Committer:
- aismail1997
- Date:
- 2017-10-25
- Revision:
- 17:08c575082052
- Parent:
- 16:5c91af9b4e7c
- Child:
- 18:d14bf57f435b
File content as of revision 17:08c575082052:
#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);
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);
// INITIALIZE VARIABLES
// add mode, reset buttons
int start = 0;
int submit = 0;
int state = 0;
int state2 = 0; // Button begins in up state
///int state2 = 2;
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
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) {
}*/
}
}
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
}
}
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);
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);
}
led1 = 1;
//led2 = 1;
Thread t3(button_thread);
Thread t4(button2_thread);
t3.start(button_thread);
t4.start(button2_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
}
}
