INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Projekt Geisterfalle
26.03.2021, 09:06 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2021 09:44 von Geisterjäger.)
Beitrag #1
Projekt Geisterfalle
Guten Tag.
Ich bin ganz neu hier und habe ein Problem bei meinem Quell-Code und hoffe, mir kann jemand helfen und das ich hier im richtigen Forums-Bereich frage.

Ich habe eine Geisterfalle aller Ghostbusters gebaut und wollte diese mit Leds und Servos für die Klappen mit Funktionalität ausstatten.

Beim kompilieren kommt folgende Fehlermeldung: "no match for 'operator==' (operand types are 'Servo' and 'int')"


Der Quell-Code:

Code:
#include <Servo.h>

Servo servo1;
Servo servo2;

int buttonState = 0;
int buttonPin;

const int pedalSchalter = 2;

int ledBar1[] = {
  41, 42, 43, 44, 45, 46, 47, 48, 49, 50
};   // LedBar1 Pinbelegung 41-50
int ledBar2[] = {
  41, 42, 43, 44, 45, 46, 47, 48, 49, 50
};   // LedBar2 Pinbelegung 41-50
int i, j;

int trapLed = 39;                    // Rote Led an Falle
int pedalLed = 40;                   // Rote Led an Pedal

int trapLedPlatte = 38;              // Helle Leds in der Falle


void setup() {

  pinMode(pedalSchalter, INPUT);    //Schalter auf input setzen

  servo1.attach(10);                // Servo fuer Fallenklappe links
  servo2.attach(11);                // Servo fuer Fallenklappe rechts

  for (i = 1; i++;) {               // Schalte alle Leds der Bar auf output
    pinMode(ledBar1[40 + i], OUTPUT);

    if (i = 10);


  }
  pinMode(trapLed, OUTPUT);

  pinMode(pedalLed, OUTPUT);
}

void loop() {

  buttonState = digitalRead(buttonPin);

  digitalRead(pedalSchalter);      //Lese, ob Schalter gedrueckt wird

  if (pedalSchalter == LOW) {      // Wenn Pedal nicht gedrueckt wird

    digitalWrite(trapLed, HIGH);     //Led an Falle dauerleuchten

    digitalWrite(pedalLed, HIGH);    //Led an Pedal dauerleuchten

    for (i = 1; i++;)
      for (j = 6; j++;)           {         //LedBar start

        digitalWrite(ledBar1[40 + i], HIGH); // HIGH schaltet Led1 an
        delay(1000);                         // warte eine Sekunde
        digitalWrite(ledBar1[40 + i], LOW);  // Schalte Led1 aus


        digitalWrite(ledBar2[40 + j], HIGH); // HIGH schaltet Led2 an
        delay(1000);                         // warte eine Sekunde
        digitalWrite(ledBar2[40 + j], LOW);  // Schalte Led2 aus

        if (i = 10) {
          i = 1;
        };
        if (j = 10) {
          j = 1;
        };

      }
  }
  else {

    int pos = 90;
    servo1.write(pos);
    servo2.write(pos);

    if (servo1 == 90) {         //Wenn die Klappen offen sind, starte die Ledplatte fuer 10 Sekunden

      trapLedPlatte = HIGH; 10000);

      for (i = 1; i++;)
    for (j = 6; j++;)       {               //LedBar start

      digitalWrite(ledBar1[40 + i], HIGH);  // HIGH schaltet Led1 an
        delay(250);                           // warte viertel Sekunde
        digitalWrite(ledBar1[40 + i], LOW);   // Schalte Led1 aus


        digitalWrite(ledBar2[40 + j], HIGH);  // HIGH schaltet Led2 an
        delay(250);                           // warte viertel Sekunde
        digitalWrite(ledBar2[40 + j], LOW);   // Schalte Led2 aus

        if (i = 10) {
          i = 1;
        };
        if (j = 10) {
          j = 1;
        };

      }
    }

    pos = 0;
    servo1.write(pos);
    servo2.write(pos);

    if (servo1 == 0) {         //Wenn die Klappen geschlossen sind, beende die Ledplatte

      trapLedPlatte = LOW);

      for (i = 1; i++) {                   //LedBar start

      digitalWrite(ledBar1[40 + i], HIGH); // HIGH schaltet Led1 an
        delay(250);                          // warte viertel Sekunde

      }


      {
        digitalWrite(trapLed, HIGH);        //trapLed = blinken halben Sekundeninterval
        delay(500);
        digitalWrite(trapLed, LOW);
        delay(500);
      }

      {
        digitalWrite(pedalLed, HIGH);        //pedalLed = blinken halben Sekundeninterval
        delay(500);
        digitalWrite(pedalLed, LOW);
        delay(500);
      }
    }
  }
}

Es gibt anscheinend ein Problem mit den Servos und der if-Abfrage, wenn ich ihnen eine Position von 0° bzw. 90° zuweise.
Wahrscheinlich ein kleines Problem, was mich aber verzweifel lässt.

PS: Quell-Code lesen geht bei mir, beim schreiben tu ich mich schwer ;)

Danke für jede Hilfe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.03.2021, 09:15 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2021 09:16 von hotsystems.)
Beitrag #2
RE: Projekt Geisterfalle
Ist denn schon wieder Halloween ?

Dein Sketch ist nicht lesbar, kA. wie du es machst.

Setze den bitte in Code-Tags, wie das geht, steht hier.
Dann ist der evtl. für alle lesbar.

Und schau dir mal in den Beispielen an, wie man Taster am Arduino ausliest.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.03.2021, 09:17 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2021 09:24 von MicroBahner.)
Beitrag #3
RE: Projekt Geisterfalle
Setze deine Code bitte in Code-Tags ( geht auch noch nachträglich ) und formatiere ihn ordentlich ( ctrl-T in der IDE hift dir dabei ).
Das hier:
Code:
if (servo1 == 0) { //Wenn die Klappen geschlossen sind, beende die Ledplatte
geht nicht. 'servo1' ist nicht die Position des servo, Dazu musst Du servo.read() benutzen. Also:
Code:
if (servo1.read() == 0) { //Wenn die Klappen geschlossen sind, beende die Ledplatte
Der Fehler ist öfters drin. Du könntest aber auch einfach 'pos' - den letzten Wert, den Du an das Servo übergeben hast - abfagen.

Genau genommen ist dieser ganze Konstrukt:
Code:
pos = 0;
servo1.write(pos);
servo2.write(pos);

if (servo1.read() == 0) { //Wenn die Klappen geschlossen sind, beende die Ledplatte
ziemlich sinnfrei. Du setzt einen Wert zu 0 und fragst dann ab, ob er auch 0 ist. Das ist immer wahr.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.03.2021, 09:50
Beitrag #4
RE: Projekt Geisterfalle
(26.03.2021 09:17)MicroBahner schrieb:  Setze deine Code bitte in Code-Tags ( geht auch noch nachträglich ) und formatiere ihn ordentlich ( ctrl-T in der IDE hift dir dabei ).

Hoffe jetzt ist es besser.

(26.03.2021 09:17)MicroBahner schrieb:  Das hier:
Code:
if (servo1 == 0) { //Wenn die Klappen geschlossen sind, beende die Ledplatte
geht nicht. 'servo1' ist nicht die Position des servo, Dazu musst Du servo.read() benutzen. Also:
Code:
if (servo1.read() == 0) { //Wenn die Klappen geschlossen sind, beende die Ledplatte
Der Fehler ist öfters drin. Du könntest aber auch einfach 'pos' - den letzten Wert, den Du an das Servo übergeben hast - abfagen.

Ok, danke für den Hinweis.

(26.03.2021 09:17)MicroBahner schrieb:  Genau genommen ist dieser ganze Konstrukt:
Code:
pos = 0;
servo1.write(pos);
servo2.write(pos);

if (servo1.read() == 0) { //Wenn die Klappen geschlossen sind, beende die Ledplatte
ziemlich sinnfrei. Du setzt einen Wert zu 0 und fragst dann ab, ob er auch 0 ist. Das ist immer wahr.

Das zeigt, wie wenig Ahnung ich in diesem Bereich noch habe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.03.2021, 10:01 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2021 10:03 von hotsystems.)
Beitrag #5
RE: Projekt Geisterfalle
(26.03.2021 09:50)Geisterjäger schrieb:  Hoffe jetzt ist es besser.

Ja, es ist jetzt lesbar.

Zitat:Das zeigt, wie wenig Ahnung ich in diesem Bereich noch habe

Und das kann man lernen.
Sieh dir einfach mal die "Arduino Referenz" an.

Und dann gibt es in der IDE noch ein schönes "Strg + T", dass solltest du mal auf deinem Sketch anwenden, dann wird er sauber formatiert. Damit für dich und andere noch besser lesbar.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.04.2021, 17:45
Beitrag #6
RE: Projekt Geisterfalle
Hallo.
Jetzt hab ich es endlich geschafft, mein Code auf den Arduino hochzuladen. Allerdings funktioniert es noch nicht

Code:
#include <Servo.h>

Servo servo1;

int buttonState = 0;
int buttonPin = 3;

const int pedalSchalter = 3;

int ledBar1[] = {22, 24, 26, 28, 30, 32, 34, 36, 38, 40};   // LedBar1 Pinbelegung 22,24,26,28,30,32,34,36,38,40

int i;

int trapLed = 51;                    // Rote Led an Falle
int pedalLed = 49;                   // Rote Led an Pedal

int trapLedPlatte = 53;              // Helle Leds in der Falle


void setup() {

  pinMode(pedalSchalter, INPUT);    //Schalter auf input setzen

  servo1.attach(10);                // Servo fuer Fallenklappen
  int pos = 170;
  servo1.write(pos);

  for (i = 1; i++;) {               // Schalte alle Leds der Bar auf output

    pinMode(ledBar1[22 + i], OUTPUT);

    if (i = 10);
  }
  pinMode(trapLed, OUTPUT);

  pinMode(pedalLed, OUTPUT);
}

void loop() {

  buttonState = digitalRead(buttonPin);

  digitalRead(pedalSchalter);      //Lese, ob Schalter gedrueckt wird

  if (pedalSchalter == LOW) {      // Wenn Pedal nicht gedrueckt wird

    digitalWrite(trapLed, HIGH);     //Led an Falle dauerleuchten

    digitalWrite(pedalLed, HIGH);    //Led an Pedal dauerleuchten

    for (i = 1; i++;) {         //LedBar start

      digitalWrite(ledBar1[22 + i], HIGH); // HIGH schaltet Led1 an
      delay(1000);                         // warte eine Sekunde
      digitalWrite(ledBar1[22 + i], LOW);  // Schalte Led1 aus

      if (i = 10) {
        i = 1;
      };
    }
  }

  else {

    int pos = 260;
    servo1.write(pos);

    if (servo1.read() == 90) {         //Wenn die Klappen offen sind, starte die Ledplatte fuer 10 Sekunden

      trapLedPlatte = HIGH;
      delay (10000);
      for (i = 1; i++;)   {               //LedBar start

        digitalWrite(ledBar1[22 + i], HIGH);  // HIGH schaltet Led1 an
        delay(250);                           // warte viertel Sekunde
        digitalWrite(ledBar1[22 + i], LOW);   // Schalte Led1 aus

        if (i = 10) {
          i = 1;
        };
      }
    }

    pos = 170;
    servo1.write(pos);

    if (servo1.read() == 0) {         //Wenn die Klappen geschlossen sind, beende die Ledplatte

      trapLedPlatte = LOW;

      for (i = 1; i++;) {                   //LedBar start

        digitalWrite(ledBar1[22 + i], HIGH); // HIGH schaltet Led1 an
        delay(250);                          // warte viertel Sekunde

      }

      {
        digitalWrite(trapLed, HIGH);        //trapLed = blinken halben Sekundeninterval
        delay(500);
        digitalWrite(trapLed, LOW);
        delay(500);
      }

      {
        digitalWrite(pedalLed, HIGH);        //pedalLed = blinken halben Sekundeninterval
        delay(500);
        digitalWrite(pedalLed, LOW);
        delay(500);
      }

      {
        digitalWrite(trapLedPlatte, HIGH);        //trapLedPlatte = blinken halben Sekundeninterval
        delay(700);
        digitalWrite(trapLedPlatte, LOW);
        delay(500);
      }
    }
  }
}

Wenn ich den Schalter für die Stromzufuhr umlege, reagiert der Servo, allerdings beginnen sämtliche Leds nicht zu leuchten.
Das Pedal zeigt auch keine Reaktion. Vermutung ist, dass ich das Pedal falsch in den Code eingebaut habe, was dazu führt, das der komplette Code nicht ausgeführt wird.

Ich entschuldige mich, dass ich so ein Laie bin :/
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.04.2021, 18:47
Beitrag #7
RE: Projekt Geisterfalle
Es wäre schön, wenn Du die ganzen unnötigen Leerzeilen und unnötigen {} entfernst. Dann wird Dein Code übersichtlicher.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.04.2021, 17:14
Beitrag #8
RE: Projekt Geisterfalle
(08.04.2021 18:47)Tommy56 schrieb:  Es wäre schön, wenn Du die ganzen unnötigen Leerzeilen und unnötigen {} entfernst. Dann wird Dein Code übersichtlicher.

Gruß Tommy

Leider war ich zu langsam und kann meinen Post nicht mehr editieren. Entschuldigt bitte.
Ich hoffe ich habe die unnötigen {} entfernt. Aber bei den if-else-Abfragen und den for-Schleifen sind sie so richtig?
Ich bin mir nicht ganz sicher, welche Leerzeichen noch alles stören. Hab die //Kommentierung bewusst etwas aus dem Code raus geschoben (oder ist das nicht gemeint?). Auch habe ich vielleicht mal den einen oder anderen Absatz zuviel hier eingebaut oder sind die gemeint?

Code:
#include <Servo.h>

Servo servo1;

int KlappeClose = 170;
int KlappeOpen = 260;

int buttonState = 0;
int buttonPin;

int pedalSchalter = 3;

int ledBar1[] = {22, 24, 26, 28, 30, 32, 34, 36, 38, 40};   // LedBar1 Pinbelegung 22,24,26,28,30,32,34,36,38,40
int ledBar2[] = {22, 24, 26, 28, 30, 32, 34, 36, 38, 40};   // LedBar2 Pinbelegung 22,24,26,28,30,32,34,36,38,40
int i, j;

int trapLed = 51;                    // Rote Led an Falle
int pedalLed = 49;                   // Rote Led an Pedal
int trapLedPlatte = 53;              // Helle Leds in der Falle

void setup() {

  pinMode(pedalSchalter, INPUT);    //Schalter auf input setzen

  servo1.attach(10);                // Servo für Fallenklappe links

  for (i = 1; i++;) { // Schalte alle Leds der Bar auf output
    pinMode(ledBar1[22 + i], OUTPUT);
    if (i = 10);
  }
  pinMode(trapLed, OUTPUT);
  pinMode(pedalLed, OUTPUT);
}

void loop() {

  buttonState = digitalRead(pedalSchalter);      //Lese, ob Schalter gedrückt wird

  if (pedalSchalter == LOW) {      // Wenn Pedal nicht gedrückt wird

    servo1.write(KlappeClose);               //Klappen geschlossen

    digitalWrite(trapLed, HIGH);     //Led an Falle dauerleuchten
    digitalWrite(pedalLed, HIGH);    //Led an Pedal dauerleuchten

    for (i = 1; i++;)  {
      for (j = 6; j++;)           {         //LedBar start

        digitalWrite(ledBar1[22 + i], HIGH); // HIGH schaltet Led1 an
        delay(1000);                         // warte eine Sekunde
        digitalWrite(ledBar1[22 + i], LOW);  // Schalte Led1 aus

        digitalWrite(ledBar2[22 + j], HIGH); // HIGH schaltet Led2 an
        delay(1000);                         // warte eine Sekunde
        digitalWrite(ledBar2[22 + j], LOW);  // Schalte Led2 aus

        if (j = 20) {
          j = 1;
        }
        if (i = 20) {
          i = 1;
        }
      }
    }
  }
  else {

    servo1.write(KlappeOpen);             //Öffne Klappen
    delay (100);

    digitalWrite(trapLedPlatte, HIGH);   // HIGH schaltet trapLedPlatte für 10 Sekunden an
    delay(10000);

    for (i = 1; i++;)
      for (j = 6; j++;)       {         //LedBar start

        digitalWrite(ledBar1[22 + i], HIGH); // HIGH schaltet Led1 an
        delay(250);                         // warte viertel Sekunde
        digitalWrite(ledBar1[22 + i], LOW);  // Schalte Led1 aus

        digitalWrite(ledBar2[22 + j], HIGH); // HIGH schaltet Led2 an
        delay(250);                         // warte viertel Sekunde
        digitalWrite(ledBar2[22 + j], LOW);  // Schalte Led2 aus

        if (i = 20) {
          i = 1;
        };
        if (j = 20) {
          j = 1;
        };
      }
  }

  servo1.write(KlappeClose);             //Klappen sind geschlossen

  digitalWrite(trapLedPlatte, LOW);    // LOW schaltet trapLedPlatte aus

  for (i = 1; i <= 20; i++) {                  //LedBar start

    digitalWrite(ledBar1[22 + i], HIGH); // HIGH schaltet Led1 an
    delay(250);                          // warte viertel Sekunde

    digitalWrite(trapLed, HIGH);        //trapLed = blinken halben Sekundeninterval
    delay(500);
    digitalWrite(trapLed, LOW);
    delay(500);

    digitalWrite(pedalLed, HIGH);        //pedalLed = blinken halben Sekundeninterval
    delay(500);
    digitalWrite(pedalLed, LOW);
    delay(500);

    digitalWrite(trapLedPlatte, HIGH);   //pedalLed = blinken halben Sekundeninterval
    delay(750);
    digitalWrite(trapLedPlatte, LOW);   //trapLedPlatte = blinken halben Sekundeninterval
    delay(500);
  }
}


Ich schein, neben meinem Mangel an Progammierkenntnissen, Probleme mit den Schleifen und dem Taster zu haben.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Library-Konflikt beim Signalgenerator-Projekt tapsi 6 436 16.05.2021 12:08
Letzter Beitrag: tapsi
  Projekt Triple-Handrad CNC Fridolein 2 499 24.04.2021 21:39
Letzter Beitrag: Fridolein
  Modell Projekt Jan-Daniel99 21 1.583 09.03.2021 16:28
Letzter Beitrag: hotsystems
Wink Ein kleines Projekt für die Modelleisenbahn Arduino DMX Master 48 4.742 17.12.2020 14:31
Letzter Beitrag: Arduino DMX Master
  Projekt Stellwerk Arduino DB Nico 17 2.926 01.07.2020 13:27
Letzter Beitrag: DB Nico
  Projekt: Bewegunsmeldung per Lorawan Bodycocoon 23 3.313 19.05.2020 14:05
Letzter Beitrag: GuaAck
  Kleines Projekt mit RFID Stefu1987 31 4.174 11.05.2020 20:24
Letzter Beitrag: Retian
  Neuling mit Fragen für sein Projekt Inferno481 8 2.379 19.04.2020 20:53
Letzter Beitrag: Tommy56
  Erstes Projekt Ampelsteuerung HankfromHell 13 2.528 02.04.2020 21:56
Letzter Beitrag: hotsystems
  Blutiger Anfänger/ Projekt: Visuelle Takthilfe bencha 17 2.952 01.03.2020 17:45
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste