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:
Fri Oct 30 10:32:49 2015 +0100
Revision:
130:2542f844ba1e
Parent:
128:c583aff5a7bf
changes

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 127:831f03471efb 11 #include "config.h" // settings and pin configurations
annesteenbeek 127:831f03471efb 12 #include "actuators.h" // all the actuator related functions
annesteenbeek 127:831f03471efb 13 #include "buttons.h" // reading switches and buttons
annesteenbeek 127:831f03471efb 14 #include "debug.h" // HIDscope
annesteenbeek 127:831f03471efb 15 #include "emg.h" // EMG
annesteenbeek 127:831f03471efb 16 #include "serialcom.h" // Communication with web app
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 switchesTick.attach(&switches_activate, 0.02f);
annesteenbeek 127:831f03471efb 30 // debugTick.attach(&debug_activate, motorCall);
annesteenbeek 98:25528494287d 31 motorTick.attach(&motor_activate, motorCall);
annesteenbeek 98:25528494287d 32 safetyTick.attach(&safety_activate, 0.001f);
annesteenbeek 126:56866cefaa08 33
annesteenbeek 111:43c0881fe7e7 34 }
annesteenbeek 111:43c0881fe7e7 35
annesteenbeek 111:43c0881fe7e7 36 double motorCall = 0.01; // set motor frequency global so it can be used for speed.
annesteenbeek 127:831f03471efb 37 const int sample = 0; // Constant for EMG mode switching
annesteenbeek 127:831f03471efb 38 const int normalize = 1; // Constant for EMG mode switching
annesteenbeek 127:831f03471efb 39 bool mode = normalize;
annesteenbeek 111:43c0881fe7e7 40 bool tickersActivated = false;
annesteenbeek 127:831f03471efb 41 bool calReady = false; // flag for motor calibration
annesteenbeek 111:43c0881fe7e7 42
annesteenbeek 127:831f03471efb 43 bool usePotmeters = true; // flag for using the potmeters/EMG to control the system
annesteenbeek 127:831f03471efb 44 bool controlAngle = false; // control the system using motor angles
annesteenbeek 127:831f03471efb 45 bool controlDirection = true; // control the system using kinematics
annesteenbeek 128:c583aff5a7bf 46 bool enableEMG = false;
annesteenbeek 128:c583aff5a7bf 47 bool startCalibration = false;
annesteenbeek 128:c583aff5a7bf 48 bool EMGCalReady = false;
annesteenbeek 124:f67ce69557db 49
annesteenbeek 111:43c0881fe7e7 50 int main(){
annesteenbeek 126:56866cefaa08 51 serialInit();
annesteenbeek 126:56866cefaa08 52 serialTick.attach(&serial_activate, 0.1f); // initialze serial communication first
annesteenbeek 127:831f03471efb 53 EMGTick.attach(&emg_activate, 0.005f);
annesteenbeek 111:43c0881fe7e7 54 motorInit();
annesteenbeek 126:56866cefaa08 55
annesteenbeek 0:525558a26464 56 while (true) {
annesteenbeek 127:831f03471efb 57 if(serial_go){ // communication between serial and the webpage
annesteenbeek 126:56866cefaa08 58 serial_go=false;
annesteenbeek 126:56866cefaa08 59 serialCom();
annesteenbeek 126:56866cefaa08 60 }
annesteenbeek 127:831f03471efb 61 if(startCalibration & !calReady){ // start calibration
annesteenbeek 127:831f03471efb 62 calReady = calibrateMotors();
annesteenbeek 127:831f03471efb 63 }
annesteenbeek 127:831f03471efb 64 if(emg_go){
annesteenbeek 128:c583aff5a7bf 65 emg_go=false;
annesteenbeek 127:831f03471efb 66 if(enableEMG){
annesteenbeek 127:831f03471efb 67 readEMG();
annesteenbeek 127:831f03471efb 68 }
annesteenbeek 128:c583aff5a7bf 69 if(mode==0){
annesteenbeek 128:c583aff5a7bf 70 EMGCalReady = true;
annesteenbeek 128:c583aff5a7bf 71 }
annesteenbeek 127:831f03471efb 72 }
annesteenbeek 127:831f03471efb 73 if(calReady && !tickersActivated){ // when done with calibration, start rest of tickers
annesteenbeek 111:43c0881fe7e7 74 tickerAttach();
annesteenbeek 111:43c0881fe7e7 75 tickersActivated = true;
annesteenbeek 111:43c0881fe7e7 76 }
annesteenbeek 127:831f03471efb 77 if(safety_go){
annesteenbeek 127:831f03471efb 78 safety_go=false;
annesteenbeek 127:831f03471efb 79 safety(); // springs at the side to constrain arm movement
annesteenbeek 127:831f03471efb 80 }
annesteenbeek 127:831f03471efb 81 if(switches_go){
annesteenbeek 127:831f03471efb 82 switches_go=false;
annesteenbeek 127:831f03471efb 83 checkSwitches(); // read potmeters and buttons on the motor board
annesteenbeek 78:0cc7c64ba94c 84 }
annesteenbeek 127:831f03471efb 85 if(debug_go){
annesteenbeek 127:831f03471efb 86 debug_go=false;
annesteenbeek 127:831f03471efb 87 debugProcess(); // send data to HIDscope
annesteenbeek 127:831f03471efb 88 }
annesteenbeek 127:831f03471efb 89 if(motor_go){
annesteenbeek 127:831f03471efb 90 motor_go=false;
annesteenbeek 127:831f03471efb 91 motorControl(); // write data to the motors
annesteenbeek 127:831f03471efb 92 }
annesteenbeek 0:525558a26464 93 }
annesteenbeek 0:525558a26464 94 }