#include <EEPROM.h>
#include <Servo.h>
Servo s1;
Servo s2;
#define senzor A0
#define IR 3
int x = 100; //pocet merani
String farba;
void setup() {
s1.attach(9);
s2.attach(10);
pinMode(senzor, INPUT);
pinMode(IR, INPUT);
delay(200);
if (digitalRead(4) == HIGH)
kalibracia();
}
void loop() {
if (map(analogRead(senzor), 0, 1023, 0, 255) > (EEPROM.read(2) + 20)) {
farba = "cierna";
}
else if (map(analogRead(senzor), 0, 1023, 0, 255) < (EEPROM.read(2) + 20)) {
farba = "biela";
}
if (farba == "cierna") {
doprava();
}
if (farba == "biela") {
dolava();
}
if (digitalRead(IR) == LOW) {
naokolo();
}
}
void dopredu () {
s1.write(0);
// dopredu
s2.write(180); // dopredu
}
void doprava () {
s1.write(90); // dopredu
s2.write(180); // stoji
}
void dolava () {
s1.write(0);
// stoji
s2.write(90); // dopredu
}
void dozadu () {
s1.write(180); // dozadu
s2.write(0);
// dozadu
}
void zastav () {
s1.write(90); // stoji
s2.write(90); // stoji
}
void kalibracia() {
int ciernaNamerana =
0;
int bielaNamerana =
0;
for (int k = 0; k < x; k++) {
ciernaNamerana += analogRead(senzor);
delay(10);
}
EEPROM.write(0, 0);
EEPROM.write(0, map((ciernaNamerana / x), 0, 1023, 0, 255)); //cierna
doprava();
delay(500);
zastav();
for (int j = 0; j < x; j++) {
bielaNamerana += analogRead(senzor);
delay(10);
}
EEPROM.write(1, 0);
EEPROM.write(1, map((bielaNamerana / x), 0, 1023, 0, 255)); //biela
Serial.println(EEPROM.read(1));
Serial.println(EEPROM.read(0));
EEPROM.write(2, (EEPROM.read(1) + EEPROM.read(0)) / 2);
Serial.println(EEPROM.read(2));
delay(1000);
}
void naokolo() {
dozadu();
delay(100);
doprava();
delay(500);
dopredu();
delay(1000);
dolava();
delay(1000);
dopredu();
delay(800);
}