Robert Buch / Robert Buch

1_Lekt_Digitalio

Table of Contents

  1. Lekt_1: Digital_io

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.

Lekt_1: Digital_io

Lektion: DreiLed

Programmbeschreibung:
Änderungen:
Datum:

A1_Lekt1_DreiLed_Digitalio.cpp

/*
A1_[DreiLed]
Schreibe ein Programm in mbed C++, das die blaue LED1 mit 100Hz blinken lässt
zusäztlich die LED2 mit 50Hz blinken lässt
LED3 dann leuchtet, wenn LED1 und LED2 eingeschaltet sind.
*/

#include "mbed.h"

DigitalOut led1(D0);
DigitalOut led2(A1);

void a1_dreiled();


int main()
{

    while(1) {
        a2_ledfunc();
    }

}


void a1_dreiled()
{
    led1=!led1;
    wait(0.50);  //besser erkennbar

    led2=!led2;
    wait(0.25);  //besser erkennbar

    if(led1==1 &&led2==1) {
        led3=1;
    } else {
        led3=0;
    }
}

Lektion: LedFunc

Programmbeschreibung:
Änderungen:
Datum:

A2_Lekt1_LedFunc_Digitalio.cpp

/*
2. [LedFunc] Schreibe folgende Funktion:

    allLedsOn(), die alle 4 blauen LEDs einschaltet
    allLedsOff(); die alle 4 blauen LEDs ausschaltet
    changeLed1(), die die Led LED1 toggelt (wenn sie ein (1) ist dann aus (0) und umgekehrt)
    changeLed(led), mit dem Parameter der Led, sodass verschiedene Leds getoggelt werden können 
*/

#include "mbed.h"

BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);

void all_ledson();
void all_ledsoff();
void changeled1();
void changeled();

int main()
{
    while(1)
    {
        all_ledson();
        wait_ms(500);
        all_ledsoff();
        wait_ms(500);
    }
}


void all_ledson()
{
    leds=0xff;
    changeled();
}

void all_ledsoff()
{
    leds=0x00;
    changeled();
}

void changeled() 
{
    int mask=0x01; //einfach gewünschte led einstellen.
    int value=mask;
    leds=leds^value;
}


Lektion: SelLed

Programmbeschreibung:
Änderungen:
Datum:

A3_Lekt1_SelLed_Digitalio.cpp

/*
3. [SelLed] Definiere eine 4-Bit Konstante und gebe den Wert auf die vier 
blauen Leds aus (nur diejenigen Leds werden eingeschaltet, die im Wert gesetzt sind).

    3a. schreibe obigen Code in die Funktion selectivLedsOn(wert). 
    
*/

#include "mbed.h"

BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);

int selectivLedsOn(int wert); 

int main()
{
    int value=0;
    while(1)
    {
        value=selectivLedsOn(value);
        leds=leds|value;
        wait(1);

    }
}

int selectivLedsOn(int wert)
{
    wert=0b1101;
    return wert;    
}


Lektion: LaufDig

Programmbeschreibung:
Änderungen:
Datum:

A4_Lekt1_LaufDig_Digitalio.cpp

/*
4. [LaufDig] Erstelle mit Hilfe der DigitalOut ein Lauflicht mit den integrierten vier blauen LEDs. 
*/

#include "mbed.h"

//BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);
BusOut leds(D0,D3,D6,D9);

void laufdig(); 

int main()
{ 
    while(1)
    {
        laufdig();
    }
}

void laufdig()
{
   leds=1;
   wait_ms(200);
   for(int i=0;i<5;i++)
   {
    leds=leds<<1; 
    wait_ms(200);
    } 
}

Lektion: Knightrider

Programmbeschreibung:
Änderungen:
Datum:

A5_Lekt1_Knightrider_Digitalio.cpp


/*
5. [Knightrider] Erstelle mit Hilfe der DigitalOut ein Programm zur Erzeugung 
des LED-Sweep-Effekt „Knightrider“ mit den integrierten vier blauen LEDs.
*/

#include "mbed.h"

BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);

void knightrider(); 

int main()
{ 
    while(1)
    {
        knightrider();
    }
}

void knightrider()
{
   leds=1;
   wait_ms(300);
   for(int i=0;i<3;i++) //4 lichter einschalten
   {
    leds=leds<<1|1; 
    wait_ms(300);
    } 
    for(int i=0;i<8;i++) //4 lichter verschieben
    {
        leds=leds<<1;
        wait_ms(300);    
    }
    
    //retour
    
    leds=128;
    wait_ms(300);
    for(int i=0;i<3;i++) //4 lichter einschalten
    {
    leds=leds>>1|128; 
    wait_ms(300);
    } 
    for(int i=0;i<8;i++) //4 lichter verschieben
    {
        leds=leds>>1;
        wait_ms(300);    
    }
}

Lektion: BtnLed1

Programmbeschreibung:
Änderungen:
Datum:

A6_Lekt1_BtnLed1_Digitalio.cpp

/*
6. [BtnLed1] Schreibe ein Programm in mbed C++, das die LED1 mit 100Hz blinken lässt. 
Nach drücken des Joysticks (BUTTON1 im Simulator) soll die LED1 mit 50Hz blinken 
und nach einem weiteren drücken wieder mit 100Hz.
*/

#include "mbed.h"

BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);
//DigitalIn button1(A0);
InterruptIn button1(A0);

int checkbutton=0;
void btnled1();
void isr();
int main()
{
    
    button1.rise(&isr);
    
    while(1)
    {
        if(checkbutton==1)
        {
            leds=!leds;
            wait_ms(150);
            
        }
        else if(checkbutton==2)
        {
            btnled1();
            checkbutton=0;
        }
        else
        {
            btnled1();    
        }
    }    
}


void isr()
{
     checkbutton++;    
}

void btnled1()
{
    leds=!leds;
    wait_ms(350); //besser erkennbar
}

Lektion: BtnLauflicht

Programmbeschreibung:
Änderungen:
Datum:

A7_Lekt1_BtnLauflicht_Digitalio.cpp

/*
7. [BtnLauflicht] Schreibe ein Lauflicht für die vier blauen Leds und schalte durch drücken 
des Joysticks (BUTTON1 im Simulator) die Laufrichtung um.
*/

#include "mbed.h"

BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);
InterruptIn button1(A0);

void btnlauflichtR();
void btnlauflichtL();
void isr();
int checkbutton=1;
int main()
{
    button1.rise(&isr);
    
    while(1)
    {
        if(checkbutton%2==1)
        {
            btnlauflichtR();
            printf("%d\n",checkbutton);
        }
        else if(checkbutton%2==0)
        {
           btnlauflichtL();
           printf("%d\n",checkbutton); 
        }
    }
}


void isr()
{
    checkbutton++;    
}

void btnlauflichtR()
{
    if(leds==0x00)
    {
    leds=1;
    wait_ms(300);
    }
    for(int i=0; i<8; i++)
    {
    leds=leds<<1;   
    wait_ms(300);
    }
}

void btnlauflichtL()
{
    leds=128;
    wait_ms(300);
    for(int i=0; i<8; i++)
    {
    leds=leds>>1;   
    wait_ms(300);
    }
}

Lektion: BtnCnt

Programmbeschreibung:
Änderungen:
Datum:

A8_Lekt1_BtnCnt_Digitalio.cpp

/*
8. [BtnCnt] Zähle wie oft der Joystick (BUTTON1 im Simulator) gedrückt wurde 
und schalte für je 5 Mal drücken die nächste blaue Led ein.
*/

#include "mbed.h"

BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);
InterruptIn button1(A0);

void btncnt();
int checkbutton=1; //für modulo unbedingt auf 1 stellen

int main()
{
    button1.rise(&btncnt);
    
    while(1)
    {
        printf("Test: %d\n",checkbutton);
        
        if(checkbutton%6==0)
        {
            printf("Test2: %d\n",checkbutton);
            leds=leds<<1|1;
            checkbutton=1;
            wait_ms(500); //taste etwas entprellen
        }  
    }
}

void btncnt()
{
   checkbutton++; 
}

Lektion: Laufbus

Programmbeschreibung:
Änderungen:
Datum:

A9_Lekt1_Laufbus_Digitalio.cpp

/*
9. [LaufBus] Erstelle mit Hilfe der BusOut ein Lauflicht mit den 
integrierten vier blauen LEDs.
*/

#include "mbed.h"

BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);

int main()
{
    while(1)
    {
        leds=0x01;
        wait_ms(500);
        for(int i=1;i<=8;i++)
        {
            leds=leds<<1;
            wait_ms(500);
        }
    }
}

Lektion: BusOut

Programmbeschreibung:
Änderungen:
Datum:

B1_Lekt1_BusOut_Digitalio.cpp

/*
https://os.mbed.com/users/fpucher/code/TINF/wiki/BusOut-Programm
    1.Ändern Sie das Programm, sodass der Joystick-Zustand als Ausgangsbasis für 
    einen Count-Down im Sekundentakt dient und am Ende alle Leds wieder verloschen sind.
*/

#include "mbed.h"

BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);

AnalogIn x(A3);
AnalogIn y(A4);
DigitalIn sw(D10,PullUp);

void countdown();
int main()
{
    leds=0xff;
    
    while(1)
    {
        //printf("x: %f\n",x.read());
        //printf("y: %f\n",y.read());
        //printf("sw: %d\n",sw.read());
        /*
        if(x.read()<=0.1) //rechts
        {
            
        }
        if(x.read()>=0.9) //links
        {
            
        }
        if(y.read()<=0.1) //up
        {
            
        }
        if(sw.read()==0)
        {
            printf("button fired\n");
        }  
        */    
        if(y.read()>=0.9) //down
        {
          countdown();
        }  
    }
}

void countdown()
{
    for(int i=1;i<=8;i++)
    {
    leds=leds<<1;
    wait_ms(750);  
    }
}

Lektion: BusOut2

Programmbeschreibung:
Änderungen:
Datum:

B2_Lekt1_BusOut_Digitalio.cpp

/*
https://os.mbed.com/users/fpucher/code/TINF/wiki/BusOut-Programm
    2.Kodieren Sie den Joystick-Wert auf die jeweilige Pinnummer und geben diese 
    auf die Leds binär aus (up = p15, alle Leds leuchten, usw. p16 wird zu 0001). 
*/
#include "mbed.h"

BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);

AnalogIn x(A3);
AnalogIn y(A4);
DigitalIn sw(D10,PullUp);

int main()
{
    
    while(1)
    {
        if(sw.read()==0)
        {
            leds=0x0A;
        }  
        if(x.read()<=0.1) //rechts
        {
            leds=0x03;
        }
        if(x.read()>=0.9) //links
        {
            leds=0x30;
        }
        if(y.read()<=0.1) //up
        {
            leds=0x04;
        }
           
        if(y.read()>=0.9) //down
        {
            leds=0x40;
        }  
    }    
}

Lektion: Bus4Leds

Programmbeschreibung:
Änderungen:
Datum:

E1_Lekt1_Bus4Leds_Digitalio.cpp

/*
1. [Bus4Leds] Definiere eine 4-Bit Konstante und gebe den Wert auf 
die vier blauen Leds aus - die nur diejenigen Leds einschaltet, 
die im Wert gesetzt sind. Schreibe die Funktion selectivLedsOn(wert) 
und teste diese in der main() Funktion.
???
*/
#include "mbed.h"

BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);
//const int lights 0b0000; 

int selectivLedsOn(int wert);
int main()
{ 
    while(1)
    {
        int value=selectivLedsOn(value);
        
        leds=value;
        
    }    
}

int selectivLedsOn(int wert)
{
     wert=0x22;
     return wert;   
}

Lektion: JoyLedMap

Programmbeschreibung:
Änderungen:
Datum:

E2_Lekt1_JoyLedMap_Digitalio.cpp

/*
https://os.mbed.com/users/fpucher/code/TINF/wiki/Digital-IO-Erweitert
2. [JoyLedMap] Gebe für die jeweiligen Joystick Schalter die 
entsprechende blaue Led aus: right = LED1, left=LED2, up=LED3, down =LED4
*/
#include "mbed.h"

BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);

AnalogIn x(A3);
AnalogIn y(A4);
DigitalIn sw(D10,PullUp);

int main()
{ 
    while(1)
    {
        if(sw.read()==0)
        {
            leds=0x0f;
        }  
        if(x.read()<=0.1) //rechts
        {
            leds=0x01;
        }
        if(x.read()>=0.9) //links
        {
            leds=0x02;
        }
        if(y.read()<=0.1) //up
        {
            leds=0x04;
        }
           
        if(y.read()>=0.9) //down
        {
            leds=0x08;
        }  
    }    
}

Lektion: TwoLedFunc

Programmbeschreibung:
Änderungen:
Datum:

E3_Lekt1_TwoLedFunc_Digitalio.cpp

/*
3. [TwoLedFunc] Erzeuge die in main() aufgerufenen Funktionen für zwei Leds:

main() {
   ledOn();       // beide Leds einschalten
   ledOff();      // beide Leds ausschalten
   ledX();        // beide Leds gegengleich schalten
   printStatus(); // Anzeigen ob Leds ein oder aus
}
*/

#include "mbed.h"

BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);
DigitalOut led1(D0);
DigitalOut led2(D3);

void ledon();
void ledoff();
void ledx();
void printstatus();

int main()
{ 
    while(1)
    {
        ledon(); 
        wait_ms(500);
        ledoff();
        wait_ms(500);
        ledx();
        printstatus();
        
    }    
}

void ledon()
{
    leds=0x03;
}

void ledoff()
{
    leds=0x00;
}

void ledx()
{
    leds=0x01;
    wait_ms(750);
    leds=0x02;
    wait_ms(750);
}

void printstatus()
{
    leds=0x01; //test
    if(leds==0x01) 
    {
        printf("Led1 leuchtet\n");
    }   
    else
    {
        printf("led leuchtet nicht\n");
    }
}

Lektion: FourLeds

Programmbeschreibung:
Änderungen:
Datum:

E4_Lekt1_FourLeds_Digitalio.cpp

/*
4. [FourLeds] Erzeugefür vier Leds und folgenden Funktionen:

main() {
   lauflicht();       
*********************************
    D1  D2  D3  D4
    -   -   -   -       Ein Durchgang dauert 2 sec
    X   -   -   -
    -   X   -   - 
    -   -   X   -
    -   -   -   X
    -   -   -   -       X=ON  - = off
*********************************
   lauflichtbalken();
*********************************
    D1  D2  D3  D4
    -   -   -   -       Ein Durchgang dauert 2 sec
    X   -   -   -
    X   X   -   - 
    X   X   X   -
    X   X   X   X
    -   -   -   -
    X   X   X   X         X=ON  - = off
**********************************
*/

#include "mbed.h"

//BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);
BusOut leds(D0,D3,D6,D9);

void lauflicht();
void lauflichtbalken();
int main()
{ 
    while(1)
    { 
        //lauflicht();
        lauflichtbalken();
    }    
}


void lauflicht()
{
    leds=0x01;
    wait_ms(400);
    for(int i=1;i<5;i++)
    {
        leds=leds<<1;
        wait_ms(400);    
    }
}

void lauflichtbalken()
{
    for(int i=1;i<5;i++)
    {
        leds=leds<<1|1;   
        wait_ms(333);
    } 
    leds=0x00;
    wait_ms(333);
    leds=0xff;
    wait_ms(333); 
    leds=0x00;
    wait_ms(333);
}  

Lektion: HexLeds

Programmbeschreibung:
Änderungen:
Datum:

E5_Lekt1_HexLeds_Digitalio.cpp

/*
5. [HexLeds] Erzeuge das folgende HexLeds Programm für vier Leds und folgenden Funktionen:

main() {
   hexleds.eingabe()     // einlesen eines Integer-Wertes von der Tastatur mit scanf("%d", &ein);
   hexleds.ausgabe()     // ausgeben des Integer-Wertes der von der Tastatur eingegeben wurde
   hexleds.hexOut()      // Ausgabe des Wertes in Hex-Darstellung an den 4 Leds
   hexleds.printStatus() // Anzeigen ob Leds ein oder aus
*/
#include "mbed.h"

//BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5);
BusOut leds(D0,D3,D6,D9);

int hexleds_eingabe(int eingabe);
int hexleds_ausgabe(int ausgabe);
int hexleds_hexout(int hexout);
int hexleds_printstatus(int value);

int main()
{ 
    int value=0;
    while(1)
    {
        value=hexleds_eingabe(value);
        hexleds_ausgabe(value);
        hexleds_hexout(value);
        hexleds_printstatus(value);
    }    
}


int hexleds_printstatus(int kontrolle)
{
    if(leds=kontrolle)
    {
        printf("alles leuchtet\n");
    }
    else
    {
        printf("alles falsch\n");    
    }
    return kontrolle;
}

int hexleds_hexout(int hexout)
{
    leds=hexout;
    return hexout;
}

int hexleds_ausgabe(int ausgabe)
{
    printf("Wert: %d\n",ausgabe);
    return ausgabe;
}

int hexleds_eingabe(int eingabe)
{
    eingabe=0xE; 
    return eingabe;    
}

All wikipages