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:
Thu Oct 29 20:06:41 2015 +0000
Revision:
126:56866cefaa08
Parent:
125:749b8ce2e040
Child:
127:831f03471efb
working led switching

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 124:f67ce69557db 16 #include "serialcom.h"
annesteenbeek 6:b957d8809e7c 17
annesteenbeek 125:749b8ce2e040 18 Ticker switchesTick, debugTick, motorTick, EMGTick, safetyTick, serialTick;
annesteenbeek 124:f67ce69557db 19 volatile bool switches_go=false, debug_go=false, motor_go=false, emg_go=false, safety_go=false, serial_go=false;
annesteenbeek 0:525558a26464 20
annesteenbeek 30:a20f16bf8dda 21 void switches_activate(){switches_go=true;};
annesteenbeek 30:a20f16bf8dda 22 void debug_activate(){debug_go=true;};
annesteenbeek 30:a20f16bf8dda 23 void motor_activate(){motor_go=true;};
annesteenbeek 60:20945383ad1b 24 void emg_activate(){emg_go=true;};
annesteenbeek 79:cf500b63f349 25 void safety_activate(){safety_go=true;};
annesteenbeek 124:f67ce69557db 26 void serial_activate(){serial_go=true;};
annesteenbeek 59:fe00be2cf8fd 27
annesteenbeek 111:43c0881fe7e7 28 void tickerAttach(){
annesteenbeek 98:25528494287d 29 EMGTick.attach(&emg_activate, 0.005f);
annesteenbeek 98:25528494287d 30 switchesTick.attach(&switches_activate, 0.02f);
annesteenbeek 124:f67ce69557db 31 debugTick.attach(&debug_activate, motorCall);
annesteenbeek 98:25528494287d 32 motorTick.attach(&motor_activate, motorCall);
annesteenbeek 98:25528494287d 33 safetyTick.attach(&safety_activate, 0.001f);
annesteenbeek 126:56866cefaa08 34
annesteenbeek 111:43c0881fe7e7 35 }
annesteenbeek 111:43c0881fe7e7 36
annesteenbeek 111:43c0881fe7e7 37 double motorCall = 0.01; // set motor frequency global so it can be used for speed.
annesteenbeek 111:43c0881fe7e7 38 const int sample = 0; // Constant for mode switching for program readability
annesteenbeek 111:43c0881fe7e7 39 const int normalize = 1; // Constant for mode switching for program readability
annesteenbeek 111:43c0881fe7e7 40 bool mode = normalize; // Set program mode
annesteenbeek 111:43c0881fe7e7 41 bool tickersActivated = false;
annesteenbeek 111:43c0881fe7e7 42 bool calReady = false; // flag for calibration ready
annesteenbeek 111:43c0881fe7e7 43
annesteenbeek 124:f67ce69557db 44 bool usePotmeters = true;
annesteenbeek 124:f67ce69557db 45 bool controlAngle = false;
annesteenbeek 124:f67ce69557db 46 bool controlDirection = true;
annesteenbeek 124:f67ce69557db 47
annesteenbeek 124:f67ce69557db 48
annesteenbeek 111:43c0881fe7e7 49 int main(){
annesteenbeek 126:56866cefaa08 50 serialInit();
annesteenbeek 126:56866cefaa08 51 serialTick.attach(&serial_activate, 0.1f); // initialze serial communication first
annesteenbeek 111:43c0881fe7e7 52 motorInit();
annesteenbeek 126:56866cefaa08 53
annesteenbeek 126:56866cefaa08 54
annesteenbeek 126:56866cefaa08 55
annesteenbeek 32:2006977785f5 56
annesteenbeek 0:525558a26464 57 while (true) {
annesteenbeek 126:56866cefaa08 58
annesteenbeek 126:56866cefaa08 59 calReady = calibrateMotors();
annesteenbeek 126:56866cefaa08 60
annesteenbeek 126:56866cefaa08 61 if(serial_go){
annesteenbeek 126:56866cefaa08 62 serial_go=false;
annesteenbeek 126:56866cefaa08 63 serialCom();
annesteenbeek 126:56866cefaa08 64 }
annesteenbeek 111:43c0881fe7e7 65
annesteenbeek 111:43c0881fe7e7 66 if(calReady && !tickersActivated){ // when done with calibration, start tickers
annesteenbeek 111:43c0881fe7e7 67 tickerAttach();
annesteenbeek 111:43c0881fe7e7 68 tickersActivated = true;
annesteenbeek 111:43c0881fe7e7 69 }
annesteenbeek 111:43c0881fe7e7 70
annesteenbeek 78:0cc7c64ba94c 71 if(emg_go){
annesteenbeek 78:0cc7c64ba94c 72 emg_go=false;
annesteenbeek 78:0cc7c64ba94c 73 readEMG();
annesteenbeek 78:0cc7c64ba94c 74 }
annesteenbeek 98:25528494287d 75 if(mode==0){ // wait until EMG is done with calibration
annesteenbeek 98:25528494287d 76 if(safety_go){
annesteenbeek 98:25528494287d 77 safety_go=false;
annesteenbeek 98:25528494287d 78 safety();
annesteenbeek 98:25528494287d 79 }
annesteenbeek 98:25528494287d 80 if(emg_go){
annesteenbeek 98:25528494287d 81 emg_go=false;
annesteenbeek 98:25528494287d 82 readEMG();
annesteenbeek 98:25528494287d 83 }
annesteenbeek 98:25528494287d 84 if(switches_go){
annesteenbeek 98:25528494287d 85 switches_go=false;
annesteenbeek 98:25528494287d 86 checkSwitches();
annesteenbeek 98:25528494287d 87 }
annesteenbeek 98:25528494287d 88 if(debug_go){
annesteenbeek 98:25528494287d 89 debug_go=false;
annesteenbeek 98:25528494287d 90 debugProcess();
annesteenbeek 98:25528494287d 91 }
annesteenbeek 98:25528494287d 92 if(motor_go){
annesteenbeek 98:25528494287d 93 motor_go=false;
annesteenbeek 98:25528494287d 94 motorControl();
annesteenbeek 98:25528494287d 95 }
annesteenbeek 126:56866cefaa08 96
annesteenbeek 30:a20f16bf8dda 97 }
annesteenbeek 0:525558a26464 98 }
annesteenbeek 0:525558a26464 99 }