Go Down

Topic: Code sniplet: Kontroll LED blinken lassen (Read 118 times) previous topic - next topic

ElEspanol

Aug 20, 2016, 01:20 pm Last Edit: Aug 20, 2016, 01:20 pm by ElEspanol
Ich wollte mal einen kurzen Sniplet posten, der ein oft gestelltes Problem in meinen Augen elegant löst. Nämlich, wenn man eine Statusvariable hat, und die auf eine LED gibt, aber will, dass die LED blinkt.

Ich hatte das vorher mit millis, nun aber auf INTERVAL umgeschrieben.

Wenns für jemanden nützlich ist, freue ich mich.
Code: [Select]

#include <INTERVAL.h>

const byte ledPin = 13, ledPin2=12, tasterPin = 5;
bool schnellblinkState, tasterState;

void setup() {

  pinMode(ledPin, OUTPUT);
  pinMode(tasterPin, INPUT_PULLUP);

}

void loop() {

  tasterState = !digitalRead(tasterPin);  // statusvariable nehme ich im Beispiel einfach von einem Eingang

  INTERVAL(250UL) {
    schnellblinkState = !schnellblinkState;              // man kann auch mehrere "schnellblinkState" mit verschiedenen Frequenzen anlegen
  }

  digitalWrite(ledPin, tasterState && schnellblinkState);  // man kan die schnellblinkState mit mehreren Ausgängen benutzen, die Blinken dan im Gleichtakt
  digitalWrite(ledPin2, tasterState && !schnellblinkState);  // oder mit !schnellblinkState im Gegentakt
}



DrDiettrich

Das scheint dem every() aus ALib0 zu entsprechen?

ElEspanol

ALib0 habe ich noch nicht verwendet, habs mir gerade angesehen. Klar, mit every() kann man das auch toggeln, aber ich meinte eigentlich mit meinem Beispiel, dass man die "toggelnde Blinkvariable" mit der && Verknüpfung der Statusvariable auf den LED-Ausgang gibt.

Also z.B. im EVA-Prinzip die Statusvariable auf den Ausgang wo das Relais dranhängt, und mit der && Verknüpfung der Statusvariable auf den LED-Ausgang. Somit Blinkt die LED während das Relais angezogen bleibt, anstatt dauernd zu leuchten.


ElEspanol

Das scheint dem every() aus ALib0 zu entsprechen?
Hab mir jetzt die Lib mal genauer angesehen. Da ist ein MyButton Beispiel dabei. Wo ist da die passende Lib dazu? Google und Github hat mich da nicht wirklich weitergebracht, sondern eher mit irrelevantem erschlagen

Code: [Select]

#include "MyButton.h"

MyButton button(4);

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.println("Button Change Test");
  pinMode(13, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (button.changedTo(HIGH)) {
    digitalWrite(13, !digitalRead(13));
    Serial.println("changed");
  }
}

DrDiettrich

#4
Aug 20, 2016, 10:38 pm Last Edit: Aug 20, 2016, 10:43 pm by DrDiettrich
Ist alles in ALib0 :-)

Ich sehe gerade, im README heißt MyButton noch AButton - welchen Namen findet ihr besser?

Danke fürs Testen, das sollte AButton sein, nicht MyButton. Und #include "ALib0.h".

ElEspanol

Aha. Heißt das, ich bin der Erste, der sich tatsächlich damit beschäftigt? ::)

DrDiettrich

Sieht so aus, zumindest mit diesem Beispiel. Die Bibliothek ist aus zwei Teilen zusammengesetzt, Button und Task Makros, und da habe ich wohl beim Zusammenmischen etwas übersehen.

Erst jetzt merke ich, wie bescheuert die Behandlung von Bibliotheken für Entwickler ist. Die IDE erlaubt keine Änderung an den installierten Bibliotheken, was ja während der Entwicklung vorkommen soll, so daß jedes Beispiel als selbständiger Sketch entwickelt werden muß. Und beim Button Beispiel war die alte Header-Datei noch im Projektverzeichnis, deshalb hat dort alles funktioniert. Beim Umkopieren in das Bibliotheksverzeichnis habe ich das übersehen. Jetzt brauche ich mindestens noch eine zweite IDE, in der ich die fertige Bibliothek installieren und testen kann :-(

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy