Ами тогава когато завъртиш сервото в единия край правиш EEPROM.update(0, 0), в другия край - EEPROM.update(0, 1);
При стартиране правиш EEPROM.read(0) и ако е 0 - палиш лампата за едната посока и правиш pos = pravo, ако е 1 - за другата посока и правиш pos = diasno.
Направих го, но ми дава грешка на потъмнения ред:
#include <Servo.h>
#include <EEPROM.h>
// константи за градусите на сервото
const int pravo = 0;
const int diasno = 90;
// константи за пиновете, които ще се използват
const int butonpin = 6;
const int servopin = 5;
const int led_pravo = 7;
const int led_otklonenie = 9;
// константа за периода на забавяне на върнете на сервото
const int period = 100;
//декрарираме сервото
Servo Strelka1;
//променливи за запомняне позицията на сервото
int pos = pravo; // текуща позиция
int pos_old = diasno; // предишна позиция
void setup() {
// изпълнява се веднъж при пускане на програмата
// декрарираме пиновете, които ще се ползват
pinMode (butonpin,INPUT);
pinMode (led_pravo, OUTPUT);
pinMode (led_otklonenie, OUTPUT);
// атачваме сервото и го караме да се обърне в права позиция
Strelka1.attach(servopin); // закача сервото на пин 5
if (EEPROM.read(0)=0) {pos=pravo;
digitalWrite (led_pravo, HIGH);}
else {pos=diasno;
digitalWrite (led_otklonenie, HIGH);}
Strelka1.write(pos); //сервото се обръща в права позиция
delay (1000);
Strelka1.detach();
// настройка първоначален статус на светодиодите
//digitalWrite (led_pravo, HIGH);
//digitalWrite (led_otklonenie, LOW);
}
void loop() {
// изпълнява се постоянно
// с всяко натискане на бутона се променя позицията на сервото
int buton_push = digitalRead(butonpin);
if(buton_push ==HIGH){
// изключва светодиода за право
if(pos == pravo){
digitalWrite (led_pravo, LOW);}
else{
digitalWrite (led_otklonenie, LOW);
}
pos_old = pos; //запазва текущата позиция
if(pos==pravo)
{pos=diasno;}
else{pos=pravo;}
//pos=pos==pravo ? diasno:pravo; // променя позицията в обратно състояние
//Strelka1.attach(servopin);
if(pos_old<pos){
Strelka1.attach(servopin);
for(int i = pos_old + 1; i <=pos; i++){
Strelka1.write(i); // записва следващата позиция на сервото
delay(period); // забавяне
// Strelka1.detach();
}
Strelka1.detach();
EEPROM.update(0, 0);
}
//Strelka1.attach(servopin);
if(pos_old>pos){
Strelka1.attach(servopin);
for(int i = pos_old - 1; i >=pos; i--){
Strelka1.write(i); // записва следващата позиция на сервото
delay(period); // забавяне
// Strelka1.detach();
}
Strelka1.detach();
EEPROM.update(0, 1);
}
// Светва съответния пин
if (pos == pravo){
digitalWrite (led_pravo, HIGH);
}
else{
digitalWrite (led_otklonenie, HIGH);
}
}
}