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

Dependencies:   mbed

Inhalt HIM0Board

MyLedBus Aufgabe und Beschreibung

Revision:
0:482d523e2122
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Dec 01 07:30:18 2015 +0000
@@ -0,0 +1,71 @@
+#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);
+    }
+}