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
Langes delay - wie macht man das?
26.08.2015, 15:21 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2015 15:28 von Gelegenheitsbastler.)
Beitrag #1
Langes delay - wie macht man das?
Hallo,

in einem Projekt soll der Arduino einen Pin auf HIGH schalten wenn ein Taster gedrückt wurde und diesen Zustand für etwa eine Stunde halten. Während dessen soll eine LED blinken, um anzuzeigen, dass der besagte Pin auf HIGH steht.

Ich würde durch ein Aneinanderreihen von delay Befehlen auf eine Stunde kommen, aber wie stelle ich es an, dass die LED während dessen blinkt?

Meine Idee wäre eine Schleife, in der steht, dass der Pin auf HIGH gesetzt wird und die LED zwischen HIGH und LOW hin und her geschaltet wird. Ein Durchlauf dauert beispielsweise eine Sekunde. Ein Zähler zählt, wie oft die Schleife schon durchlaufen wurde und wenn 3600 erreicht wurde, werden beide Pins auf LOW gesetzt.

Soweit zu meiner Idee. Aber wie programmiert man sowas? Nach welchen Suchbegriffen müsste ich suchen, um Beispiele zu finden? Bisher war die Suche leider erfolglos.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 15:39
Beitrag #2
RE: Langes delay - wie macht man das?
Gegenfrage: warum willst du das mit einem Arduino machen?
Das geht mit einen Timer z.B 555 und einer Blinkdiode ebenso.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 15:47 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2015 15:48 von Gelegenheitsbastler.)
Beitrag #3
RE: Langes delay - wie macht man das?
Das stimmt. Genau das habe ich auch überlegt. Aber ich habe keine Blink-LED rumliegen. Kostenmäßig wird sich das auch nicht viel tun. Den Arduino Pro Mini Clone habe ich noch herum liegen und irgendwann mal für 1,70 aus China gekauft.

Außerdem könnte ich lernen, wie ein solches Problem, dass es in ähnlicher Form immer mal wieder geben wird, in Software gelöst wird.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 16:02 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2015 16:08 von hotsystems.)
Beitrag #4
RE: Langes delay - wie macht man das?
Das versteh ich.

Wenn du dir die Funktion "Blinken ohne delay" ansiehst, dann hast du schon einen großen Teil davon.
Die Dauer von einer Stunde kannst du auch mit der millis-Funktion aufbauen.
Edit:
Und bitte, nehme keine "delays", damit wird der Arduino angehalten.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 16:25 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2015 16:27 von Gelegenheitsbastler.)
Beitrag #5
RE: Langes delay - wie macht man das?
Okay, das habe ich mir angeschaut. Das scheint ja relativ überschaubar. Wenn ich den Taster erst mal weg lasse und den RelaisPin in void setup auf HIGH setze, müsste so die LED im Sekundentakt blinken und das Relais nach einer Stunde abfallen. Richtig?


Code:
// constants won't change. Used here to set a pin number :
const int ledPin =  13;      // the number of the LED pin
const int relaisPin = 12;

// Variables will change :
int ledState = LOW;             // ledState used to set the LED
int relaisState = LOW;

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated
unsigned long previousMillisRelais = 0;

// constants won't change :
const long interval = 1000;           // interval at which to blink (milliseconds)
const long intervalRelais = 3600000;


void setup() {

  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
  pinMode(relaisPin, OUTPUT);
  digitalWrite(relaisPin, HIGH);
}

void loop()
{
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the
  // difference between the current time and last time you blinked
  // the LED is bigger than the interval at which you want to
  // blink the LED.
  unsigned long currentMillis = millis();
  unsigned long currentMillisRelais = millis();
  
    if(currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;  

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;



    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);

  }
  
  
     if(currentMillisRelais - previousMillisRelais >= intervalRelais) {
    previousMillisRelais = currentMillisRelais;  

    if (relaisState == LOW)
      relaisState = HIGH;
    else
      relaisState = LOW;

       digitalWrite(relaisPin, relaisState);
     }
  
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 16:45
Beitrag #6
RE: Langes delay - wie macht man das?
Ich kann so keinen Fehler erblicken.
Du musst nur den Led-Status nach dem Relaiszeitraum setzen.
Das muss du mit einer weiteren Variablen machen, da LedState weiter blinken würde.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 19:52
Beitrag #7
RE: Langes delay - wie macht man das?
Alles funktioniert genau so, wie es soll. Vielen Dank für den Tip!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 20:52
Beitrag #8
RE: Langes delay - wie macht man das?
Prima, das freut mich, das es funktioniert.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  NeoPixels: Sketch will nicht - Problem mit delay? Zabsi 5 405 22.08.2017 15:17
Letzter Beitrag: Tommy56
  2 Servos ohne delay steuern Ratlos 27 2.359 26.07.2017 20:43
Letzter Beitrag: MicroBahner
  LEDs ansteuern ohne Delay mir MIDI abfrage OnkelPelle 11 979 20.07.2017 22:35
Letzter Beitrag: hotsystems
  delay(...) im Code ok? donut 4 529 08.06.2017 20:16
Letzter Beitrag: donut
  Brauche Zeitverzögerung delay/millis/timer? Spiecky 17 1.390 15.04.2017 09:41
Letzter Beitrag: hotsystems
  Welche schleife macht Sinn? Franklin 11 679 18.03.2017 15:39
Letzter Beitrag: MicroBahner
  Mein Skript macht nicht das was es soll ;( DerMatze79 4 542 16.03.2017 22:19
Letzter Beitrag: MicroBahner
  Servo macht komische Sachen Jochenv 7 711 08.03.2017 00:23
Letzter Beitrag: Jochenv
  TimeAlarm Bibliothek delay() anweisung renid55 0 350 03.01.2017 21:13
Letzter Beitrag: renid55
  Delay nurmili 2 590 10.07.2016 16:55
Letzter Beitrag: nurmili

Gehe zu:


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