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
  Delay nurmili 2 219 10.07.2016 16:55
Letzter Beitrag: nurmili
  Problem mit Delay und Millis funnyzocker 1 459 26.06.2016 09:54
Letzter Beitrag: hotsystems
  Kann ich in eine For Schleife einen delay einbauen JanGamer11 6 616 05.01.2016 12:34
Letzter Beitrag: Hilgi
  Rampe ohne Delay DC-Motor de_flexus 3 1.944 22.11.2015 13:07
Letzter Beitrag: frank2000
  Doppelblitz ohne Delay cleko 3 858 12.11.2015 08:02
Letzter Beitrag: Bitklopfer
  Problem einen code zu schreiben der das macht was ich möchte.... Katzenfreund 11 1.460 01.11.2015 17:50
Letzter Beitrag: Katzenfreund
  Taster für zwei Funktionen nutzen - wie macht man das? Gelegenheitsbastler 2 948 22.07.2015 11:56
Letzter Beitrag: Scherheinz
  mal wieder ein kleines Problem mit blinken ohne delay :) Sbbfreack 6 1.734 06.07.2015 15:59
Letzter Beitrag: Sbbfreack
  Einen hochzählenden Wert auf null setzen - wie macht man das? Gelegenheitsbastler 6 1.325 16.05.2015 16:18
Letzter Beitrag: Gelegenheitsbastler
  Blink ohne Delay - Merkwürdiger Fehler rave 7 1.836 11.05.2015 06:29
Letzter Beitrag: Bitklopfer

Gehe zu:


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