eso32 laatste positie behouden na reset

Software vragen voor ESP chip familie
Berichten: 3
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: 68
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

Berichten: 3
Geregistreerd: 16 Jun 2022, 18:35

Re: eso32 laatste positie behouden na reset

Berichtdoor Marca 1342 » 12 Jul 2022, 11:31

RobGood schreef: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

Dank je voor het antwoorden .Sorry ik ben een beetje laat he' . Ik overweeg om een potmeter bij te plaatsen indien de plaats het toelaat . Uw idee is ok met de eeprom ,maar zoals gezegd in het eerste gesprek ik ben niet zolang bezig met programmeren. Voor mij is dit iets teveel , om het toe te passen zoals jij het opgelost hebt. Of als je een voorbeeld kan tonen zou ik iets verder staan om de eeprom te programmeren. Dank. Gr uit Koksijde . be

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: eso32 laatste positie behouden na reset

Berichtdoor shooter » 16 Jul 2022, 06:26

de oplossing ligt inderdaad bij eeprom geheugen een standaard arduino uno
een testje /*

* EEPROM Write

*

* Stores values read from analog input 0 into the EEPROM.

* These values will stay in the EEPROM when the board is

* turned off and may be retrieved later by another sketch.

*/

#include <EEPROM.h>

/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
int addr = 0;

void setup() {

/** Empty setup. **/
}

void loop() {

/***

Need to divide by 4 because analog inputs range from

0 to 1023 and each byte of the EEPROM can only hold a

value from 0 to 255.

***/

int val = analogRead(0) / 4;

/***

Write the value to the appropriate byte of the EEPROM.

these values will remain there when the board is

turned off.

***/

EEPROM.write(addr, val);

/***

Advance to the next address, when at the end restart at the beginning.

Larger AVR processors have larger EEPROM sizes, E.g:

- Arduno Duemilanove: 512b EEPROM storage.

- Arduino Uno: 1kb EEPROM storage.

- Arduino Mega: 4kb EEPROM storage.

Rather than hard-coding the length, you should use the pre-provided length function.

This will make your code portable to all AVR processors.

***/

addr = addr + 1;

if (addr == EEPROM.length()) {

addr = 0;

}

/***

As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an

EEPROM address is also doable by a bitwise and of the length - 1.

++addr &= EEPROM.length() - 1;

***/

delay(100);
}

komt direct uit arduino.cc maar de analogin hoef je natuurlijk niet te gebruiken en opslaan hoef je alleen maar te doen als er een stand verandert in totaal heb je 512 bytes aan eeprom
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 16 Jun 2022, 18:35

Re: eso32 laatste positie behouden na reset

Berichtdoor Marca 1342 » 16 Jul 2022, 11:16

shooter schreef:de oplossing ligt inderdaad bij eeprom geheugen een standaard arduino uno
een testje /*

* EEPROM Write

*

* Stores values read from analog input 0 into the EEPROM.

* These values will stay in the EEPROM when the board is

* turned off and may be retrieved later by another sketch.

*/

#include <EEPROM.h>

/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
int addr = 0;

void setup() {

/** Empty setup. **/
}

void loop() {

/***

Need to divide by 4 because analog inputs range from

0 to 1023 and each byte of the EEPROM can only hold a

value from 0 to 255.

***/

int val = analogRead(0) / 4;

/***

Write the value to the appropriate byte of the EEPROM.

these values will remain there when the board is

turned off.

***/

EEPROM.write(addr, val);

/***

Advance to the next address, when at the end restart at the beginning.

Larger AVR processors have larger EEPROM sizes, E.g:

- Arduno Duemilanove: 512b EEPROM storage.

- Arduino Uno: 1kb EEPROM storage.

- Arduino Mega: 4kb EEPROM storage.

Rather than hard-coding the length, you should use the pre-provided length function.

This will make your code portable to all AVR processors.

***/

addr = addr + 1;

if (addr == EEPROM.length()) {

addr = 0;

}

/***

As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an

EEPROM address is also doable by a bitwise and of the length - 1.

++addr &= EEPROM.length() - 1;

***/

delay(100);
}

komt direct uit arduino.cc maar de analogin hoef je natuurlijk niet te gebruiken en opslaan hoef je alleen maar te doen als er een stand verandert in totaal heb je 512 bytes aan eeprom




Dank je wel ik denk een stap verder te zijn .

Terug naar ESP Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten