Go Down

Topic: Servo mit Schalter - niedriger/hoher Delay (Read 507 times) previous topic - next topic

nordmann_79

also ich hab mich mal an der Illustration der Schaltung versucht...ich hoffe es ist zu erkennen, was wohin geht

die zwei Servo Objekte sind durch die Idee gekommen, zwei separate Loops zu schaffen die parallel laufen und je nach Schalterstellung wird der Servo dann von Pin0 oder von Pin3 gesteuert...somit ist ein wechsel im laufenden Betrieb möglich?!

Was die Abfrage des Schalters angeht - es handelt sich um so etwas hier
Schalter
eine Abfrage des Schalters sollte damit nicht machbar sein

Ich habe mich an dem "blink wihtout delay" Beispiel versucht - aber da dort LED Status abgefragt wird und ich den Servo nicht abfragen kann, bin ich weiterhin ratlos, wo ich weiter ansetzen soll.

MicroBahner

Was die Abfrage des Schalters angeht - es handelt sich um so etwas hier
Schalter
eine Abfrage des Schalters sollte damit nicht machbar sein
Warum nicht? Mittlerer Pol an Gnd, einer der beiden anderen an den Eingangspin und den Pin mit
Code: [Select]
pinMode( pinNr, INPUT_PULLUP);
initiieren. Der andere Schalteranschluß bleibt einfach frei. Du brauchst eigentlich keinen Umschalter.

Das mit den 2 Servoobjekten und der Umschaltung der Servoleitung ist vollkommen unnötig. Du willst doch nur die Verzögerungszeit beeinflussen, und nichts am Servo.
Gruß, Franz-Peter

nordmann_79

ok...ich kann also einen "State" auslesen - da aber weiterhin in allen Beispielen immer nur von blink mit LED die Rede ist, fehlt mir dennoch der Ansatz oder ein Beispiel, was ich auf meine "Bedürfnisse" hin anpassen kann. Einen Sketch selbst schreiben bekomme ich nicht hin - hab bisher immer nur andere Sketche genommen und versucht, die dortigen Werte an meine Wünsche anzupassen.


Tommy56

Dann hast Du BlinkWithoutDelay nicht verstanden. Hänge nicht am Begriff "blink", das ist nur ein Beispiel.
Der wichtige Inhalt ist die Zeitsteuerung.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

nordmann_79

ich hab jetzt dieses without delay mal angepasst und funktioniert mit simpleservo ganz gut...bzw. genauso wie vorher...damit wäre wohl der erste Schritt weg von "delay" getan.


Code: [Select]
#include <SimpleServo.h>
 
SimpleServo myservo;

int ledPin =  1;      // the number of the LED pin
int ledState = LOW;             // ledState used to set the LED
unsigned long previousMillis = 0;        // will store last time LED was updated
long OnTime = 1000;           // milliseconds of on-time
long OffTime1 = 60000;          // milliseconds of off-time
long OffTime2 = 600000;          // milliseconds of off-time
 
void setup()
{

  pinMode(ledPin, OUTPUT);
  myservo.attach(3);     
}
 
void loop()
{
  // check to see if it's time to change the state of the LED
  unsigned long currentMillis = millis();
 
  if((ledState == HIGH) && (currentMillis - previousMillis >= OnTime))
  {
    ledState = LOW;  // Turn it off
    previousMillis = currentMillis;  // Remember the time
    digitalWrite(ledPin, ledState);  // Update the actual LED
    myservo.write(0);
  }
  else if ((ledState == LOW) && (currentMillis - previousMillis >= OffTime1))
  {
    ledState = HIGH;  // turn it on
    previousMillis = currentMillis;   // Remember the time
    digitalWrite(ledPin, ledState);    // Update the actual LED
    myservo.write(120);

  }
}



vorbereitet habe ich den langen Intervall, der jetzt noch keine Wirkung hat, da ich mich Schritt für Schritt vorwärts bewegen muss, sonst komme ich nicht mit.


wie kann ich nun statt LED LOW/HIGH den Schalter mit einbinden? Und ich hab nun bereits if und if else und müsste nun noch eine weitere if/else einbauen, damit die Schalterstellung auch eine Wirkung hat?!


nordmann_79

#20
Jul 17, 2020, 01:15 pm Last Edit: Jul 17, 2020, 01:16 pm by nordmann_79
ok..hab es...schwere Geburt  :-[

Code: [Select]
#include <SimpleServo.h>
 
SimpleServo myservo;

const int Switch = 3;
int SwitchStatus=LOW;
unsigned long previousMillis = 0;


 
void setup()
{

  pinMode(Switch, INPUT_PULLUP);
  myservo.attach(0);      
}
 
void loop()
{
  // check to see if it's time to change the state of the LED
  unsigned long currentMillis = millis();
  static bool Switch_alt;

  SwitchStatus=!digitalRead(Switch);

  myservo.write(0);
    
  if((SwitchStatus == LOW) && (currentMillis - previousMillis >= 60000))
  {
    previousMillis = currentMillis;
    myservo.write(120);

  }
  else if ((SwitchStatus == HIGH) && (currentMillis - previousMillis >= 600000))
  {
    previousMillis = currentMillis;
    myservo.write(120);

  }

}

Go Up