Robert Buch / Robert Buch

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++;
}

All wikipages