Hi, ich habe derzeit ein kleines Problem. Und zwar will ich neben eine "Hauptprogramm" ein "Nebenprogramm" laufen lassen, das einen LED Streifen im fließenden Farbwechselmodus steuern soll. Kennt jemand eine "Formel" wo ich mein "Hauptprogramm" und mein "Nebenprogramm" gleichzeitig laufen lassen kann?
Also wenn sich der Eingangstext mehrfach ändert soll der Arduino im "Hauptprogramm" Ausgänge Schalten können, während sich im "Nebenprogramm" die ganze Zeit sich Werte ändern und an analoge Ausgänge abgibt.
Benutzt wird ein Arduino Uno.
Danke schon mal für alle Antworten
Hallo dwillron
Schaue dir die Konstruktion von einem Endlichen Automaten an. Damit kannst du Funktionen "quasi" parallel laufen lassen.
Ich wünsche einen geschmeidigen Tag und viel Spass beim Programmieren in C++.
schau dir mal das IDE Beispiel "Blink Without Delay" an.
Du lässt eine LED blinken und kannst im Loop auch noch was anderes Machen.
Das ist das Grundprinzip das du verstehen lernen musst.
Wenn du eine LED blinken lassen kannst, kannst sie auch farbwechseln, faden, was auch immer) und daneben noch anderes tun.
Oder du sagst, nein interessiert mich nicht, ich will was fertiges.
Dann gibts eine Library dafür.
Ablaufsteuerung
Meine Standardantwort zu Ablaufsteuerungen:
Eine Stichworte Sammlung für Google Suchen:
- Endlicher Automat,
- ProtoThreads,
- State Machine,
- Multitasking,
- Coroutinen,
- Ablaufsteuerung,
- Schrittkette,
- BlinkWithoutDelay,
Welcher Typ, wieviele Pixel?
Eng betrachtet geht "gleichzeitig" nicht, nur möglichst schnell nacheinander.
Als Beispiel zwei blinkende LEDs. Durch blockadearme Programmierung blinkenden die LEDs nahezu unabhängig:
const byte ledPin1 = 13;
const byte ledPin2 = 12;
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void loop() {
aufgabe1();
aufgabe2();
}
void aufgabe1()
{
uint32_t jetzt = millis();
static uint32_t vorhin;
const uint32_t intervall = 111;
if (jetzt - vorhin >= intervall)
{
vorhin = jetzt;
digitalWrite(ledPin1, !digitalRead(ledPin1));
}
}
void aufgabe2()
{
uint32_t jetzt = millis();
static uint32_t vorhin;
const uint32_t intervall = 300;
if (jetzt - vorhin >= intervall)
{
vorhin = jetzt;
digitalWrite(ledPin2, !digitalRead(ledPin2));
}
}
