lab5_starter.ino
2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/* IRRemote teek vajab dekodeerimise makrot enne teegi lisamist */
#define DECODE_SAMSUNG
#include <IRremote.hpp>
#include <Servo.h>
#define BUTTON_PIN 2
#define SONIC_ECHO_PIN 3
#define SONIC_TRIG_PIN 4
#define RIGHT_SERVO_PIN 5
#define LEFT_SERVO_PIN 6
#define LEFT_LED_PIN 7
#define RIGHT_LED_PIN 8
#define SERVO_MIN_PULSE 1300
#define SERVO_MAX_PULSE 1700
#define SERVO_STANDSTILL 1500
Servo leftWheel;
Servo rightWheel;
bool robotEnabled = true;
void setup()
{
Serial.begin(9600);
/* Konfigureerime servomootorid */
leftWheel.attach(LEFT_SERVO_PIN, SERVO_MIN_PULSE, SERVO_MAX_PULSE);
rightWheel.attach(RIGHT_SERVO_PIN, SERVO_MIN_PULSE, SERVO_MAX_PULSE);
SetWheels(SERVO_STANDSTILL, SERVO_STANDSTILL);
}
void loop()
{
/* Kui robot on väljas, siis IR vastuvõttu ei lähe */
if (!robotEnabled)
{
return;
}
ReceiveIr();
}
void ReceiveIr(void)
{
if (IrReceiver.decode())
{
if (IrReceiver.decodedIRData.protocol == SAMSUNG)
{
IrReceiver.printIRResultShort(&Serial);
/* Edastame käsukoodi funktsiooni, mis selle lahendab */
ProcessCommand(IrReceiver.decodedIRData.command);
}
/* Jätkame IR vastuvõttu alles pärast käsu täitmist, vähendab korduste lugemist */
IrReceiver.resume();
}
}
void ProcessCommand(uint16_t cmd)
{
/* Tuvastame puldilt vastuvõetud käsukoodi */
switch (cmd)
{
case /* Asenda käsukoodiga puldilt */:
/* Tegevused vastava käsu jaoks */
default:
break;
}
}
void MoveBack(uint16_t duration)
{
SetWheels(1400, 1600);
delay(duration);
}
void MoveForward(uint16_t duration)
{
SetWheels(1600, 1400);
delay(duration);
}
void SetWheels(int leftWheelImpulseLength, int rightWheelImpulseLength)
{
leftWheel.writeMicroseconds(leftWheelImpulseLength);
rightWheel.writeMicroseconds(rightWheelImpulseLength);
}
float GetDistInCm()
{
/* Saadame ultrahelilaine välja, kestvus 10 us */
digitalWrite(SONIC_TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(SONIC_TRIG_PIN, LOW);
/* Loeme signaali peegeldumise aja */
uint16_t echoTime = pulseIn(SONIC_ECHO_PIN, HIGH);
/* Tagastame aja teisendatud kauguseks */
return (echoTime / 58.0);
}