eso32 laatste positie behouden na reset

Software vragen voor ESP chip familie
Berichten: 1
Geregistreerd: 16 Jun 2022, 18:35

eso32 laatste positie behouden na reset

Berichtdoor Marca 1342 » 16 Jun 2022, 19:40

Dag , . Ik heb een code met twee knoppen hoog en laag met servo met led aanduiding welke pos je staat . De laatste positie ik instel . vb: pos 7 graden onthoud hij niet na reset of de spanning in of en terug aan . De code begint opnieuw , niet de laatste instelling . Is het mogelijk om de laatste positie terug te hebben na reset ?
De bedoeling is voor een servomotor op de versnellingen van een fiets te plaatsen . Ik ben nog niet lang bezig programmeren maar een hint zou welkom zijn .Dank



#include <Servo.h>

Servo myservo; // create servo object to control a servo


int pos =0; // initial angle for servo
int posStep =7;



#define LEFT 12 // pin 12 is connected to left button
#define RIGHT 2 // pin 2 is connected to right button
#define LED_PIN1 17
#define LED_PIN2 27
#define LED_PIN3 26
#define LED_PIN4 25
#define LED_PIN5 33
#define LED_PIN6 32
#define LED_PIN7 19
#define LED_PIN8 18
#define LED_PIN9 21



void setup() {



Serial.begin(115200); // setup serial



myservo.attach(13);// attaches the servo on pin 9 to the servo object





pinMode(LEFT,INPUT_PULLUP);// assign pin 12 ass input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assing pin 2 as input for right button




myservo.write(pos);// send servo to the middle at 90 degrees
Serial.println("Servo Button ");





pinMode(LED_PIN1, OUTPUT);
pinMode(LED_PIN2, OUTPUT);
pinMode(LED_PIN3, OUTPUT);
pinMode(LED_PIN4, OUTPUT);
pinMode(LED_PIN5, OUTPUT);
pinMode(LED_PIN6, OUTPUT);
pinMode(LED_PIN7, OUTPUT);
pinMode(LED_PIN8, OUTPUT);
pinMode(LED_PIN9, OUTPUT);

}

void loop() {
// Servo button



while(digitalRead(RIGHT) == LOW){


if (pos > 0 && pos <= 42) {
pos = pos - posStep;
if(pos < 0){
pos = 0;
}else {digitalWrite(LED_PIN1, HIGH);
myservo.write(pos); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(pos);// print the angle
Serial.println(" degree");
if (pos !=0)digitalWrite(LED_PIN3, LOW);
if (pos !=7)digitalWrite(LED_PIN4, LOW);
if (pos !=14)digitalWrite(LED_PIN5, LOW);
if (pos !=21)digitalWrite(LED_PIN6, LOW);
if (pos !=28)digitalWrite(LED_PIN7, LOW);
if (pos !=35)digitalWrite(LED_PIN8, LOW);
if (pos !=42)digitalWrite(LED_PIN9, LOW);

if (pos ==0)digitalWrite(LED_PIN3, HIGH);
if (pos ==7)digitalWrite(LED_PIN4, HIGH);
if (pos ==14)digitalWrite(LED_PIN5, HIGH);
if (pos ==21)digitalWrite(LED_PIN6, HIGH);
if (pos ==28)digitalWrite(LED_PIN7, HIGH);
if (pos ==35)digitalWrite(LED_PIN8, HIGH);
if (pos ==42)digitalWrite(LED_PIN9, HIGH);


}

}
delay(800);digitalWrite(LED_PIN1,LOW);// waits for the servo to get there
}



while(digitalRead(LEFT) == LOW){


if (pos >= 0 && pos <= 42) {
pos = pos + posStep;
if(pos >42){
pos=42;
}else{digitalWrite(LED_PIN2, HIGH);
myservo.write(pos);// move the servo to desired angle

Serial.print("Moved to: ");
Serial.print(pos); // print the angle
Serial.println(" degree");
if (pos !=0)digitalWrite(LED_PIN3, LOW);
if (pos !=7)digitalWrite(LED_PIN4, LOW);
if (pos !=14)digitalWrite(LED_PIN5, LOW);
if (pos !=21)digitalWrite(LED_PIN6, LOW);
if (pos !=28)digitalWrite(LED_PIN7, LOW);
if (pos !=35)digitalWrite(LED_PIN8, LOW);
if (pos !=42)digitalWrite(LED_PIN9, LOW);


if (pos == 0)digitalWrite(LED_PIN3, HIGH);
if (pos == 7)digitalWrite(LED_PIN4, HIGH);
if (pos == 14)digitalWrite(LED_PIN5, HIGH);
if (pos == 21)digitalWrite(LED_PIN6, HIGH);
if (pos == 28)digitalWrite(LED_PIN7, HIGH);
if (pos == 35)digitalWrite(LED_PIN8, HIGH);
if (pos == 42)digitalWrite(LED_PIN9, HIGH);
}
}

delay(800);digitalWrite(LED_PIN2,LOW); // waits for the servo to get there
}//


}

Advertisement

Berichten: 39
Geregistreerd: 04 Sep 2021, 08:31

Re: eso32 laatste positie behouden na reset

Berichtdoor RobGood » 17 Jun 2022, 20:44

Marca, nee dus. Bij opstarten weet de arduino niet waar de servo heen moet. Heb je een potmeter als input dan zal de servo direct de stand van de potmeter overnemen. Zoniet dan is er wel een truc. (of meerdere...?) Ik heb dit in een project opgelost door telkens de stand van de servo op te slaan in het eeprom geheugen. Belangrijk dan dat je het aantal schrijfacties naar de eeprom beperkt, heb ik gedaan door na iedere beweging een timer te starten die na afloop de stand opslaat. Dus tijdens continue bewegingen niet. Timer wordt dan telkens weer gereset. Verder het eeprom adres telkens aanpassen bv na iedere keer opstarten, zodat je de levensduur van de eeprom verlengd. Werkt feilloos bij mij voor een project met 8 servoos.
Succes Rob

Terug naar ESP Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten