FTDuino Interrupt

Community-Firmware (cfw), Selbstbaucontroller (TX-Pi, ftduino, usw.), usw.
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
Gauron
Beiträge: 2
Registriert: 15 Nov 2020, 11:22

FTDuino Interrupt

Beitrag von Gauron » 15 Nov 2020, 11:49

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

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: FTDuino Interrupt

Beitrag von MasterOfGizmo » 15 Nov 2020, 13:42

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:

Bild

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

Gauron
Beiträge: 2
Registriert: 15 Nov 2020, 11:22

Re: FTDuino Interrupt

Beitrag von Gauron » 16 Nov 2020, 10:44

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

Benutzeravatar
The Rob
Moderator
Beiträge: 968
Registriert: 03 Dez 2015, 12:54

Re: FTDuino Interrupt

Beitrag von The Rob » 16 Nov 2020, 11:01

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.

Benutzeravatar
PHabermehl
Beiträge: 2434
Registriert: 20 Dez 2014, 22:59
Wohnort: Bad Hersfeld

Re: FTDuino Interrupt

Beitrag von PHabermehl » 16 Nov 2020, 12:46

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
https://www.MINTronics.de -- der ftDuino & TX-Pi Shop!

viele Grüße
Peter

Benutzeravatar
PHabermehl
Beiträge: 2434
Registriert: 20 Dez 2014, 22:59
Wohnort: Bad Hersfeld

Re: FTDuino Interrupt

Beitrag von PHabermehl » 16 Nov 2020, 15:14

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:

Code: Alles auswählen

void loop() {
  timer.tick(); // tick the timer
}
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
https://www.MINTronics.de -- der ftDuino & TX-Pi Shop!

viele Grüße
Peter

Benutzeravatar
The Rob
Moderator
Beiträge: 968
Registriert: 03 Dez 2015, 12:54

Re: FTDuino Interrupt

Beitrag von The Rob » 16 Nov 2020, 15:36

Ich habe das mal in den Bereich Community-Projekte verschoben, da es hier ja um den ftDuino geht.

Antworten