Hilfe beim Verknüpfen von Befehlen

Guten Tag,

heute hätte ich wieder mal eine Frage an euch.

Ich bin momentan dabei Schritt für Schritt die Lektionen des Arduino Tutorials durchzuackern. Dabei nehme ich mir die einzelnen Projekte der jeweiligen Lektion als Basis und verändere bzw. erweitere sie etwas.

Nun kämpfe ich gerade etwas mit dem aktuellen Projekt. Die Basis war Lektion 13, Einbindung eines analogen Joystick Moduls. Im beigelegten Sketch des Tutorials bekommt man verschiedene Werte im serial Monitor angezeigt, wenn der Joystick in der Grundstellung ist, bzw. wenn er bewegt wird. Diese Werte habe ich hergenommen und versucht, die Bewegung des Joysticks via Leds darzustellen.

Mein Problem hier, die Leds tun leider was sie wollen und das liegt wohl an den if Verknüpfungen, ich habe da glaube ich einfach einen "Kurzschluss" programmiert. 5x if ist wohl zuviel, nur mit else habe ich es auch nicht geschafft.

Hier fehlt mir leider noch die Erfahrung bzw. das Wissen über die einzelnen Befehle.

Im Anhang habe ich eine Zip-Datei der .ino angehängt. Vl. kann ja jemand kurz drüber schauen und mir erklären, wie ich das Ganze richtig angehe.

Achja, bevor ich es vergesse, ich hatte versucht im Sketch statt dem Befehl const int den Befehl #define zu verwenden, jedoch habe ich es scheinbar nicht geschafft den Befehl richtig anzuschreiben. Kann mir das schnell einer beispielhaft anschreiben?

Danke vielmals für die Hilfe!

edit:

const int  X_pin = 0;  // X Input Anschluss A0
const int Y_pin = 1; // Y Input Anschluss A1
const int LedWhite = 3;    // Led Weiß, Joystick Center
const int LedBlue1 = 4;    //Led Blau links
const int LedBlue2 =5;     //Led Blau rechts
const int LedRed1 = 6;    //Led Rot hoch
const int LedRed2 = 7;    //Led Rot runter

void setup() {
  pinMode (X_pin, INPUT);
  pinMode (Y_pin, INPUT);
  pinMode(LedWhite, OUTPUT);
  pinMode(LedBlue1, OUTPUT);
  pinMode(LedBlue2, OUTPUT);
  pinMode(LedRed1, OUTPUT);
  pinMode(LedRed2, OUTPUT);
}

void loop() {
  

  if (analogRead(X_pin == 507) && analogRead(Y_pin == 502))
{
  digitalWrite (LedWhite,HIGH);
  digitalWrite (LedBlue1,LOW);
  digitalWrite (LedBlue2,LOW);
  digitalWrite (LedRed1,LOW);
  digitalWrite (LedRed2,LOW);


} 

if (analogRead(X_pin < 505) && analogRead(Y_pin == 502))
{
  digitalWrite (LedWhite,LOW);
  digitalWrite (LedBlue1,HIGH);
  digitalWrite (LedBlue2,LOW);
  digitalWrite (LedRed1,LOW);
  digitalWrite (LedRed2,LOW);


} 
 
if (analogRead(X_pin > 509) && analogRead(Y_pin == 502));
{
  digitalWrite (LedWhite,LOW);
  digitalWrite (LedBlue1,LOW);
  digitalWrite (LedBlue2,HIGH);
  digitalWrite (LedRed1,LOW);
  digitalWrite (LedRed2,LOW);
} 

if (analogRead(X_pin == 507) && analogRead(Y_pin < 500))
{
 digitalWrite (LedWhite,LOW);
  digitalWrite (LedBlue1,LOW);
  digitalWrite (LedBlue2,LOW);
  digitalWrite (LedRed1,HIGH);
  digitalWrite (LedRed2,LOW);
} 
if (analogRead(X_pin == 507) && analogRead(Y_pin > 504));
{
  digitalWrite (LedWhite,LOW);
  digitalWrite (LedBlue1,LOW);
  digitalWrite (LedBlue2,LOW);
  digitalWrite (LedRed1,LOW);
  digitalWrite (LedRed2,HIGH);
} 

}

Mfg A.

Analog_JoystickLed.zip (568 Bytes)

Bitte poste deinen Sketch direkt im Forum.
Eine Zip-Datei ist der schlechteste Weg.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken.

Damit wird dieser für alle besser lesbar.

Du solltest AnalogRead - Werte nie auf Gleichheit prüfen. Immer einen Bereich abfragen.

Ich habe den Code direkt in den Anfangspost eingefügt.

Kann sein, dass ich komplett auf den Holzweg bin mit meinen ersten Versuch, wenn ja bitte klärt mich auf.

Mfg A.

Den Sketch bitte nicht als ZIP Datei anhängen sondern in CODE TAGS Symbol </> in den Text einbetten.

const int  X_pin = 0;  // X Input Anschluss A0
const int Y_pin = 1; // Y Input Anschluss A1
const int LedWhite = 3;    // Led Weiß, Joystick Center
const int LedBlue1 = 4;    //Led Blau links
const int LedBlue2 =5;     //Led Blau rechts
const int LedRed1 = 6;    //Led Rot hoch
const int LedRed2 = 7;    //Led Rot runter

void setup() {
  pinMode (X_pin, INPUT);
  pinMode (Y_pin, INPUT);
  pinMode(LedWhite, OUTPUT);
  pinMode(LedBlue1, OUTPUT);
  pinMode(LedBlue2, OUTPUT);
  pinMode(LedRed1, OUTPUT);
  pinMode(LedRed2, OUTPUT);
}

void loop() {
  

  if (analogRead(X_pin == 507) && analogRead(Y_pin == 502))
{
  digitalWrite (LedWhite,HIGH);
  digitalWrite (LedBlue1,LOW);
  digitalWrite (LedBlue2,LOW);
  digitalWrite (LedRed1,LOW);
  digitalWrite (LedRed2,LOW);


} 

if (analogRead(X_pin < 505) && analogRead(Y_pin == 502))
{
  digitalWrite (LedWhite,LOW);
  digitalWrite (LedBlue1,HIGH);
  digitalWrite (LedBlue2,LOW);
  digitalWrite (LedRed1,LOW);
  digitalWrite (LedRed2,LOW);


} 
 
if (analogRead(X_pin > 509) && analogRead(Y_pin == 502));
{
  digitalWrite (LedWhite,LOW);
  digitalWrite (LedBlue1,LOW);
  digitalWrite (LedBlue2,HIGH);
  digitalWrite (LedRed1,LOW);
  digitalWrite (LedRed2,LOW);
} 

if (analogRead(X_pin == 507) && analogRead(Y_pin < 500))
{
 digitalWrite (LedWhite,LOW);
  digitalWrite (LedBlue1,LOW);
  digitalWrite (LedBlue2,LOW);
  digitalWrite (LedRed1,HIGH);
  digitalWrite (LedRed2,LOW);
} 
if (analogRead(X_pin == 507) && analogRead(Y_pin > 504));
{
  digitalWrite (LedWhite,LOW);
  digitalWrite (LedBlue1,LOW);
  digitalWrite (LedBlue2,LOW);
  digitalWrite (LedRed1,LOW);
  digitalWrite (LedRed2,HIGH);
} 

}

Ich sehe da 2 Probleme und einen großen Fehler
Fehler:

if (analogRead(X_pin == 507) && analogRead(Y_pin == 502))

Da fehlt eine Klammer. Du liest nicht den analogwert von X_pin sondern den Analogwert der Pinnummer, der beim Vergleich von X_pin mit 507 herauskommt und machst dann keinen Vergleich sondern interpretierst den Wert als Wahr (verschieden von 0) oder unwahr (wenn null)
richtig ist:

if ((analogRead(X_pin) == 507) && (analogRead(Y_pin) == 502))

Probleme

  1. das dauernd lesen der Analogwerte. Die können zwischenzeitlich sich ein bißchen ändern und dann sind die Bedingungen teilweise oder öffters erfüllt. Also am Anfang des loop() zuertst die analogen Werte in eine Variable lesen und dann alle IF Bedingungen mit diesen 2 Variablen kontrollieren.
  2. Einen bestimmten Wert zu kontrollieren. Für die Mittelposition würde ich einen Wertebereich wählen und nicht einen einzelnen Wert.
    Statt
if (analogRead(X_pin == 507) && analogRead(Y_pin == 502))

würde ich schreiben:

xWert = analogRead(X_pin);
yWert = analogRead(Y_pin);
...
if ((xWert > 502 && xWert < 512) && (yWert > 597 && yWert < 507))

Grüße Uwe

Hallo Uwe,

danke für deine Antwort.

Bei mir kommt im Versuch mit deinem Code die Fehlermeldung

xWert does not name a type
yWert does not name a type

Sorry für die blöden Fragen, kenn mich wie gesagt leider noch sehr sehr schlecht aus.

Mfg A.

Du mußt die Variablen vorher definieren.