aboutsummaryrefslogtreecommitdiff
path: root/elegoo/elegoo.ino
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-12-13 00:35:41 +0100
committerDimitri Sokolyuk <demon@dim13.org>2017-12-13 00:35:41 +0100
commit0a63ac38297b8b6dd343a0b66feda9533c2eb834 (patch)
treef489ac9f232d2eead0a74d642cfae20534966cbc /elegoo/elegoo.ino
parent4f954f2daed0cb4f9c522002221a706e01c3e31e (diff)
...
Diffstat (limited to 'elegoo/elegoo.ino')
-rw-r--r--elegoo/elegoo.ino125
1 files changed, 0 insertions, 125 deletions
diff --git a/elegoo/elegoo.ino b/elegoo/elegoo.ino
deleted file mode 100644
index 6d72cd7..0000000
--- a/elegoo/elegoo.ino
+++ /dev/null
@@ -1,125 +0,0 @@
-// Dimitri Sokolyuk
-// 01.01.2017
-
-#include <PacketSerial.h>
-#include <Servo.h>
-#include <Timer.h>
-#include <IRremote.h>
-
-#include <pb_encode.h>
-#include <pb_decode.h>
-
-#include "elegoo.pb.h"
-#include "config.h"
-
-PacketSerial serial;
-Servo servo;
-Timer timer;
-IRrecv irrecv(IR);
-decode_results ir;
-
-void motor(int e, int a, int b, int v) {
- if (v == 0) {
- digitalWrite(a, LOW);
- digitalWrite(b, LOW);
- } else if (v > 0) {
- digitalWrite(a, LOW);
- digitalWrite(b, HIGH);
- } else if (v < 0) {
- digitalWrite(a, HIGH);
- digitalWrite(b, LOW);
- v = -v;
- }
- analogWrite(e, v);
-}
-
-#define motorR(v) motor(ENA, IN1, IN2, v)
-#define motorL(v) motor(ENB, IN3, IN4, v)
-
-int readDistance() {
- digitalWrite(Trig, LOW);
- delayMicroseconds(2);
- digitalWrite(Trig, HIGH);
- delayMicroseconds(18);
- digitalWrite(Trig, LOW);
- return pulseIn(Echo, HIGH, TimeOut) / ToCM;
-}
-
-void stop() {
- motorR(0);
- motorL(0);
-}
-
-void onPacket(const uint8_t* buf, size_t size) {
- elegoo_Command cmd = elegoo_Command_init_zero;
-
- pb_istream_t istream = pb_istream_from_buffer(buf, size);
- pb_decode_delimited(&istream, elegoo_Command_fields, &cmd);
-
- motorR(cmd.Speed.R);
- motorL(cmd.Speed.L);
- if (cmd.Speed.StopAfter > 0) {
- timer.after(cmd.Speed.StopAfter, stop);
- }
- servo.write(cmd.Look + 90);
-}
-
-void events() {
- uint8_t buf[64];
-
- elegoo_Event evt = elegoo_Event_init_zero;
-
- evt.Head.Distance = readDistance();
- evt.Head.Direction = servo.read() - 90;
-
- evt.Sensor.R = digitalRead(SR);
- evt.Sensor.C = digitalRead(SC);
- evt.Sensor.L = digitalRead(SL);
-
- if (irrecv.decode(&ir)) {
- evt.Remote.Key = ir.value;
- irrecv.resume();
- }
-
- evt.TimeStamp = millis();
-
- pb_ostream_t ostream = pb_ostream_from_buffer(buf, sizeof(buf));
- pb_encode_delimited(&ostream, elegoo_Event_fields, &evt);
-
- serial.send(buf, ostream.bytes_written);
-}
-
-void loop() {
- timer.update();
- serial.update();
-}
-
-void setup() {
- serial.begin(57600);
- serial.setPacketHandler(&onPacket);
-
- pinMode(Echo, INPUT);
- pinMode(Trig, OUTPUT);
-
- pinMode(IN1, OUTPUT);
- pinMode(IN2, OUTPUT);
- pinMode(IN3, OUTPUT);
- pinMode(IN4, OUTPUT);
-
- pinMode(ENA, OUTPUT);
- pinMode(ENB, OUTPUT);
- pinMode(LED, OUTPUT);
-
- pinMode(SR, INPUT);
- pinMode(SC, INPUT);
- pinMode(SL, INPUT);
-
- pinMode(IR, INPUT);
- irrecv.enableIRIn();
-
- servo.attach(SRV);
- servo.write(90);
-
- timer.every(100, events);
- timer.oscillate(LED, 500, LOW);
-}