From 6eb77fdf18616f79f99f2a57eed40d3b7a55eaa5 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 2 Jan 2017 09:24:18 +0100 Subject: Initial import --- car/car.ino | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 car/car.ino (limited to 'car') diff --git a/car/car.ino b/car/car.ino new file mode 100644 index 0000000..b6a228f --- /dev/null +++ b/car/car.ino @@ -0,0 +1,180 @@ +// Dimitri Sokolyuk +// 01.01.2017 + +#include +#include + +// Settings +#define dist 20 +#define velo 130 + +// Pinout motor +#define ENA 5 // 10 pwm +#define ENB 6 // 5 pwm + +#define IN1 7 // 9 +#define IN2 8 // 8 +#define IN3 9 // 7 +#define IN4 10 // 6 + +// Pinout sensors +#define S1 2 +#define S2 4 +#define S3 11 + +// Pinout IR +#define IR 12 + +#define KeyUp 0x00511DBB +#define KeyDown 0xA3C8EDDB +#define KeyLeft 0x52A3D41F +#define KeyRight 0x20FE4DBB +#define KeyOk 0xD7E84B1B +#define Key0 0x1BC0157B +#define Key1 0xC101E57B +#define Key2 0x97483BFB +#define Key3 0xF0C41643 +#define Key4 0x9716BE3F +#define Key5 0x3D9AE3F7 +#define Key6 0x6182021B +#define Key7 0x8C22657B +#define Key8 0x488F3CBB +#define Key9 0x0449E79F +#define KeyStar 0x97483BFB + + +// Pinout Ultrasonic +#define Echo A1 +#define Trig A0 + +#define ToCM 58 +#define ToInch 148 +#define TimeOut 100000 + +Servo head; +IRrecv irrecv(IR); + +void motor(int e, int a, int b, int v) { + if (v > 0) { + digitalWrite(a, LOW); + digitalWrite(b, HIGH); + } + if (v < 0) { + digitalWrite(a, HIGH); + digitalWrite(b, LOW); + v = -v; + } + analogWrite(e, v); +} + +void move(int l, int r) { + motor(ENA, IN1, IN2, l); + motor(ENB, IN3, IN4, r); +} + +#define forward(v) do move( v, v); while (0) +#define backward(v) do move(-v, -v); while (0) +#define toleft(v) do move( v, -v); while (0) +#define toright(v) do move(-v, v); while (0) +#define stop() do move( 0, 0); while (0) + +int distance() { + digitalWrite(Trig, LOW); + delayMicroseconds(2); + digitalWrite(Trig, HIGH); + delayMicroseconds(18); + digitalWrite(Trig, LOW); + return pulseIn(Echo, HIGH, TimeOut) / ToCM; +} + +void look(int deg) { + head.write(90 + deg); + delay(1000); // wait to finish +} + +#define lookahead() do look( 0); while (0) +#define lookleft(deg) do look( deg); while (0) +#define lookright(deg) do look(-deg); while (0) + +int sensor() { + int s1 = digitalRead(S1); + int s2 = digitalRead(S2); + int s3 = digitalRead(S3); + return s1 | (s2 << 1) | (s3 << 2); +} +void ultra() { + if (distance() > dist) { + forward(velo); + return; + } + stop(); + lookleft(60); + if (distance() > dist) { + toleft(velo); + lookahead(); + return; + } + lookright(60); + if (distance() > dist) { + toright(velo); + lookahead(); + return; + } +} + +void ir() { + decode_results results; + if (irrecv.decode(&results)) { + switch (results.value) { + case KeyUp: + forward(velo); + break; + case KeyDown: + backward(velo); + break; + case KeyLeft: + toleft(velo); + break; + case KeyRight: + toright(velo); + break; + case KeyOk: + stop(); + break; + } + irrecv.resume(); + delay(150); + } +} + +void setup() { + Serial.begin(9600); + + 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(S1, INPUT); + pinMode(S2, INPUT); + pinMode(S3, INPUT); + + pinMode(IR, INPUT); + irrecv.enableIRIn(); + + head.attach(3); + lookahead(); + stop(); +} + +void loop() { + //ultra(); + ir(); +} + -- cgit v1.2.3