diff --git a/arduino_scripts/Servo-Magnetic-Trap/Servo-Magnetic-Trap.ino b/arduino_scripts/Servo-Magnetic-Trap/Servo-Magnetic-Trap.ino new file mode 100644 index 0000000..168e162 --- /dev/null +++ b/arduino_scripts/Servo-Magnetic-Trap/Servo-Magnetic-Trap.ino @@ -0,0 +1,108 @@ +// include the servo library +#include + +// create servo object to control a servo +Servo Servo_1; +Servo Servo_2; + +// constants: input and output pins +const int SWITCH_PIN = 4; +const int SERVO_1_PIN = 9; +const int SERVO_2_PIN = 10; + +// constants: the trap can be open or close. +// easier to understand than HIGH or LOW +const int CLOSED = LOW; +const int OPEN = HIGH; + +// constants: positions of servo end points and positioning delay in microseconds +const int SERVO_1_CLOSED = 7; +const int SERVO_1_OPEN = 100; +const int SERVO_2_CLOSED = 159; +const int SERVO_2_OPEN = 64; +const int SERVO_DELAY = 10; + +// variables +int switch_state = LOW; // the current state of the input pin +int trap_state = OPEN; // will a high switch state change the servo position + +void setup() { + // setup code here, run once after reset or power on: + + // setting pins to input, and output + pinMode(SWITCH_PIN, INPUT); + pinMode(LED_BUILTIN, OUTPUT); + + // initialize serial connection + Serial.begin(9600); + + // attach the servos + Servo_1.attach(SERVO_1_PIN); + Servo_2.attach(SERVO_2_PIN); + + // moving servos to defined position + Servo_1.write(SERVO_1_OPEN); + Servo_2.write(SERVO_2_OPEN); + + // read the current switch state + switch_state = digitalRead(SWITCH_PIN); +} + + +void loop() { + // main code, run repeatedly: + + // MANUAL SWITCH STATE + // ------------------- + + // read the current state of the input + int current_switch_state = digitalRead(SWITCH_PIN); + + // change trap position if the switch state has changed + if (current_switch_state != switch_state) { + + // register the change + switch_state = current_switch_state; + + if (switch_state == HIGH) { + // show that there is currently a input signal + // and close the trap + digitalWrite(LED_BUILTIN, HIGH); + trap_state = close_trap(); + } else { + // show that there is currently no input signal + // and open the trap + digitalWrite(LED_BUILTIN, LOW); + trap_state = open_trap(); + } + } + + + // COMMANDS SEND OVER USB + // ---------------------- + + // read the incoming data + char inByte = Serial.read(); + + if (inByte == 'o') { + // the open trap command was sent + trap_state = open_trap(); + } else if (inByte == 'c') { + // the close trap command was sent + trap_state = close_trap(); + } +} + +int open_trap() { + Servo_1.write(SERVO_1_OPEN); + Servo_2.write(SERVO_2_OPEN); + return OPEN; +} + +int close_trap() { + Servo_1.write(SERVO_1_CLOSED); + Servo_2.write(SERVO_2_CLOSED); + return CLOSED; +} + +