control for robotic arm that can play chess using a granular gripper

Dependencies:   Encoder mbed HIDScope Servo MODSERIAL

Fork of chessRobot by a steenbeek

Committer:
annesteenbeek
Date:
Tue Oct 27 16:21:20 2015 +0100
Revision:
115:d8d2968981f3
Parent:
110:a6439e13be8b
Child:
116:8b812e268b85
connected calibration with ticker, when calibration ready, start rest of tickers

Who changed what in which revision?

UserRevisionLine numberNew contents of line
annesteenbeek 59:fe00be2cf8fd 1 /*
annesteenbeek 59:fe00be2cf8fd 2 ________ ____ __ __
annesteenbeek 59:fe00be2cf8fd 3 / ____/ /_ ___ __________ / __ \____ / /_ ____ / /_
annesteenbeek 59:fe00be2cf8fd 4 / / / __ \/ _ \/ ___/ ___/ / /_/ / __ \/ __ \/ __ \/ __/
annesteenbeek 59:fe00be2cf8fd 5 / /___/ / / / __(__ |__ ) / _, _/ /_/ / /_/ / /_/ / /_
annesteenbeek 59:fe00be2cf8fd 6 \____/_/ /_/\___/____/____/ /_/ |_|\____/_.___/\____/\__/
annesteenbeek 59:fe00be2cf8fd 7
annesteenbeek 59:fe00be2cf8fd 8 */
annesteenbeek 59:fe00be2cf8fd 9
annesteenbeek 12:61759f94c07a 10 #include "mbed.h"
annesteenbeek 13:4837b36b9a68 11 #include "config.h" // settings and pin configurations
annesteenbeek 13:4837b36b9a68 12 #include "actuators.h"
annesteenbeek 15:5fa388ba22cb 13 #include "buttons.h"
annesteenbeek 25:874675516927 14 #include "debug.h"
annesteenbeek 78:0cc7c64ba94c 15 #include "emg.h"
annesteenbeek 6:b957d8809e7c 16
annesteenbeek 110:a6439e13be8b 17 int a =4;
annesteenbeek 110:a6439e13be8b 18
annesteenbeek 115:d8d2968981f3 19 Ticker switchesTick, debugTick, motorTick, EMGTick, safetyTick calibrateTick;
annesteenbeek 115:d8d2968981f3 20 volatile bool switches_go=false, debug_go=false, motor_go=false, emg_go=false, safety_go=false, cal_go=false;
annesteenbeek 0:525558a26464 21
annesteenbeek 30:a20f16bf8dda 22 void switches_activate(){switches_go=true;};
annesteenbeek 30:a20f16bf8dda 23 void debug_activate(){debug_go=true;};
annesteenbeek 30:a20f16bf8dda 24 void motor_activate(){motor_go=true;};
annesteenbeek 60:20945383ad1b 25 void emg_activate(){emg_go=true;};
annesteenbeek 79:cf500b63f349 26 void safety_activate(){safety_go=true;};
annesteenbeek 115:d8d2968981f3 27 void calibration_activate(){cal_go=true;};
annesteenbeek 115:d8d2968981f3 28
annesteenbeek 115:d8d2968981f3 29 void tickerAttach(){
annesteenbeek 115:d8d2968981f3 30 calibrateTick.detach(&calibration_activate); // stop calibration ticker
annesteenbeek 115:d8d2968981f3 31 EMGTick.attach(&emg_activate, 0.005f);
annesteenbeek 115:d8d2968981f3 32 switchesTick.attach(&switches_activate, 0.02f);
annesteenbeek 115:d8d2968981f3 33 debugTick.attach(&debug_activate, 0.03f);
annesteenbeek 115:d8d2968981f3 34 motorTick.attach(&motor_activate, motorCall);
annesteenbeek 115:d8d2968981f3 35 safetyTick.attach(&safety_activate, 0.001f);
annesteenbeek 115:d8d2968981f3 36 }
annesteenbeek 59:fe00be2cf8fd 37
annesteenbeek 62:6c566e6f9664 38 double motorCall = 0.01; // set motor frequency global so it can be used for speed.
annesteenbeek 98:25528494287d 39 const int sample = 0; // Constant for mode switching for program readability
annesteenbeek 98:25528494287d 40 const int normalize = 1; // Constant for mode switching for program readability
annesteenbeek 98:25528494287d 41 bool mode = normalize; // Set program mode
annesteenbeek 110:a6439e13be8b 42 bool calReady = false; // flag for calibration ready
annesteenbeek 29:e4f3455aaa0b 43
annesteenbeek 98:25528494287d 44 int main(){
annesteenbeek 115:d8d2968981f3 45 motorInit();
annesteenbeek 115:d8d2968981f3 46 calibrateTick.attach(&calibration_activate, motorCall);
annesteenbeek 32:2006977785f5 47
annesteenbeek 0:525558a26464 48 while (true) {
annesteenbeek 115:d8d2968981f3 49 if(cal_go){
annesteenbeek 115:d8d2968981f3 50 cal_go=false;
annesteenbeek 115:d8d2968981f3 51 calReady = calibrateMotors();
annesteenbeek 115:d8d2968981f3 52 }
annesteenbeek 115:d8d2968981f3 53
annesteenbeek 115:d8d2968981f3 54 if(calReady && !tickersActivated){ // when done with calibration, start tickers
annesteenbeek 115:d8d2968981f3 55 tickerAttach();
annesteenbeek 115:d8d2968981f3 56 tickersActivated = true;
annesteenbeek 115:d8d2968981f3 57 }
annesteenbeek 115:d8d2968981f3 58
annesteenbeek 78:0cc7c64ba94c 59 if(emg_go){
annesteenbeek 78:0cc7c64ba94c 60 emg_go=false;
annesteenbeek 78:0cc7c64ba94c 61 readEMG();
annesteenbeek 78:0cc7c64ba94c 62 }
annesteenbeek 98:25528494287d 63 if(mode==0){ // wait until EMG is done with calibration
annesteenbeek 98:25528494287d 64 if(safety_go){
annesteenbeek 98:25528494287d 65 safety_go=false;
annesteenbeek 98:25528494287d 66 safety();
annesteenbeek 98:25528494287d 67 }
annesteenbeek 98:25528494287d 68 if(emg_go){
annesteenbeek 98:25528494287d 69 emg_go=false;
annesteenbeek 98:25528494287d 70 readEMG();
annesteenbeek 98:25528494287d 71 }
annesteenbeek 98:25528494287d 72 if(switches_go){
annesteenbeek 98:25528494287d 73 switches_go=false;
annesteenbeek 98:25528494287d 74 checkSwitches();
annesteenbeek 98:25528494287d 75 }
annesteenbeek 98:25528494287d 76 if(debug_go){
annesteenbeek 98:25528494287d 77 debug_go=false;
annesteenbeek 98:25528494287d 78 debugProcess();
annesteenbeek 98:25528494287d 79 }
annesteenbeek 98:25528494287d 80 if(motor_go){
annesteenbeek 98:25528494287d 81 motor_go=false;
annesteenbeek 98:25528494287d 82 motorControl();
annesteenbeek 98:25528494287d 83 }
annesteenbeek 30:a20f16bf8dda 84 }
annesteenbeek 0:525558a26464 85 }
annesteenbeek 0:525558a26464 86 }