Widerstandskaskade auswerten von lenkradfernbedienung LFB, Spannung Messen

Hi Zusammen, habe wohl zu lange nicht mehr in die Tasten gehauen :slight_smile: Jedenfalls komme ich nicht mehr weiter und brauche mal eure hilfe Betreffend:

Widerstandskaskade auswerten von lenkradfernbedienung Strom Messen.

Die Strom erkennung läuft gut, also ausreichend genau, (Nachgemessen mit Voltmeter).

Ich schaffe es nur eine led mit diesem code zu aktivieren!

hier mal der code:

 if (analogRead(analogPin)*REF_VOLTAGE/PIN_STEPS <= 2.65 ) {   //2. Vorwerts.2.2-2.8
     digitalWrite(BTLFB_vorwerts, HIGH);
     delay(3000);            
     digitalWrite(BTLFB_vorwerts, LOW); 
     delay(1000);}

mit <= oder >= macht die Variable was Sie soll.

mit == macht sie gar nichts... auch wen ich den ganzen möglichen Volt bereich reinschreibe 2.65 2.64 2.63 usw. oder einzelne Variablen mit einem grossen abdeckungsbereich der Spannung schreibe.

Mache ich eine Variable mit "oder", 2.50||2.51||2.52||2.53||2.54||2.55||2.56||2.57||2.58||2.59||2.60||2.61||2.62||2.63||2.64||2.65||2.66||2.67||2.68||2.69||2.70||2.71||2.72||2.73||2.74||2.75||2.76||2.77

Leuchtet die Led abfolge nonstop, ohne das Volt level anliegt. ohne tasten druck.
Das währe der Spannungsbereich eines Tasters der LFB, gross abgedeckt und liegt weit weg vom nächsten Taster Spannung der LFB.

Wie schaffe ich es, dass ich eine kleinere auflösung der Volt erreiche?
anstatt 2.56V nur noch 2.5.. 2.6.. 2.7 V. Das würde es doch vereinfachen? Ich weiss nicht wie ich eine Variable mit einem Spannungsbereich von 2.50 V bis 2.77 V schreibe/Formulieren soll..???

Da sind 6 Taster an der Auto Lenkrad Fernbedienung die ich auf einer Widerstandskaskaden Leitung auslesen möchte , die Spannung und Widerstandswerte kenne ich, diese dienen zur Steuerung eines vorhandenen BT5.0 audio Tel Steuerung für den Radio. Die 5v Digitalen ausgänge gehen dann direkt auf die taster in der vorhandenen BT Steuerung (gekauftes gerät) Hardware mässig geht alles.. gemessen getestet.. es liegt nur noch am code.. und einigen Tests.

Kann mir ja demnad bitte Helfen oder Tipps geben :slight_smile:

So versuche ich das ganze.. ein Beispiel:

int analogPin = A0; // Achtung Max. 5V Input GMLFB Resistiv Leitung.
int val = 0; // Variable, die den gelesenen Wert speichert
#define REF_VOLTAGE 4.7          // 4.7V @ USB Port. Immer Messen! Stromversorgung vom Arduino.
#define PIN_STEPS 1024.0         // @ Analog Pin A0

#define BTLFB_vorwerts 2         // D2.
#define BTLFB_rueckwerts 3       // D3.
#define BTLFB_Vol_up 4           // D4.
#define BTLFB_Vol_down 5         // D5.
#define BTLFB_mfb 6              // D6.

void setup(){
    pinMode(BTLFB_vorwerts, OUTPUT);        //2. 2,5V ->>
    pinMode(BTLFB_rueckwerts, OUTPUT);      //3. 3.1V <<-
    pinMode(BTLFB_Vol_up, OUTPUT);          //4. 1.3V -
    pinMode(BTLFB_Vol_down, OUTPUT);        //5. 0.8V +
    pinMode(BTLFB_mfb, OUTPUT);             //6. 1.9V "0"=Source 
    pinMode(GMLFB_Relais_Switch, OUTPUT);   //7. 3.7V "=>" Radiospeicher
    Serial.begin(9600);
}

void loop(){
  val = analogRead(analogPin); // Pin einlesen

    Serial.print("Opel WK LFB = ");
    Serial.print(analogRead(analogPin)*REF_VOLTAGE/PIN_STEPS);            // Umrechnung von GMLFB Volt * Ref. Volt / Pin steps Analog 1024.0
    Serial.println(" V");
   // delay(200);

  if (analogRead(analogPin)*REF_VOLTAGE/PIN_STEPS <= 2.65 ) {   //2. Vorwerts. 2-2.8V
     digitalWrite(BTLFB_vorwerts, HIGH);
     delay(3000);            
     digitalWrite(BTLFB_vorwerts, LOW); 
     delay(1000);}
}

Die Spannungswerte stimmen bei Tastendruck sehr genau im Serialmonitor und direkt an dem Analogen eingangs pin gemessen mit Voltmeter, vlt 0,03V Abweichung.

Meinst Du, dass Du mehr oder schneller Antworten bekommst, wenn Du 2 Mal den gleichen Thread auf machst?

@Mod: Bitte einen löschen

Gruß Tommy

Und bitte verwende zukünftig die richtigen Begriffe.
Widerstandskaskade nicht kaske. Und Widerstand nur mit i.
Auch hast du sicher den Strom mit einem Amperemeter gemessen, nicht mit einem Voltmeter.
Dies nur als gut gemeinter Hinweis.

Weiterhin ist dein Beitrag sehr unverständlich und vermute du verwechselst ständig Spannung und Strom.

Tommy56:
Meinst Du, dass Du mehr oder schneller Antworten bekommst, wenn Du 2 Mal den gleichen Thread auf machst?

@Mod: Bitte einen löschen

Gruß Tommy

Weiss auch nicht was dar zur Hölle schief geloffen ist...?? Hatte den Beutrag Editiert und auf einmal waren es 2.. wollte es selber löschen, aber die Option gibt es ja nicht.. SRY

Akropolis:
Mache ich eine Variable mit "oder", 2.50||2.51||2.52||2.53||2.54||2.55||2.56||2.57||2.58||2.59||2.60||2.61||2.62||2.63||2.64||2.65||2.66||2.67||2.68||2.69||2.70||2.71||2.72||2.73||2.74||2.75||2.76||2.77

Wieso hast du da lauter kommawerte???? Ein Analogeingang A0 bringt bei Auslesen 0-1023. Und die muss ich dann auswerten. Da brauchst du keine Kommawerte.
Da mache ich z.B.:

if ((messwert > 150)&&(messwert < 200)) // Ist ein wert zwischen 151 und 199 von 1023
{
dann mache ich das
und das
und...
}

if ((messwert > 200)&&(messwert < 250))
{
dann mache ich das
und das
und...
}

if ((messwert > 250)&&(messwert < 300))
{
dann mache ich das
und das
und...
}

u.s.w.

HotSystems:
Und bitte verwende zukünftig die richtigen Begriffe.
Widerstandskaskade nicht kaske. Und Widerstand nur mit i.
Auch hast du sicher den Strom mit einem Amperemeter gemessen, nicht mit einem Voltmeter.
Dies nur als gut gemeinter Hinweis.

Weiterhin ist dein Beitrag sehr unverständlich und vermute du verwechselst ständig Spannung und Strom.

Da hast du recht.. :wink: "DUCK" und die Schreibfehler sind korrigiert. Ist schon ein Multimeter.. Ohm, Wechsel und Gleich Spannung, Ampere, und paar sachen kann es.

Akropolis:
wollte es selber löschen, aber die Option gibt es ja nicht.. SRY

Doch, gibt es unter More.

Gruß Tommy

Prima, aber bitte auch noch im Titel ändern, das kannst du auch noch anpassen.
Danke.

Franz54:
Wieso hast du da lauter kommawerte???? Ein Analogeingang A0 bringt bei Auslesen 0-1023. Und die muss ich dann auswerten. Da brauchst du keine Kommawerte.
Da mache ich z.B.:

Ja so sollte das funktionieren Danke, werde ich mal Testen, angeblich ist es so eine genauere Messung mit der Umrechnung

#define REF_VOLTAGE 4.7
#define PIN_STEPS 1024.0

(analogRead(analogPin)*REF_VOLTAGE/PIN_STEPS);
//Umrechnung: GMLFB Volt * Ref. Volt / Pin steps Analog 1024.0

Hab das so aus dem Netz..

HotSystems:
Prima, aber bitte auch noch im Titel ändern, das kannst du auch noch anpassen.
Danke.

erledigt

Franz54:
Wieso hast du da lauter kommawerte???? Ein Analogeingang A0 bringt bei Auslesen 0-1023. Und die muss ich dann auswerten. Da brauchst du keine Kommawerte.
Da mache ich z.B.:

if ((messwert > 150)&&(messwert < 200)) // Ist ein wert zwischen 151 und 199 von 1023
{
dann mache ich das
und das
und...
}

if ((messwert > 200)&&(messwert < 250))
{
dann mache ich das
und das
und...
}

if ((messwert > 250)&&(messwert < 300))
{
dann mache ich das
und das
und...
}

u.s.w.

Danke nochmals.. die if abfrage anderst formuliert, wie in deinem Beispiel und der Code macht schon was er soll.. bis hier hin. DANKE

(deleted)

Peter-CAD-HST:
Moin Akropolis
hier kommt ein Vorschlag von meiner Seite. Ich habe mir mal mit meinen ambulanten und gefährlichen Halbwissen eine Fallunterscheidung mit der Switch/Case Anweisung ausgedacht. Diese läßt sich einfach durch weitere Fallunterscheidungen erweitern. Alles was nicht durch eine Fallunterscheidung abgefischt wird, wird in im Fall DEFAULT: bearbeitet. Die jeweiligen Umrechnungen können innerhalb der Fallunterscheidungen vorgnommmen werden.
*** nicht getestet ***
switch (messwert)
{
case 150 ... 199:
dann mache ich das
und das
und...
break;
case 200 ... 249:
dann mache ich das
und das
und...
break;
case 250 ... 299:
dann mache ich das
und das
und...
break;
default:
dann mache ich das
und das
und...
break;
}
Viel Spass beim Testen
Gruß Peter
und gesund bleiben

Danke ja das hört sich auch gut an, bei gelegenheit werde ich es testen :slight_smile: Danke alles gute dir auch

Doppelpost entfernt
Grüße Uwe

Man sollte else nicht unterschätzen:

if (messwert < 150) // Ist ein Wert kleiner 150
{
dann mache ich das
und das
und...
}
else if (messwert < 200) // Ist ein Wert zwischen 150 und 199
{
dann mache ich das
und das
und...
}
else if (messwert < 250)
{
dann mache ich das
und das
und...
}
else if (messwert < 300)
{
dann mache ich das
und das
und...
}
else // Ist ein Wert zwischen 300 und 1023
{
dann mache ich das
und das
und...
}

Ja genau, das sollte auch gehen.