Forum: Mikrocontroller und Digitale Elektronik Blink Signal einer LED mit Ardunio (PWM) auslesen/auswerten


von Ramon (Gast)


Lesenswert?

Hallo,
ich benötige für meine Projektarbeit ein Programm womit man ein PWM 
Signal bzw. verschiedene Blinktakte auswerten kann.
Es handelt sich um 2 LED's.
Es gibt 3 verschiedene Zustände die ausgewertet werden sollen:
1. LED1 aus / LED2 blinkt alle 5 sekunden,
2. LED1 blinkt / LED2 leuchtet dauerhaft,
der oder die letzten Zustände bestehen aus verschiedenen 
Sequenzen(blinken):
3.1. LED2, LED1, LED1, LED1;
3.2. LED2, LED1, LED2, LED1;
3.3. LED2, LED2, LED1, LED1;

Als Anfänger in Ardunio fällt es mir leider schwer alles direkt zu 
verstehen :( . Was ich bisher gefunden habe ist:

The pulseIn Function
byte PWM_PIN = 3;

int pwm_value;

void setup() {
  pinMode(PWM_PIN, INPUT);
  Serial.begin(115200);
}

void loop() {
  pwm_value = pulseIn(PWM_PIN, HIGH);
  Serial.println(pwm_value);
}

Bitte um Hilfe :)
MFG

von Stefan F. (Gast)


Lesenswert?

Für ein Anfangsprojekt würde ich Dir empfehlen, mit etwas einfacherem 
anzufangen.

Denn wenn du das sauber umsetzen willst, musst du dich mit vielen 
schwierigen Themen gleichzeitig auseinander setzen. Zum Beispiel 
Multitasking, was diese pulseIn() Funktion leider nicht kann.

Falls du es unbedingt machen willst, würde ich Dir empfehlen den Zustand 
der LED's in (z.B.) 100ms Intervallen in einem Timer-Interrupt 
abzufragen.


> 3.1. LED2, LED1, LED1, LED1;

Das musst du genauer beschreiben. bedeutet es a: Sofort nachdem LED1 aus 
geht, geht LED2 für die dreifache zeit an:
1
       _
2
LED1 _| |_____________
3
         ______
4
LED2 ___|      |______

oder b: Nachdem LED1 aus gegangen ist, geht LED2 etwas später für die 
dreifache zeit an:
1
       _
2
LED1 _| |______________
3
           ______
4
LED2 _____|      |______

oder c: Nachdem LED1 einmal kurz an war, geht LED2 dreimal kurz an:
1
       _
2
LED1 _| |________________
3
           _   _   _
4
LED2 _____| |_| |_| |____


Für die beiden ersten Fälle könntest du im Interrupt-Handler messen, wie 
lange die LEDs leuchten und diese beiden Zahlen miteinander vergleichen.

Für den dritten Fall müsstest du hingegen die Anzahl der Impulse zählen.

von Ramon (Gast)


Lesenswert?

Danke Stefanus für die super schnelle Antwort :)

Bei dem dritten Fall handelt es sich um Blink Sequenzen also es wird wie 
in c 3 mal blinken nachdem LED1 einmal kurz an war

Hast du / Gibt es für die Timer-Interrupts ein gutes Beispiel ? Über 
Interrupts weiß ich leider nicht viel.

von STK500-Besitzer (Gast)


Lesenswert?

Stefanus F. schrieb:
> Falls du es unbedingt machen willst, würde ich Dir empfehlen den Zustand
> der LED's in (z.B.) 100ms Intervallen in einem Timer-Interrupt
> abzufragen.

Wenn nichts weiter zu tun ist, kann er das das Interval auch per Delay 
festlegen.
Das Problem ist doch eher die ungenaue Beschreibung.
Stattdessen wird lieber auf der "Ich kleiner dummer Anfänger"-Schiene 
rumgejammert.

Wie ist das Zeitraster?
Sind die Perioden alle 5 Sekunden lang?
Bzw. mit welcher Periodendauer wird sonst noch geblinkt?
Die Periodendauer lässt sich einfacher als die Frequenz bestimmen.

von Stefan F. (Gast)


Lesenswert?

Ramon schrieb:
> Hast du / Gibt es für die Timer-Interrupts ein gutes Beispiel ? Über
> Interrupts weiß ich leider nicht viel.

https://playground.arduino.cc/Deutsch/HalloWeltMitInterruptUndTimerlibrary

von Stefan F. (Gast)


Lesenswert?

Ramon schrieb:
> Hast du / Gibt es für die Timer-Interrupts ein gutes Beispiel ? Über
> Interrupts weiß ich leider nicht viel.

https://playground.arduino.cc/Deutsch/HalloWeltMitInterruptUndTimerlibrary

STK500-Besitzer schrieb:
> Das Problem ist doch eher die ungenaue Beschreibung.

> Das Problem ist doch eher die ungenaue Beschreibung.

Allerdings. Wenn man die Aufgabe präzise beschrieben hat, ist die 
Umsetzung einfach. Ansonsten artet es in ein mühsames Trial & Error aus.

Also: Zeichne mal zuerst Diagramme mit konkreten Zeitangaben, welche die 
Blinkmuster exakt beschreiben. Danach kann man daraus ableiten, an 
welchen Merkmalen die unterschiedlichen Muster möglichst einfach aber 
eindeutig erkannt werden können.

Immer schön daran denken: Unsere Mikrocontroller können gut messen und 
rechnen - aber sie sind nicht intelligent.

von Manfred (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> Wenn nichts weiter zu tun ist, kann er das das Interval auch per Delay 
festlegen.

Dealy wurde erfunden, um Anfänger in die Irre zu führen. Manchmal 
braucht man es, aber generell ist es besser, mit millis() zu rechnen.

Der Beschreibung nach hat er zumindest eine serielle Ausgabe zu 
bedienen, also wären blockierende Abfragen mit delay nicht meine erste 
Wahl.

> Das Problem ist doch eher die ungenaue Beschreibung.

Stimmt.

> Stattdessen wird lieber auf der "Ich kleiner dummer Anfänger"-Schiene 
rumgejammert.

Stimmt ebenfalls - es fehlt die Motivation, erstmal Grundlagen 
durchzuarbeiten.

Bei nur zwei LEDs und 5 Sekunden würde ich vermutlich in der loop() 
ständig zwei Zeitwerte vergleichen und die Dinger pollen, ohne 
Interrupt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.