Working reset, flipped logic

Dependencies:   SDFileSystem emic2 mbed-rtos mbed

Fork of BAT_senior_design_Nhi by BAT

Committer:
aismail1997
Date:
Wed Oct 18 14:41:04 2017 +0000
Revision:
13:b80dde24e9bc
Parent:
11:b302c71e300f
Child:
14:581a3b02f4c3
added comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aismail1997 0:9eda4611081a 1 #include "mbed.h"
aismail1997 6:1aa86ad19af9 2 #include "rtos.h"
aismail1997 9:418a4437a693 3 #include "wave_player.h"
aismail1997 9:418a4437a693 4 #include "SDFileSystem.h"
aismail1997 10:21268d8bf979 5 #include "button.h"
aismail1997 3:9ed43e974156 6
aismail1997 13:b80dde24e9bc 7 // DEFINE I/O
aismail1997 0:9eda4611081a 8 PwmOut myservo(p21);
aismail1997 0:9eda4611081a 9 DigitalIn pb1 (p20);
aismail1997 0:9eda4611081a 10 //AnalogIn linpot(p20);
aismail1997 0:9eda4611081a 11 Serial pc(USBTX, USBRX);
aismail1997 4:cc181f8f2bd1 12 //DigitalOut myled(LED1);
aismail1997 4:cc181f8f2bd1 13 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
aismail1997 4:cc181f8f2bd1 14 AnalogOut DACout(p26);
aismail1997 4:cc181f8f2bd1 15 wave_player waver(&DACout);
aismail1997 10:21268d8bf979 16 button button1(myservo, pb1);
aismail1997 4:cc181f8f2bd1 17
aismail1997 13:b80dde24e9bc 18 // INITIALIZE VARIABLES
aismail1997 13:b80dde24e9bc 19 // add mode, reset buttons
aismail1997 9:418a4437a693 20 int start = 0;
aismail1997 9:418a4437a693 21 int submit = 0;
aismail1997 10:21268d8bf979 22 // FIX THIS: button up: state = 2, button halfway: state = 0; button down: state = 1
aismail1997 10:21268d8bf979 23 int state = 2;
aismail1997 6:1aa86ad19af9 24
aismail1997 9:418a4437a693 25 // FUNCTIONS
aismail1997 13:b80dde24e9bc 26 // play a file on the speaker
aismail1997 9:418a4437a693 27 void playSound(wave_player waver)
aismail1997 9:418a4437a693 28 {
aismail1997 9:418a4437a693 29 FILE *wave_file;
aismail1997 13:b80dde24e9bc 30 wave_file=fopen("/sd/lesson.wav","r");
aismail1997 9:418a4437a693 31 waver.play(wave_file);
aismail1997 9:418a4437a693 32 fclose(wave_file);
aismail1997 9:418a4437a693 33 }
aismail1997 6:1aa86ad19af9 34
aismail1997 6:1aa86ad19af9 35 // THREADS
aismail1997 13:b80dde24e9bc 36
aismail1997 13:b80dde24e9bc 37 // thread for the custom button
aismail1997 6:1aa86ad19af9 38 void button_thread()
aismail1997 4:cc181f8f2bd1 39 {
aismail1997 10:21268d8bf979 40 // button was up and is moving down, move servo in
aismail1997 10:21268d8bf979 41 if (pb1 == 1 && state == 2) {
aismail1997 10:21268d8bf979 42 button1.moveServoIn();
aismail1997 10:21268d8bf979 43 state = 1;
aismail1997 10:21268d8bf979 44 }
aismail1997 10:21268d8bf979 45 // button was down and is being pushed again, move servo out
aismail1997 10:21268d8bf979 46 if (pb1 == 1 && state == 1) {
aismail1997 10:21268d8bf979 47 button1.moveServoOut();
aismail1997 10:21268d8bf979 48 state = 2;
aismail1997 10:21268d8bf979 49 }
aismail1997 13:b80dde24e9bc 50 Thread::wait(200); // wait till thread is done
aismail1997 4:cc181f8f2bd1 51 }
aismail1997 4:cc181f8f2bd1 52
aismail1997 6:1aa86ad19af9 53 void submit_thread()
aismail1997 4:cc181f8f2bd1 54 {
aismail1997 13:b80dde24e9bc 55 Thread::wait(500); // wait till thread is done
aismail1997 4:cc181f8f2bd1 56 }
aismail1997 4:cc181f8f2bd1 57
aismail1997 6:1aa86ad19af9 58 void start_thread()
aismail1997 4:cc181f8f2bd1 59 {
aismail1997 6:1aa86ad19af9 60 // read pb_start
aismail1997 6:1aa86ad19af9 61 // if 1
aismail1997 6:1aa86ad19af9 62 start == 1;
aismail1997 6:1aa86ad19af9 63 // else 0
aismail1997 13:b80dde24e9bc 64 Thread::wait(500); // wait till thread is done
aismail1997 4:cc181f8f2bd1 65 }
aismail1997 0:9eda4611081a 66
aismail1997 0:9eda4611081a 67 int main()
aismail1997 0:9eda4611081a 68 {
aismail1997 6:1aa86ad19af9 69 // SETUP
aismail1997 4:cc181f8f2bd1 70 // pull up the pushbutton to prevent bouncing
aismail1997 0:9eda4611081a 71 pb1.mode(PullUp);
aismail1997 0:9eda4611081a 72 wait(.001);
aismail1997 4:cc181f8f2bd1 73 // servo begins at 30 degrees
aismail1997 10:21268d8bf979 74 // replace with a button setup function
aismail1997 0:9eda4611081a 75 for(int i=0; i<=3; i++) {
aismail1997 0:9eda4611081a 76 myservo = i/100.0;
aismail1997 0:9eda4611081a 77 wait(0.01);
aismail1997 0:9eda4611081a 78 }
aismail1997 4:cc181f8f2bd1 79
aismail1997 6:1aa86ad19af9 80 // MAIN THREAD
aismail1997 6:1aa86ad19af9 81 while(true) {
aismail1997 6:1aa86ad19af9 82
aismail1997 6:1aa86ad19af9 83 // start threads for reset, mode, start
aismail1997 6:1aa86ad19af9 84 Thread t1(start_thread);
aismail1997 6:1aa86ad19af9 85 // setup SDcard and Speaker
aismail1997 10:21268d8bf979 86
aismail1997 6:1aa86ad19af9 87 // when started
aismail1997 6:1aa86ad19af9 88 while (start == 0) {}
aismail1997 6:1aa86ad19af9 89 Thread t2(button_thread);
aismail1997 10:21268d8bf979 90
aismail1997 10:21268d8bf979 91 //Thread t3(submit_thread);
aismail1997 6:1aa86ad19af9 92
aismail1997 6:1aa86ad19af9 93 // when submitted
aismail1997 10:21268d8bf979 94 //while (submit == 0) {}
aismail1997 10:21268d8bf979 95
aismail1997 6:1aa86ad19af9 96 // start button threads and submit thread
aismail1997 6:1aa86ad19af9 97 // if submit close button threads and submit thread
aismail1997 13:b80dde24e9bc 98 // check result
aismail1997 13:b80dde24e9bc 99 // play results on speaker
aismail1997 6:1aa86ad19af9 100 // save results
aismail1997 6:1aa86ad19af9 101
aismail1997 0:9eda4611081a 102 // read linear potentiometer
aismail1997 0:9eda4611081a 103 //if (linpot < 0.5) {
aismail1997 0:9eda4611081a 104 //float potval = linpot;
aismail1997 0:9eda4611081a 105 //pc.printf("linear pot: %f\n", potval);
aismail1997 13:b80dde24e9bc 106
aismail1997 13:b80dde24e9bc 107 Thread::wait(200); // wait till thread is done
aismail1997 0:9eda4611081a 108 }
aismail1997 0:9eda4611081a 109 }