FTDuino Interrupt
Forumsregeln
Bitte beachte die Forumsregeln!
Bitte beachte die Forumsregeln!
FTDuino Interrupt
Hallo,
hat jemand Erfahrung wie man einen Eingang als Interrupt benutzt kann? Welcher Eingang wäre das wohl?
Dachte dabei an etwas wie:
attachInterrupt(0, TasterUnterbricht, CHANGE);
Gruß Markus
hat jemand Erfahrung wie man einen Eingang als Interrupt benutzt kann? Welcher Eingang wäre das wohl?
Dachte dabei an etwas wie:
attachInterrupt(0, TasterUnterbricht, CHANGE);
Gruß Markus
- MasterOfGizmo
- Beiträge: 2720
- Registriert: 30 Nov 2014, 07:44
Re: FTDuino Interrupt
Du möchtest also selbst den ftDuino direkt programmieren und nicht die ftDuino-Bibliothek nehmen. Ok. das geht, aber dann musst Du im Zweifelsfall die Hardware halt selbst ansteuern.
Im Anhang der Anleitung findest Du den Schaltplan des ftDuino. Dort kannst Du u.a. rauslesen, welche Pins des Atmega an welchen der Ein- und Ausgänge hängen:
Das kannst Du mit dem Schaltplan des Leonardo vergleichen
https://www.arduino.cc/en/uploads/Main/ ... tic_3b.pdf
Wenn Du das vergleichst, dann siehst Du, dass z.B. der Eingang I1 des ftDuino auf den Eingang ADC4/Port F.4 des Atmega geht. Das ist beim Leonardo (von dem der ftDuino abgeleitet ist) der Pin A3. Du musst also als Pin "A3" angeben.
Aber wie gesagt: Du hast auf diesen Weise beschlossen, die interne Hardware des ftDuino selbst anzusteuern. Wenn Du trotzdem die ftDuino-Bibliothek verwenden willst und gleichzeitig mit solchen Low-Level-Funktionen des Arduino arbeitest musst Du mit Kollisionen rechnen.
Im Anhang der Anleitung findest Du den Schaltplan des ftDuino. Dort kannst Du u.a. rauslesen, welche Pins des Atmega an welchen der Ein- und Ausgänge hängen:
Das kannst Du mit dem Schaltplan des Leonardo vergleichen
https://www.arduino.cc/en/uploads/Main/ ... tic_3b.pdf
Wenn Du das vergleichst, dann siehst Du, dass z.B. der Eingang I1 des ftDuino auf den Eingang ADC4/Port F.4 des Atmega geht. Das ist beim Leonardo (von dem der ftDuino abgeleitet ist) der Pin A3. Du musst also als Pin "A3" angeben.
Aber wie gesagt: Du hast auf diesen Weise beschlossen, die interne Hardware des ftDuino selbst anzusteuern. Wenn Du trotzdem die ftDuino-Bibliothek verwenden willst und gleichzeitig mit solchen Low-Level-Funktionen des Arduino arbeitest musst Du mit Kollisionen rechnen.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32
Re: FTDuino Interrupt
Hmm, danke erstmal dafür. Gibt es denn auch eine einfachere Lösung mit der Ftduino-Bibliothek? Möchte gerne einen Wechselblinder mit 2 Sekunden haben, den ich an und ausschalten kann. Dann befindet sich die CPU aber ständig in der delay-Schleife und der Taster kann nicht abgefragt werden.
Oder wie würdet ihr das Problem lösen?
LG Markus
Oder wie würdet ihr das Problem lösen?
LG Markus
Re: FTDuino Interrupt
Schau dir mal im ftduino-manual den Sketch "Lampenzeitschaltung" an, das ist in meinem Manual Kapitel 6.1.
Dort wird beschrieben, wie man statt delay() die Funktion millis() benutzt.
Beim delay() hängst du (wie du ja bereits erkannt hast) immer an der Stelle fest, bis die Zeit rum ist.
Mit millis() kannst du Zeitpunkte abfragen. Wenn du die in einer Variable speicherst, kannst du über die Abfrage der Differenz zwischen dem gespeicherten Zeitpunkt und dem aktuellen millis() auch schauen, ob die gewünschte Zeit rum ist.
Vorteil: diese Abfrage kann jedes mal wieder verlassen werden, danach kann man andere Dinge (Taster z.B.) abfragen und muss nur sicherstellen, dass die Abfrage halt wiederholt wird.
Dort wird beschrieben, wie man statt delay() die Funktion millis() benutzt.
Beim delay() hängst du (wie du ja bereits erkannt hast) immer an der Stelle fest, bis die Zeit rum ist.
Mit millis() kannst du Zeitpunkte abfragen. Wenn du die in einer Variable speicherst, kannst du über die Abfrage der Differenz zwischen dem gespeicherten Zeitpunkt und dem aktuellen millis() auch schauen, ob die gewünschte Zeit rum ist.
Vorteil: diese Abfrage kann jedes mal wieder verlassen werden, danach kann man andere Dinge (Taster z.B.) abfragen und muss nur sicherstellen, dass die Abfrage halt wiederholt wird.
- PHabermehl
- Beiträge: 2434
- Registriert: 20 Dez 2014, 22:59
- Wohnort: Bad Hersfeld
Re: FTDuino Interrupt
Hallo Gauron,
"irgendwo" musst Du die Zeit ja ohnehin abgammeln, oder?
Ich würde einen timer benutzen. Der soll alle zwei Sekunden auslösen und eine Funktion aufrufen.
In der Funktion invertierst Du den Status des Lampenausgangs.
Was Dein Programm dann in der Zwischenzeit macht, ist egal. Also warten, Dinge tun, Eingang abfragen...
Zum zum Abschalten des Blinkers stoppst Du den Timer und setzt halt den Ausgang auf "aus", zum Einschalten aktivierst Du den Timer halt wieder.
Gruß
Peter
"irgendwo" musst Du die Zeit ja ohnehin abgammeln, oder?
Ich würde einen timer benutzen. Der soll alle zwei Sekunden auslösen und eine Funktion aufrufen.
In der Funktion invertierst Du den Status des Lampenausgangs.
Was Dein Programm dann in der Zwischenzeit macht, ist egal. Also warten, Dinge tun, Eingang abfragen...
Zum zum Abschalten des Blinkers stoppst Du den Timer und setzt halt den Ausgang auf "aus", zum Einschalten aktivierst Du den Timer halt wieder.
Gruß
Peter
- PHabermehl
- Beiträge: 2434
- Registriert: 20 Dez 2014, 22:59
- Wohnort: Bad Hersfeld
Re: FTDuino Interrupt
Hallo nochmal,
zufällig findet sich das Beispiel einer blinkenden Lampe auch in der Doku zur Arduino timer library:
https://github.com/contrem/arduino-timer#examples
Der main loop besteht nur aus dem Hochzählen des Timers:
Wenn Du vor oder hinter dem "timer.tick();" Deinen Taster abfragst, kannst Du ja den Timer dann entsprechend stoppen und starten.
Du könntest sogar mega-fancy sein und ZWEI Timer verwenden.
Einer ruft eine Funktion "Taster abfragen" z.B. im 100ms-Takt auf.
In der Funktion "Taster abfragen" wird dann der Zustand Deines Tasters abgefragt und der 2. Timer für die Blinkfunktion aktiviert bzw. deaktiviert.
Gruß
Peter
zufällig findet sich das Beispiel einer blinkenden Lampe auch in der Doku zur Arduino timer library:
https://github.com/contrem/arduino-timer#examples
Der main loop besteht nur aus dem Hochzählen des Timers:
Code: Alles auswählen
void loop() {
timer.tick(); // tick the timer
}
Du könntest sogar mega-fancy sein und ZWEI Timer verwenden.
Einer ruft eine Funktion "Taster abfragen" z.B. im 100ms-Takt auf.
In der Funktion "Taster abfragen" wird dann der Zustand Deines Tasters abgefragt und der 2. Timer für die Blinkfunktion aktiviert bzw. deaktiviert.
Gruß
Peter
Re: FTDuino Interrupt
Ich habe das mal in den Bereich Community-Projekte verschoben, da es hier ja um den ftDuino geht.