Interrupt mit Servos?

Hallo Zusammen,

ich bin relativ neu im Thema Arduino und habe ein Problem bei einem Projekt, an dem ich zur Zeit sitze.
Ich habe einen Arduino Mega, ein LCD Shield von Adafruit, einen Servoshield von Adafruit und viele Servos. Ziel soll sein, dass über einen Schalter z.B. zwei Servos ihre Position ändern. Dies soll so lange so bleiben, bis ich den Schalter zurück schalte. Währenddessen möchte ich über einen LCD Display die anderen Servos einzeln auf und zu machen können. Ist der Schalter “aus” möchte ich die zwei Servos aber auch über den Display einzeln auf und zu machen können.
Die Steuerung der einzelnen Servos über ein Menü im Display funktioniert schon. Die Steuerung über den Schalter funktioniert im Prinzip auch, allerdings kann ich dann die zwei Servos nicht mehr über das Display steuern. Da der Schalter, wenn er auf “aus” steht das PWM Signal des Servos ja “zu” hält und somit kann ich über den Display den Servos natürlich nicht öffnen.
Ich habe dann versucht die Steuerung der zwei Servos über einen Interrupt Befehl zu steuern. Allerdings funktioniert dies mit den Servos nicht. Steuer ich darüber eine LED an funktioniert es, ich kann sie an und aus schalten. Mit einem Servo funktioniert es allerdings nicht…

Könnt ihr mir vielleicht weiterhelfen?
Schönen Gruß, Sarah

Du solltest Taster anstatt Schalter benutzen.

Oder einen Servo, der den Knebel des Schalters mechanisch zurück stellt :)

Das Problem ist, dass der Schalter eigentlich über 12V einen Dampfgenerator einschaltet und der soll so lang anbleiben, bis genug Rauch erzeugt wurde. Dann soll man den wieder ausschalten können über den Schalter. Im Prinzip möchte ich dann nur davon ein Signal abgreifen, sodass der Arduino erkennt, wenn der Schalter auf "ein" ist um dann unter anderem Servos und Leds anzusteuern. Deshalb wäre ein Taster eher blöd, weil ich den dann ja die ganze Zeit drücken muss bis genug Rauch erzeugt wurde... Das 12 V Signal habe ich mittels Widerständen schon auf Arduinofreundliche 5V reduziert, aber die Schaltung funktioniert halt nicht so richtig...

so lang anbleiben, bis genug Rauch erzeugt wurde

Eine sehr witzige Formulierung, wenn das irgend was wäre, was für deine Steuerung relevant wäre.

Allein mit dem Wort "genug" sind alle Rauchmelder ziemlich überfordert. Und wenn es dann noch um Dampf statt Rauch geht, wird das sicher ein kaum lösbares Messtechnik Problem.

Also willst du das ganze nur manuell steuern: per Schalter -- Stellung 1 oder 2. und ob irgendwo Dampf oder Rauch rauskommt, interessiert die Steuerung der Servos und LEDs kein bisschen ?

Währenddessen möchte ich über einen LCD Display die anderen Servos einzeln auf und zu machen können. Ist der Schalter "aus" möchte ich die zwei Servos aber auch über den Display einzeln auf und zu machen können.

Das sollen wohl zusätzliche Taster (LCD Keypad) sein, die das Ganze bei Betätigung nochmal ändern können.

Musst du also bei deinem Schalter erkennen, dass gerade ein Umschalten erfolgt ist, und du also wieder eine deiner beiden Grundstellungen haben willst. Das spräche (da leuchtet mir ElEspanols Meinung ein) auch eher für 2 Taster.

Oder in Stellung A des Schalters ist die LCD Keypad Geschichte gesperrt, in B können die Servos nach Belieben geändert werden ...

?


Zweiter Anlauf:

In Ruhe mehrmals gelesen, verstehe ich dies:

  • Du hast ein Signal das du einliest "Dampf_Ein":    kommt (per Spannungsteiler) irgendwo her und ist HIGH oder LOW
  • Du hast ein LCD mit Keypad für ein Menuesystem.
  • Du hast viele Servos. Die werden irgendwie manuell über das Menüsystem gesteuert.
  • Zwei der Servos haben eine Sonder-Rolle:
  • Ist das Dampf_Ein Signal HIGH, können sie nicht über das Menüsystem geändert werden.
  • Ist das Dampf_Ein Signal HIGH, werden diese zwei in eine bestimmte Stellung gefahren.
  • Ändert sich das Dampf_Ein Signal von HIGH nach LOW, werden sie in eine andere Stellung gefahren,     können danach aber manuell verstellt werden

Halbwegs richtig? Wo ist da das Problem? Hat jedenfalls nichts mit Interrupt zu tun...

michael_x: - Ist das Dampf_Ein Signal HIGH, können sie nicht über das Menüsystem geändert werden. - Ist das Dampf_Ein Signal HIGH, werden diese zwei in eine bestimmte Stellung gefahren. - Ändert sich das Dampf_Ein Signal von HIGH nach LOW, werden sie in eine andere Stellung gefahren,     können danach aber manuell verstellt werden

Halbwegs richtig? Wo ist da das Problem? Hat jedenfalls nichts mit Interrupt zu tun...

Wenn das so ist, genau, wo ist das Problem. Allerdings glaube ich, dass der TE die Funktion noch nicht ganz durchdacht hat.

  • Du hast ein Signal das du einliest "Dampf_Ein": kommt (per Spannungsteiler) irgendwo her und ist HIGH oder LOW
  • Du hast ein LCD mit Keypad für ein Menuesystem.
  • Du hast viele Servos. Die werden irgendwie manuell über das Menüsystem gesteuert.
  • Zwei der Servos haben eine Sonder-Rolle:
  • Ist das Dampf_Ein Signal HIGH, können sie nicht über das Menüsystem geändert werden.
  • Ist das Dampf_Ein Signal HIGH, werden diese zwei in eine bestimmte Stellung gefahren.
  • Ändert sich das Dampf_Ein Signal von HIGH nach LOW, werden sie in eine andere Stellung gefahren, können danach aber manuell verstellt werden

Im Prinzip gibt es die Funktion ganz gut wieder. Mein Problem ist folgendes: wenn ich über eine if funktion die zwei Servos so programmiere, dass bei einem LOW des Dampf_Ein Signals die Servos auf ihre Ursprungsstellung (ZU) fahren, kann ich nicht mit dem LCD Display-Menü dagegensteuern indem ich sage Servos AUF. Der Servoarm macht dann nur einen kurzen Versuch dagegen zu Arbeiten und hört dann auf. Warscheinlich gibt es dafür eine zeimlich einfache Lösung, aber irgendwie stehe ich gerade auf dem Schlauch...

Hab noch nicht verstanden ob das ein Hardwareproblem ist oder ein Fehler im Sketch.

Wenn Du die Servos direkt über den Schalter ausschaltest kann der Arduino nicht einschalten. Wenn du den Zustand des Schalters aussliest und dann dementsprechend den servo ansteuerst dann ist ein fehler im Sketch.

Jetzt zur wichtigen Frage:

Sollen wir weiter raten oder gibst Du uns die notwendigen Infos ( Sketch schaltplan Fotos)?

Grüße Uwe

Ist ein Fehler in der Logig im Sketch.

Du musst mit der ansteigenden Flange eine Variable setzen, die den Servo steuert. Diese Variable lannst du dann mit dem Touch ändern und der Servo macht was er soll. Mit der fallenden Flanke setzt du die Variable wieder zurück und der Servo geht wieder in Grundstellung.

Du darfst NICHT dauernd die Schalterposition DIREKT auf den Servo geben!