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
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.
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.