Variablen speichern

Hey jungs, wäre es möglich das ich beispielsweise ein poti anschliesse dann einen Knopf drücke und anschliessen werden die Werte des Potis gespeichert und ich kann das Poti wieder abschließen. Danke für eure Hilfe J4ck

ja

ArduinoJ4ck: Hey jungs, wäre es möglich das ich beispielsweise ein poti anschliesse dann einen Knopf drücke und anschliessen werden die Werte des Potis gespeichert und ich kann das Poti wieder abschließen. Danke für eure Hilfe J4ck

Ja, es ist möglich, ein Poti anzuschließen.

Ja, es ist möglich, auf einen Knopf zu drücken.

Fragt sich nur: Meinst Du einen Hosenknopf oder einen Hemdenknopf?

Oder einfach nur lose Knöpfe in der Nähkiste?

Und was hat Deine Frage mit einem Arduino zu tun? Mit welchem? Schaltbild?

Bauteile wie Potis im laufenden Betrieb an- und abzustöpseln, ist übrigens immer ein Risiko: Wenn Du dabei in der Schaltung einen Kurzschluß verursachst, kann der Arduino hinüber sein.

jurs: Bauteile wie Potis im laufenden Betrieb an- und abzustöpseln, ist übrigens immer ein Risiko: Wenn Du dabei in der Schaltung einen Kurzschluß verursachst, kann der Arduino hinüber sein.

Eine verpolungssichere Steckverbindung minimiert das Risiko. ;)

Mit dem Anstöpseln eines Poti oder Schalter kann man kaum einen Kurzschluß machen.

Ich finde die Idee garnicht schlecht, so eine Einstellmöglichkeit vorzusehen, an der nicht jeder DAU rumfummeln kann.

Erstmal danke für eure Antworten
Mein plan war es die Potis über eine USB Verbindung anzuschließen habe hier noch female/male rumliegen dies ist zum einen Verpolungs sicher und ich muss die Potis nicht ins Gehäuse integrieren was sehr viel Platz spart. Nun ist die Frage wie sage ich dem Arduino das er beim Druck auf einen Button die Werte des Potis liest und sie anschliessend speichert ?

int LichtSensor1 = A0;   // Licht1 Sensor Input
int LichtValue1 = 0;     // Licht1 Sensor Value
int poti1 = A3;          // Licht1 Poti

int optisensor = A5;     // Obstacle Avoidance Sensor
int LED = A7;            // LED

void setup() {

  Serial.begin(9600);   // Seriellen Monitor starten
  pinMode(A0, INPUT);   // Licht Sensor 1
  pinMode(A3, INPUT);   // Licht Poti 1
  pinMode(A7, OUTPUT);  // Led Output
  pinMode(A5, INPUT);   // Obstacle Avoidance Sensor


}

void loop() {

  LichtValue1 = analogRead(LichtSensor1);   // Lies Lichtsensor 1
  poti1 = analogRead(3);                    // Lies Poti 1
  optisensor = analogRead(A5);              // Lies den Obstacle Avoidance Sensor
  //Serial.println(poti1);                  // Funktionstest Poti1 
  //Serial.println(LichtValue1);            // Funktionstest Licht Sensor 1
  //Serial.println(optisensor);             // Funktionstest Optical Avoidance Sensor
  
  if (LichtValue1 > poti1)                  // Licht Sensor 1 > Poti1
  {
    digitalWrite(LED, LOW);                 // Led aus
  }
  else if (optisensor < 1000)               // Obstacle Avoidance Sensor bekommt ein Signal
  {
    digitalWrite(LED, HIGH);                // Led an
  }
  else
  {
    delay(1);        
  }
}

Noch eine grundlegende Frage: Sollen die Einstellwerte dauerhaft gespeichert werden oder soll die Einstellung bei jedem Start neu gemacht werden?

Wenn dauerhaft, dann kämen der interne EEPROM (100 000 Schreibzyklen) oder ein externes FRAM in Frage.

Gruß Tommy

ArduinoJ4ck: Erstmal danke für eure Antworten Mein plan war es die Potis über eine USB Verbindung anzuschließen habe hier noch female/male rumliegen dies ist zum einen Verpolungs sicher und ich muss die Potis nicht ins Gehäuse integrieren was sehr viel Platz spart. Nun ist die Frage wie sage ich dem Arduino das er beim Druck auf einen Button die Werte des Potis liest und sie anschliessend speichert ?

Mit USB meinst du wohl nur die Steckverbinder, nicht die USB Buchse vom Arduino. An der Buchse des Arduino geht es nicht.

Den Wert eines Potis kannst du nicht direkt auslesen. Du kannst die Spannung messen, die am Widerstand abfällt und musst daraus den Widerstand selbst errechnen.

Die Werte sollten auch bei einem Neustart nicht resettet werden. Ja ich meine USB Connectoren.
Nun ist die Frage wie speichere ich Daten in den EEPROM ?

Das wird hier sehr gut beschrieben.
EEProm

Habe es gemacht wie in der Anleitung beschrieben, kann aber leider nicht rauslesen welche adresse ich angeben muss. Hier mal mein Code der Poti soll ausgelesen werden wenn man den Switch in position 2 schaltet also praktisch ein Programmiermodus…

#include <EEPROM.h>

int LichtSensor = A1;
int LichtValue = 0;
int Poti = A2;
int potivalue = 0;
int LED = A3;
int opti = A4;
int switch1 = A5;
int switch2 = A6;
//int potivalue = 0;

void setup() {

  Serial.begin(9600);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, OUTPUT);
  pinMode(A4, INPUT);
  pinMode(A5, INPUT);
  pinMode(A6, INPUT);

}

void loop() {
  LichtValue = analogRead(A1);
  opti = analogRead(A4);
  switch1 = analogRead(A5);
  switch2 = analogRead(A6);
  potivalue = analogRead(Poti);

  if (switch1 < 1000)
  {
    EEPROM.read(addr, Poti);
    if (LichtValue > potivalue)
    {
      digitalWrite(LED, LOW);
    }
    else if (opti < 1000)
    {
      digitalWrite(LED, HIGH);
    }
  }
  else
  {
    Poti = analogRead(A2);
    EEPROM.update(addr, Poti);

  }


}

ArduinoJ4ck: Habe es gemacht wie in der Anleitung beschrieben,

Ich bezweifle dass da stand man solle/könne int in byte speichern, da du aber nur die Pin-Nummer dort ablegst, klappt das sogar. Wäre es nicht sinnvoller den gelesenen Wert im EEPROM abzulegen?

Ich würde put() und get() benutzen.

Eine Adresse (wo im EEPROM soll es stehen) musst du schon selbst festlegen.

Du würfelst Poti und potivalue noch etwas durcheinander. EEPROM.read(addr) hat einen Rückgabewert, den Du brauchst.

EEPROM.update und EEPROM.read schreiben jeweils nur 1 Byte, Dein potivalue ist aber ein int und damit 2 Byte lang. Entweder Du teilst den Wert vorm Speichern durch 4, wie im Beispiel, und multiplizierst ihn nach dem Lesen wieder mit 4 oder Du schaust Dir mal lowByte(), highByte() und word() an. Als Adresse würde ich bei 0 anfangen.

Gruß Tommy

Tommy56: Entweder Du teilst den Wert vorm Speichern durch 4, wie im Beispiel, und multiplizierst ihn nach dem Lesen wieder mit 4 oder Du schaust Dir mal lowByte(), highByte() und word() an.

Was hast du gegen die vorgefertigten Routinen put() und get(), die das Problem nicht haben?

Nichts, ich habe einfach nicht an diese gedacht. Damit geht es natürlich einfacher.

Gruß Tommy

Liest du nicht was die anderen schreiben?

Z.B. den Beitrag über deinem?

Whandall: Ich bezweifle dass da stand man solle/könne int in byte speichern, da du aber nur die Pin-Nummer dort ablegst, klappt das sogar. Wäre es nicht sinnvoller den gelesenen Wert im EEPROM abzulegen?

Ich würde put() und get() benutzen.

Eine Adresse (wo im EEPROM soll es stehen) musst du schon selbst festlegen.

Danke erstmal für eure Antworten:) Habe den Code dahingehend geändert.

#include <EEPROM.h>

int LichtSensor = A1;
int LichtValue = 0;
int Poti = A2;
int potivalue = 0;
int LED = A3;
int opti = A4;
int switch1 = A5;
int switch2 = A6;
//int potivalue = 0;

void setup() {

  Serial.begin(9600);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, OUTPUT);
  pinMode(A4, INPUT);
  pinMode(A5, INPUT);
  pinMode(A6, INPUT);

}

void loop() {
  LichtValue = analogRead(A1);
  opti = analogRead(A4);
  switch1 = analogRead(A5);
  switch2 = analogRead(A6);
  potivalue = analogRead(Poti);
  Serial.println(opti);

  if (switch1 < 1000)
  {
    EEPROM.get(0, Poti);
    if (LichtValue > potivalue)
    {
      digitalWrite(LED, LOW);
    }
    else if (opti < 300)
    {
      digitalWrite(LED, HIGH);
    }
  }
  else
  {
    Poti = analogRead(A2); 
    EEPROM.put(0, Poti);

  }


}

Jetzt schaust Du Dir nochmal an, wer in Deinem Sketch Poti und wer potivalue ist. Dann schaust Du Dir in der Referenz EEPROM.get(adresse) an.

Das alles wurde Dir bereits geschrieben. Es interessiert Dich aber augenscheinlich nicht.

Ich bin dann raus. Hilfen zu schreiben, die Dich nicht interessieren, ist vergeudete Zeit.

Gruß Tommy

Danke:)
Funktioniert alles hier nochmal der Code falls jemand interessiert ist.

#include <EEPROM.h>

int LichtSensor = A1;
int LichtValue = 0;
int poti = A2;
int LED = A3;
int opti = A4;
int switch1 = A5;
int switch2 = A6;


void setup() {

  Serial.begin(9600);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, OUTPUT);
  pinMode(A4, INPUT);
  pinMode(A5, INPUT);
  pinMode(A6, INPUT);

}

void loop() {
  LichtValue = analogRead(A1);
  opti = analogRead(A4);
  switch1 = analogRead(A5);
  switch2 = analogRead(A6);
  //Serial.println(LichtValue);
  Serial.println(poti);

  if (switch1 < 1000)
  {
    EEPROM.get(0, poti);
    if (LichtValue > poti)
    {
      digitalWrite(LED, LOW);
    }
    else if (opti < 300)
    {
      digitalWrite(LED, HIGH);
    }
  }
  else
  {
    poti = analogRead(A2); 
    EEPROM.put(0, poti);
    if (LichtValue > poti)
    {
      digitalWrite(LED, HIGH);
    }
    else
    {
      digitalWrite(LED, LOW);
    }

  }


}