From c77201ef4e07f2c3cd3e61fb68ba5d1af9b002e8 Mon Sep 17 00:00:00 2001 From: mattmcw Date: Tue, 7 Jun 2022 07:55:26 -0400 Subject: [PATCH] Add new commands and identifiers for the capper, start moving into capital characters --- data/cfg.json | 5 +- ino/components/mcopy_capper/mcopy_capper.ino | 161 +++++++++++++++++++ 2 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 ino/components/mcopy_capper/mcopy_capper.ino diff --git a/data/cfg.json b/data/cfg.json index 655a50f..e1642cd 100644 --- a/data/cfg.json +++ b/data/cfg.json @@ -179,9 +179,12 @@ "camera_projectors_identifier": "5", "cameras_projector_identifier": "6", "cameras_projectors_identifier": "7", + "capper_identifier" : "C", "camera_capper_identifier" : "8", "camera_capper_projector_identifier" : "9", - "camera_capper_projectors_identifier" : "0" + "camera_capper_projectors_identifier" : "0", + "cap_on" : "A", + "cap_off" : "B" } } } diff --git a/ino/components/mcopy_capper/mcopy_capper.ino b/ino/components/mcopy_capper/mcopy_capper.ino new file mode 100644 index 0000000..ddd0bee --- /dev/null +++ b/ino/components/mcopy_capper/mcopy_capper.ino @@ -0,0 +1,161 @@ + #include + +boolean debug_state = false; + +/* +---------------------------------------------------- +Servo - Arduino + - +Red - 5V +Black - GND +Yellow - PWM Pin (9 in example) + +Optical Endstop + - +Red - 5V +Black - GND +Yellow - Pin 10 +---------------------------------------------------- +*/ + +/* ------------------------------------------------ + * pins + * ------------------------------------------------*/ +//Arduino Duemilanove +const int PIN_SERVO = 9; +const int PIN_ENDSTOP = 10; + +volatile boolean running = false; +volatile boolean cap_state = false; +volatile boolean endstop_state = false; + +volatile int angle = 0; +const int cap_on_angle = 0; +const int cap_off_angle = 60; +volatile long timer = 0; + +const char cmd_cap_on = 'A'; +const char cmd_cap_off = 'B'; + +const char cmd_debug = 'd'; +const char cmd_connect = 'i'; +volatile char cmd_char = 'z'; +const char cmd_mcopy_identifier = 'm'; +const char cmd_capper_identifier = 'C'; + +const int serialDelay = 5; + +Servo servo; +//SG-5010 speed 0.18s / 60 degree +//converted to milliseconds/angle +const float servoSpeed = 180.0 / 60.0; + +void setup() { + Serial.begin(57600); + Serial.flush(); + Serial.setTimeout(serialDelay); + + Pins_init(); +} + +void loop() { + if (Serial.available()) { + /* read the most recent byte */ + cmd_char = (char)Serial.read(); + } + if (cmd_char != 'z') { + cmd(cmd_char); + cmd_char = 'z'; + } + timer = millis(); + +} + +void cmd (char val) { + if (val == cmd_debug) { + debug(); + } else if (val == cmd_connect) { + connect(); + } else if (val == cmd_mcopy_identifier) { + identify(); + } else if (val == cmd_cap_on) { + Cap_on(false); + } else if (val == cmd_cap_off) { + Cap_off(false); + } +} + +void debug () { + debug_state = true; + Serial.println(cmd_debug); + log("debugging enabled"); +} + +void connect () { + Serial.println(cmd_connect); + log("connect()"); +} + +void identify () { + Serial.println(cmd_capper_identifier); + log("identify()"); +} + +void Pins_init () { + pinMode(PIN_ENDSTOP, INPUT_PULLUP); +} + +void Servo_init () { + servo.attach(PIN_SERVO); + delay(100); + if (!Read_endstop()) { + Cap_off(true); + } +} + +boolean Read_endstop () { + return digitalRead(PIN_ENDSTOP) != LOW; +} + +void Servo_angle (int newAngle) { + servo.write(newAngle); + delay(Servo_delay(newAngle, angle)); + angle = newAngle; +} + +int Servo_delay (int angleA, int angleB) { + int angle = abs(angleA - angleB); + return (int) ceil((float) angle * servoSpeed); +} + +void Cap_off (boolean suppress) { + if (cap_state) { + Servo_angle(cap_off_angle); + cap_state = false; + } else { + log("Cap already off"); + } + log("Cap_off()"); + if (!suppress) { + Serial.println(cmd_cap_off); + } +} + +void Cap_on (boolean suppress) { + if (!cap_state) { + Servo_angle(cap_on_angle); + cap_state = true; + } else { + log("Cap already on"); + } + log("Cap_on()"); + if (!suppress) { + Serial.println(cmd_cap_on); + } +} + +void log (String msg) { + if (debug_state) { + Serial.println(msg); + } +} \ No newline at end of file