Forum

Dieses Forum wurde am 23.01.2018 ins Leben gerufen. Wir freuen uns auf eure Beiträge!

Du musst dich anmelden um Beiträge und Themen zu erstellen.

Servo mit einem Taster starten.

Hallo zusammen,

bin neu hier im Forum.

Da ich sehr wenig Ahnung vom Programmieren habe, oder genauer fast gar keine, aber dennoch den Arduino Nano nutzen möchte, hätte ich die Bitte

mir mal einen Sketch zu vervollständigen um einen Servo mit einem Taster zu starten.

Ich verwende die MobaTools von Microbahner  und kann damit einen Servo komfortabel steuern, die Geschwindigkeit und die Positionen einstellen.

Was ich aber nicht auf die Reihe kriege ist, den Servo mit einem Taster zu starten.

Jetzt läuft der Loop permanent durch und der Servo macht was es soll.

Ich möchte aber, dass der Servo erst startet wenn man den Taster drückt.

Kann mir bitte jemand den Sketch so umbauen damit das funktioniert?

Freundliche Grüße Uwe.

[code]
#include <MobaTools.h>

Servo8 meinServo;

void setup()
{

meinServo.attach(9);

}
void loop()
{

meinServo.setSpeed(6);
meinServo.write(6); //Schranke nach oben
delay(5800);//Pause bis Schranke oben

meinServo.setSpeed(30);
meinServo.write(97);

delay(4200);//Pause bis Servo oben wieder beginnt

}
[/code]

Hallo und willkommen,

gucke Dir doch mal die Anleitung

Nr. 06 – Taster am NodeMCU

dort wird eine LED nach einem Tastendruck fuer 5 Sekunden zum Leuchten gebracht. Das ist an und fuer sich ja nichts Anderes als einen Servo zu verfahren...

Gruss,

a8

 

Hallo maxx,

wie soll das mit dem Taster denn funktionieren? Derzeit läuft der Servo ja hin- und her. Möchtest Du mit dem Taster den gesamten Ablauf ( hin- und her ) starten? Oder mit einmal drücken in eine Richtung laufen und erst mit einem 2. Druck wieder zurück?

P.S.

delay(5800);//Pause bis Schranke oben

Du kannst auch direkt abfragen ob das Servo am Endpunkt angekommen ist, und musst dafür nicht eine Laufzeit annehmen.

Liebe Grüße FP

Hallo MicroBahner,

ich hatte mal in Anlehnung an Deine Beiträge im Stummiforum, eine Schranke gebaut und mit einem Arduino bewegt, was auch gut klappt.

Aber da ich nicht so richtig zurechtkomme mit der Programmierung, die Sache dann aufgegeben.

Jetzt möchte ich eine Bewegung auf der Modellbahn ausführen.

Der Taster soll den Vorgang starten und der Rest automatisch ablaufen.

In der Zeit wo der Sketch abläuft, darf aber der Taster durch erneutes Drücken nicht reagieren.

 

Ein Servo soll langsam in eine Richtung fahren und nach einer Pause die ich selbst bestimmen kann, schnell in die andere Richtung zurückfahren.

Wobei ich die Geschwindigkeiten und die Stellungen des Servo  im Sketch jederzeit ändern kann, was ja auch funktioniert, dank Deiner MobaTools.

Das ganze wird dann in unsere Vereinsanlage eingebaut und die Besucher können dann eine Szene in gang setzten.

Das möchte ich dann für verschiedene Szenen nutzen.

Es wäre schön wenn Du den Sketch für mich so anpassen könntest, das es funktioniert.

Hallo Uwe,

im einfachsten Fall musst Du doch nur eine if-Abfrage um deinen Ablauf machen. Solange der Taster nicht gedrückt ist, wird der Ablauf übersprungen und erst wenn der Taster gedrückt ist beginnt der Ablauf.

(Leider verschluckt die Forumssoftware jegliche Formatierung, ich hab's versucht wiederherzustellen)

#include <MobaTools.h>

Servo8 meinServo;

void setup()
{
  meinServo.attach(9);
  meinServo.write(97); // Servo Grundstellung
  pinMode( 12, INPUT_PULLUP ); // Taster an Pin 12 schaltet nach Gnd
}
void loop()
{
  if ( not digitalRead( 12 ) ) {
    // Taster wurde gedrückt, Ablauf starten
    meinServo.setSpeed(6);
    meinServo.write(6); //Schranke nach oben
    delay(5800);//Pause bis Schranke oben

    meinServo.setSpeed(30);
    meinServo.write(97);

    delay(4200);//Pause bis Servo oben wieder beginnt
  }
}

 

Liebe Grüße FP

Vielen Dank Franz-Peter,

klappt jetzt perfekt.

Wenn ich noch einen zweiten Servo steuern möchte, brauch ich doch nur den 2.  Servo und den 2. Taster an einen anderen Pin anschließen

und unter void loop zusätzlich eintragen, oder ist das nicht so einfach?

Bitte noch einen Tip, wie ich eine grüne und eine rote Led mit einbinde?

Die möchte ich dann im Schalter für den jeweiligen Zustand leuchten lassen.

Vielen Dank und einen schönen 2. Advent, Uwe.

Zitat von maxx am 9. Dezember 2018, 09:44 Uhr

Wenn ich noch einen zweiten Servo steuern möchte, brauch ich doch nur den 2.  Servo und den 2. Taster an einen anderen Pin anschließen

und unter void loop zusätzlich eintragen, oder ist das nicht so einfach?

Hallo Uwe,

das kommt drauf an ... Wenn immer nur der eine ODER der andere Ablauf funktionieren sollen, dann ist das in der Tat so einfach. Wenn es auch möglich sein soll beides unabhängig voneinander zu starten und ablaufen zu lassen - gegebenenfalls also auch gleichzeitig oder versetzt/verschachtelt, dann wird es in der Tat etwas komplizierter. Dann darf man nämlich kein delay() mehr verwenden. Im Stummiforum habe ich mal ein kleines Tutorial geschrieben, wie man Abläufe mit Zeitverzögerungen ohne delay schreiben kann. Wenn man das erstmal verstanden hat, steht einem nichts mehr im Wege mit dem Arduino auch verschiedene Dinge 'quasi parallel' und unabhängig voneinander zu realisieren. Das erfordert sicher etwas Einarbeitung und ein Umdenken bei der Programmierung. Aber es lohnt sich, und sooo schwierig ist es nun auch wieder nicht. Da muss nur erstmal 'der Knoten platzen'.

Um in deinem einfachen Fall eine LED während des Ablaufs aufleuchten zu lassen, musst Du sie ja nur am Anfang des if-Blockes einschalten, und am Ende hinter dem letzten delay() wieder ausschalten.

Liebe Grüße FP
Zitat von MicroBahner am 9. Dezember 2018, 10:26 Uh

Um in deinem einfachen Fall eine LED während des Ablaufs aufleuchten zu lassen, musst Du sie ja nur am Anfang des if-Blockes einschalten, und am Ende hinter dem letzten delay() wieder ausschalten.

Das habe ich schon mal geschafft und nutze auch dazu die SoftLed aus den MobaTools.

Womit dann die beiden LED rot und grün, auch einen schönen Übergang bekommen.

Dein Tutorial werde ich mir in Ruhe anschauen, dann verstehe ich es bestimmt auch.

Ich hatte zwischendurch mal mit Neopixel versucht, da bin ich aber durch "delay" an Grenzen gestoßen.

Um dort schöne Effekte zu erhalten muss man mit "millis" arbeiten, aber da habe ich dann aufgegeben.

Vielleicht kann ich durch Dein Tutorial,  da nochmal versuchen.

vg uwe