BlinkyOOP mit BusOut auf oberen 8 Leds mit Pins bzw. Pin-Array (Resetproblem!!!)

Dependencies:   mbed

Inhalt HIM0Board

MyLedBus Aufgabe und Beschreibung

main.cpp

Committer:
fpucher
Date:
2015-12-01
Revision:
0:482d523e2122

File content as of revision 0:482d523e2122:

#include "mbed.h"
#include <inttypes.h>
// https://developer.mbed.org/handbook/DigitalOut
// https://developer.mbed.org/handbook/BusOut
class MyLed 
{
private:
    DigitalOut *led1;   // Adresse des eigentlichen Zieles - auf eine Klasse DigitalOut - erzeugen
    BusOut *led_bus;
    MyLed();            // Standardkonstruktor, auf den von außen nicht zugegriffen werden kann
    
public:
// Parametrisierten Konstruktor - selber Name wie Klasse - mit einem Pin Namen als Parameter
    MyLed(PinName ld1)
    {
        // erzeugt ein neues DigitalOut Objekt led1 mit Pin ld1 über Adresse von
        // led1 = &DigitalOut(ld1);
        led1 = new DigitalOut(ld1);
    };
    MyLed(PinName p1, PinName p2, PinName p3, PinName p4, PinName p5, PinName p6, PinName p7, PinName p8)
    {
        led_bus = new BusOut(p1, p2, p3, p4, p5, p6, p7, p8);
        led_bus->write(0x0);        // led_bus initialisieren
    }
    MyLed(PinName ld_bus[])         // Konstruktor mit Pin-Array
    {
        led_bus = new BusOut(ld_bus);
        led_bus->write(0x0);        // led_bus initialisieren
    }
/*
    MyLed(PinName ld_bus[]) : led_bus(&BusOut(ld_bus)) // mit Initialisierungsliste
    {
        led_bus->write(0x0);        // led_bus initialisieren
    }
*/    
    // Methoden oder Memberfunktionen
    void LedOn(uint8_t wert)
    {
        led_bus->write(wert);
    }
    void LedOn()
    {
        // Aufruf der Methode write() in der Klasse DigitalOut --> über den Zeiger led1
        //(*led1).write(1);
        led1->write(1);
    }
    void LedOff()
    {
        //(*led1).write(0);
        led1->write(0);
    }
};

int main() {
    MyLed myLed1(LED1);
    PinName pinarr[16] = {P1_13,P1_12,P1_7,P1_6,P1_4, P1_3, P1_1, P1_0};    // Array mit Pins setzen
// erzeugen einer Variablen myLedBus der Klasse MyLed mit 8 Pins als Parameter
    MyLed myLedBus(P1_13, P1_12, P1_7, P1_6, P1_4, P1_3, P1_1, P1_0);       // ODER ....
// erzeugen einer Variablen myLedBus der Klasse MyLed mit Pin-Array als Parameter
    //MyLed myLedBus(pinarr);    // Problem mit Reset!!!
    uint8_t zaehler = 0;

    while(1) {
        myLedBus.LedOn(zaehler++);      // Hochzählen auf oberen 8 Leds
        myLed1.LedOn(); 
        wait(0.2);
        myLedBus.LedOn(0x0);
        myLed1.LedOff();
        wait(0.2);
    }
}