Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
5_Interrupt_timer_timeout_ticker
Wiki-Seite
Gehe auf die Lehrerbox/PE/TINF und kopiere den Inhalt der Datei program-wiki.txt
auf IHRE EIGENE Wiki-Seite und ändere bzw. erweitere die entsprechenden Programme bzw. Textteile.
Diese Programme wurden im Mbed-Simulator geschrieben und getestet.
Lektion: polling
Programmbeschreibung:
Änderungen:
Datum:
1_polling.cpp
/* polling wiki mbed */ #include "mbed.h" BusOut leds(D2,D3,D6,D9,D11,D12,A6,D13); DigitalIn button1(A1); DigitalIn button2(A2); int zeit=50; void polling1(); int main() { while(1) { polling1(); } } void polling1() //licht bleibt länger an nach jedem Tastendruck. { leds=!leds; wait_ms(zeit); if(button1==1) { zeit=500; } if(button1==1) { zeit+=50; } if(button2==1) { zeit-=50; //bei minus fehler } }
Lektion: interrupt
Programmbeschreibung:
Änderungen:
Datum:
2_interrupt.cpp
/* interrupt */ #include "mbed.h" InterruptIn button1(A1); BusOut leds(D2,D3,D6,D9,D11,D12,A6,D13); DigitalOut led(D2); DigitalOut heartbeat(D3); void toggle() { //darf keine wait benutzt werden led = !led; } int main() { button1.rise(&toggle); // call toggle function on the rising edge in OS2 //button.rise(callback(&toggle)); // callback in OS5 while(1) { // wait around, interrupts will interrupt this! heartbeat = !heartbeat; wait(0.25); } }
Lektion: ticker
Programmbeschreibung:
Änderungen:
Datum:
3_ticker.cpp
/* 1###ticker ___ https://os.mbed.com/docs/mbed-os/v5.14/apis/ticker.html */ #include "mbed.h" BusOut leds(D2,D3,D6,D9,D11,D12,A6,D13); DigitalIn button1(A1); DigitalIn button2(A2); Ticker flipper; void flip(); int main() { leds=1; flipper.attach(&flip, 2.0); //the address of the function to be attached (flip) and the interval (2 seconds) while(1) { leds=!leds; wait_ms(200); } } void flip() { leds=!leds; }
Lektion: timeout
Programmbeschreibung:
Änderungen:
Datum:
4_timeout.cpp
#include "mbed.h" Timeout flipper; DigitalOut led1(D2); DigitalOut led2(D3); void flip(); int main() { led2=1; flipper.attach(&flip,2.0); //timeout nach 2 sekunden geht lampe aus. while(1) { led1=!led1; wait_ms(200); } } void flip() { led2=!led2; }
Lektion: timer
Programmbeschreibung:
Änderungen:
Datum:
5_timer.cpp
#include "mbed.h" Timer t; int main() { t.start(); printf("Hello World!\n"); t.stop(); printf("The time taken was %f seconds\n", t.read()); } /* #include "mbed.h" Timer t; int main() { while(1) { t.start(); printf("Hello World!\n"); t.stop(); printf("The time taken was %f seconds\n", t.read()); t.reset(); } } */
Lektion: Interrupt_grundlegendbsp
Programmbeschreibung:
Änderungen:
Datum:
6_Interrupt_grundlegendbsp.cpp
/* //alle 20 blauen pins interrupt fähig. //D0 bis D6, D9 bis D13, A0 bis A7) Ticker: LED1 will blink every second InterruptIn: LED2 can be toggled through BUTTON1 Timeout: LED3 will toggle after 2.5 seconds BusOut myleds(D0,D3,D6,D9,D11,D12,A1,A5); */ #include "mbed.h" InterruptIn button1(A0); //A0 oder A3 Ticker t1; Timeout t2; DigitalOut led1(D0); DigitalOut led2(D3); DigitalOut led3(D6); DigitalOut ledx(A5); void blink_led1(); void toggle_led2(); void turn_led3_on(); int main() { button1.rise(&toggle_led2); //interrupt t1.attach(callback(&blink_led1),1.0f); //ticker t2.attach(callback(&turn_led3_on),2.5f); //timeout while(1) { ledx = !ledx; wait(4); } } void turn_led3_on() { led3=!led3; } void blink_led1() { led1=!led1; } void toggle_led2() { led2=!led2; }
Lektion: timer_interrupt_timeout_ticker_beispiel.
Programmbeschreibung:
Änderungen:
Datum:
7_timer_interrupt_timeout_ticker_beispiel.cpp
/* //(Beispielhaft)Beschreiben Sie obiges Programm möglichst genau. //led1 wird leuchten jede sekunde - ausgelöst durch den ticker //led2 wird leuchten sobald die vorgegeben zeit, hier 2.5 sekunden abgelaufen ist. //led3 wird leuchten wenn button1 aktiviert wird //timer misst die Zeit zwischen start und stop. Als Timer oder auch Counter bezeichnet man bei Mikrocontrollern einen auf dem Chip integriertes Funktionsmodul, welcher beim Zählen von Ereignissen, Messen von Zeitabständen und periodischen Ausführen von Programmteilen eine wichtige Hilfe darstellt. Möchte man zum Beispiel eine Uhr realisieren, dann konfiguriert man den Timer so, dass z.B. exakt 100 mal pro Sekunde ein Interrupt ausgelöst wird. In der Interruptroutine kann man dann eine Variable hochzählen und nach 100 Interrupts die Zeitanzeige aktualisieren. timer funktioniert bis 30 minuten. Ticker: LED1 will blink every second InterruptIn: LED2 can be toggled through BUTTON1 Timeout: LED3 will toggle after 2.5 seconds */ #include "mbed.h" //BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5); DigitalOut led1(D0); DigitalOut led2(D3); DigitalOut led3(A1); DigitalOut led4(A5); Ticker t1; Timeout t2; Timer t3; InterruptIn button1(A0); void ticker_t1(); void timeout_t2(); void isr(); int main() { t3.start(); t1.attach(callback(&ticker_t1),1.0f); t2.attach(callback(&timeout_t2),2.5f); button1.fall(callback(&isr)); t3.stop(); printf("Zeit: %f\n",t3.read()); t3.reset(); while(1) { } } void isr() { led2=!led2; } void timeout_t2() { led3=!led3; } void ticker_t1() { led1=!led1; }
Lektion: btncounter_Interrupt_and_timer
Programmbeschreibung:
Änderungen:
Datum:
A6_Lekt6_btncounter_Interrupt_and_timer.cpp
/* Schreiben Sie ein C++ Programm, das die Anzahl wie oft eine Taste gedrückt (steigende Flanke) wurde zählt und die LED1 leuchten soll wenn die Taste 10 Mal gedrückt wurde. */ #include "mbed.h" int i=0; DigitalOut led1(D0); InterruptIn button1(A0); void isr(); int main() { button1.rise(&isr); while(1) { printf("%d\n",i);//check if(i>=10) { led1=1; } } } void isr() { i++; }