Seite 1 von 1

Servo mit EEprom

Verfasst: Di 23. Mär 2021, 09:56
von e69-fan
Hallo Franz,
jetzt gibt es den vom MicoBahner überprüften Sketch:

Code: Alles auswählen

/* https://stummiforum.de/viewtopic.php?f=21&t=178411
 */

#include <MobaTools.h>
#include <EEPROM.h>


// Die Taster müssen so angeschlossen sein, dass der Eingang bei gedrücktem
// Taster auf LOW (=0) geht. Ansonsten muss im loop auf HIGH abgefragt werden

const int tasterPin1 = 2;    // Taster1 Pin 2
const int tasterPin2 = 3;    // Taster2  Pin 3
const int servoPin  =  9;    // Anschluß für den Servo, möglich sind 9 oder 10

// bei Werten, die sich im Programm nie verändern, sollte immer 'const' vorangestellt
// werden

//gegen Sevozucken Widerst.5K von Servosteuerung zu Vcc geschaltet


int tasterStatus1, tasterStatus2;
MoToServo meinServo;

void setup() {
    pinMode(tasterPin1, INPUT_PULLUP);   //tasterPin1 (Pin 2)
    pinMode(tasterPin2, INPUT_PULLUP);   //tasterPin2 (Pin 3)
    
    meinServo.attach(servoPin, true );   //Servo an Pin 9
    meinServo.setSpeed(5);               //Das ist ein neuer Aufruf, mit dem die Geschwindigkeit
                                         //eingestellt wird. Je größer die Zahl, umso größer
                                         //die Geschwindigkeit. Bei 0 (defaultwert) verhält es
                                         //sich wie bei der Standard Bibliothek
    meinServo.write(EEPROM.read(0));     //"bewege" Servo zur letzten im EEPROM gespeicherten Position
}

void loop() {
    tasterStatus1 = digitalRead(tasterPin1);
    tasterStatus2 = digitalRead(tasterPin2);

    if (tasterStatus2 == HIGH ) {
        meinServo.write(50);             //wird langsam  drehen
        EEPROM.update(0, 50);            //schreibe Zielposition ins EEPROM
        delay(100);
    }

    if (tasterStatus1 == HIGH) {
        meinServo.write(120);            //wird langsam drehen
        EEPROM.update(0, 120 );          //schreibe Zielposition ins EEPROM
        delay(100);
    }

    delay(20);

}
:(V):

Re: Servo mit EEprom

Verfasst: Di 23. Mär 2021, 15:08
von Admin
Ahhhh, danke. Muss ich mich die Tage mal dran setzen. Dass ich den Umgang mit dem Thema auch mal lerne. Speichern im EEprom will ich mir schon lange mal reinziehen.

Grüße aus dem heute Sonnigen Ohlstadt
Franz :)

Re: Servo mit EEprom

Verfasst: So 28. Mär 2021, 18:25
von Admin
Ich habe es mal getestet. Das ist recht einfach. Aber ich muss da mal weiter Spinnen. Da gibt es sicher noch Abfragemöglichkeiten wie groß der EEProm ist, und vielleicht wie weit er belegt ist. Muss ich mal kucken :)

Ich habe da jetzt nur mal schnell eine Display-Ausgabe mit rein gemacht, dass ich den gespeicherten Wert auch ausgeben kann. Muss ich mir mal die Schlüßelwort Liste holen und Testen was ich für wichtig halte.

Hier das Programm mit der kleinen Änderung, die ich gemacht habe, wegen des Display´s.

Code: Alles auswählen

/* https://stummiforum.de/viewtopic.php?f=21&t=178411
*/

#include <MobaTools.h>
#include <EEPROM.h>

#include <LiquidCrystal_I2C.h> // LCD Display
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// Die Taster müssen so angeschlossen sein, dass der Eingang bei gedrücktem
// Taster auf LOW (=0) geht. Ansonsten muss im loop auf HIGH abgefragt werden

const int tasterPin1 = 2;    // Taster1 Pin 2
const int tasterPin2 = 3;    // Taster2  Pin 3
const int servoPin  =  9;    // Anschluß für den Servo, möglich sind 9 oder 10

// bei Werten, die sich im Programm nie verändern, sollte immer 'const' vorangestellt
// werden

//gegen Sevozucken Widerst.5K von Servosteuerung zu Vcc geschaltet


int tasterStatus1, tasterStatus2;
MoToServo meinServo;

void setup() {
  pinMode(tasterPin1, INPUT_PULLUP);   //tasterPin1 (Pin 2)
  pinMode(tasterPin2, INPUT_PULLUP);   //tasterPin2 (Pin 3)

  lcd.begin(20, 4);
  lcd.backlight();
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.print (F("Gesp.Pos. "));

  meinServo.attach(servoPin, true );   //Servo an Pin 9
  meinServo.setSpeed(5);               //Das ist ein neuer Aufruf, mit dem die Geschwindigkeit
  //eingestellt wird. Je größer die Zahl, umso größer
  //die Geschwindigkeit. Bei 0 (defaultwert) verhält es
  //sich wie bei der Standard Bibliothek
  meinServo.write(EEPROM.read(0));     //"bewege" Servo zur letzten im EEPROM gespeicherten Position
  lcd.setCursor (11, 0);
  lcd.print(EEPROM.read(0));
}
void loop() {
  tasterStatus1 = digitalRead(tasterPin1);
  tasterStatus2 = digitalRead(tasterPin2);

  if (tasterStatus2 == HIGH ) {
    meinServo.write(50);             //wird langsam  drehen
    EEPROM.update(0, 50);            //schreibe Zielposition ins EEPROM
    delay(100);
  }

  if (tasterStatus1 == HIGH) {
    meinServo.write(120);            //wird langsam drehen
    EEPROM.update(0, 120 );          //schreibe Zielposition ins EEPROM
    delay(100);
  }

  delay(20);

}

Re: Servo mit EEprom

Verfasst: Sa 8. Mai 2021, 08:28
von e69-fan
Hallo Franz,

ich melde mich bei den Aktiven zurück - alles gut verlaufen. Also Ärmel hoch und weiter geht es.

Ich möchte den EEProm-Sketch für weitere Servos erweitern und die Werte im Display anzeigen lassen.

Wie muss ich erweitern?

servoPin9:
EEPROM.update(0, 50);
EEPROM.update(0, 120 );
----------------------------------------------------------------------------------------
servoPin10:
EEPROM.update(1, 50);
EEPROM.update(1, 120);

Müsste so stimmen oder ??? :???:

Re: Servo mit EEprom

Verfasst: Di 11. Mai 2021, 08:07
von Admin
e69-fan hat geschrieben: Sa 8. Mai 2021, 08:28 ich melde mich bei den Aktiven zurück - alles gut verlaufen. Also Ärmel hoch und weiter geht es.
Was heißt das eigentlich? Warst du eine Zeit lang platt? Durftest du auch beim Dock antretten?

Schönen Tag, servus
Franz

Re: Servo mit EEprom

Verfasst: Fr 14. Mai 2021, 12:57
von Admin
Wie schauts da aus. Hast du schon erweitert. Und hast du schon diese EEproms von denen wir geredet haben?

Franz :(V):

Re: Servo mit EEprom

Verfasst: Fr 14. Mai 2021, 14:29
von e69-fan
Hallo Franz,

Danke der Nachfrage.
Wie schauts da aus.
Mit den neuen Tropfen geht es besser. :(V):

Ich versuche noch das EEprom zu verstehen:

Also ich habe von der Servostellung Servo 1 - 2 Werte: Geradeaus - 40; Abzweig - 120;

Wie muss ich ins EEprom schreiben:

Code: Alles auswählen

  meinServo1.write(40);             //wird langsam  drehen
  EEPROM.update(0, 40);            //schreibe Zielposition ins EEPROM
  

Code: Alles auswählen

    meinServo1.write(120);           //wird langsam drehen
    EEPROM.update(1, 120 );        //schreibe Zielposition ins EEPROM


Bei "EEPROM.update(0, 120 ); " ist doch 0 die Adresse und 120 der Wert.

Die nächsten Werte würden dann in Adresse 1, 2, 3, fortlaufend hineingeschrieben werden.
Beim Abfragen wird dann nur die jeweilige Adresse abgerufen.

Oder bin ich jetzt völlig schief?


:oops:

PS. Hast Du schon die erste Probefahrt mit dem Motorrad hinter Dir?

Re: Servo mit EEprom

Verfasst: Fr 14. Mai 2021, 16:29
von Admin
Ja, so ist es.
Hier z.B.

Code: Alles auswählen

meinServo.write(EEPROM.read(0));     //"bewege" Servo zur letzten im EEPROM gespeicherten Position
ist die Ausgabe aus dem Speicherplatz "0" direkt an den Servo.

Re: Servo mit EEprom

Verfasst: Mo 17. Mai 2021, 15:46
von Admin
Wie klappt bei dir? Alles gut?