Ankündigung

Einklappen
Keine Ankündigung bisher.

benötige Hilfe bei simplem Aktor-Sketch

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    benötige Hilfe bei simplem Aktor-Sketch

    Einen wunderschönen guten Morgen,

    nach einer fast 1 jährigen Pause bin ich wieder dabei mich Konnekting auseinader zu setzen. Das Schlüsselbrett, welches ich vor gut einem Jahr aufgesetzt hatte läuft indes tadellos

    Folgende Problemstellung:
    Ich muss/möchte meine Diskstation per KNX ein und ausschalten können. Dafür hab ich nen Photomos parallel zum Schalter der Taster an der Diskstaion gelötet, den ich nun gern mit meiner UUPS hier gern schalten wollen würden.

    Mein Problem ist hier jedoch der Sketch für den Arduino. Ich hatte da vor einem Jahr schon versucht einen Aktor-Sketch zu bauen, bin da aber nie zu einem funktionierendem Ergebnis gekommen.

    folgendes habe ich bereits:
    die switcher4_0.3.h:
    Code:
    #define MANUFACTURER_ID 4112
    #define DEVICE_ID 10
    #define REVISION 0
    
    #define COMOBJ_A 0
    #define COMOBJ_B 1
    #define COMOBJ_C 2
    #define COMOBJ_D 3
    
    #define PARAM_initialDelay 0
    #define PARAM_outputA_active 1
    #define PARAM_outputB_active 2
    #define PARAM_outputC_active 3
    #define PARAM_outputD_active 4
    
    KnxComObject KnxDevice::_comObjectsList[] = {
        /* Index 0 - A */ KnxComObject(KNX_DPT_1_001, 0x34),
        /* Index 1 - B */ KnxComObject(KNX_DPT_1_001, 0x34),
        /* Index 2 - C */ KnxComObject(KNX_DPT_1_001, 0x34),
        /* Index 3 - D */ KnxComObject(KNX_DPT_1_001, 0x34)
        };
    const byte KnxDevice::_numberOfComObjects = sizeof (_comObjectsList) / sizeof (KnxComObject); // do not change this code
    
    byte KonnektingDevice::_paramSizeList[] = {
        /* Index 0 - initialDelay */ PARAM_UINT8,
        /* Index 1 - outputA_active */ PARAM_UINT8,
        /* Index 2 - outputB_active */ PARAM_UINT8,
        /* Index 3 - outputC_active */ PARAM_UINT8,
        /* Index 4 - outputD_active */ PARAM_UINT8
    };
    const byte KonnektingDevice::_numberOfParams = sizeof (_paramSizeList); // do not change this code
    und soweit bin ich bis jetzt in der .ino:
    Code:
    #define PROG_LED_PIN 8
    #define PROG_BUTTON_PIN 7
    #define KNX_SERIAL Serial1 
    #define TEST_LED 4 
    
    #define OUT_A 3
    #define OUT_B 5
    #define OUT_C 6
    #define OUT_D 9
    
    #define DEBUGSERIAL Serial
    
    byte pinNummber[]   = {OUT_A,OUT_B,OUT_C,OUT_D};
    byte outputActive[]  = {0,0,0,0};
    bool lastState[]    = {0,0,0,0};
    bool currentState[] = {0,0,0,0};
    
    unsigned long blinkDelay = 2500;
    unsigned long lastmillis = millis(); 
    int laststate = false;
    
    #include <KonnektingDevice.h>
    #include <DebugUtil.h>
    #include "switcher4_0.3.h" 
    
    void knxEvents(byte index) {
        // nothing to do in this sketch
        switch (index) {
    
            case COMOBJ_A: // object index has been updated
    
                if (Knx.read(COMOBJ_A)) {
                    digitalWrite(OUT_A, HIGH);
                    Debug.println(F("Toggle Pin3: on"));
                } else {
                    digitalWrite(OUT_A, LOW);
                    Debug.println(F("Toggle Pin3: off"));
                }
                break;
    
            case COMOBJ_B: // object index has been updated
    
                if (Knx.read(COMOBJ_B)) {
                    digitalWrite(OUT_B, HIGH);
                    Debug.println(F("Toggle Pin5: on"));
                } else {
                    digitalWrite(OUT_B, LOW);
                    Debug.println(F("Toggle Pin5: off"));
                }
                break;
    
            case COMOBJ_C: // object index has been updated
    
                if (Knx.read(COMOBJ_C)) {
                    digitalWrite(OUT_C, HIGH);
                    Debug.println(F("Toggle Pin6: on"));
                } else {
                    digitalWrite(OUT_C, LOW);
                    Debug.println(F("Toggle Pin6: off"));
                }
                break;
    
            case COMOBJ_D: // object index has been updated
    
                if (Knx.read(COMOBJ_D)) {
                    digitalWrite(OUT_D, HIGH);
                    Debug.println(F("Toggle Pin9: on"));
                } else {
                    digitalWrite(OUT_D, LOW);
                    Debug.println(F("Toggle Pin9: off"));
                }
                break;
            default:
                break;
        }
    }
    
    void setup() {
    #ifdef KDEBUG
        DEBUGSERIAL.begin(9600);
        while (!DEBUGSERIAL)
        Debug.setPrintStream(&DEBUGSERIAL);
    #endif
    
        Konnekting.init(KNX_SERIAL, PROG_BUTTON_PIN, PROG_LED_PIN, MANUFACTURER_ID, DEVICE_ID, REVISION);
        if (!Konnekting.isFactorySetting()){
            int startDelay = (int) Konnekting.getUINT16Param(PARAM_initialDelay);
            if (startDelay > 0) {
    #ifdef KDEBUG  
                Debug.println(F("delay for %d ms"),startDelay);
    #endif
                delay(startDelay);
    #ifdef KDEBUG  
                Debug.println(F("ready!"));
    #endif
            }
            for (byte i= 0;i<OUTPUTS;i++){
                outputActive[i]  = (bool)Konnekting.getUINT8Param(i);  //output active?
            }
        }
    }
    
    void loop() {
    
        // Do KNX related stuff (like sending/receiving KNX telegrams)
        // This is required in every KONNEKTING aplication sketch
        Knx.task();
    
        unsigned long currentmillis = millis();
    
        /*
         * only do measurements and other sketch related stuff if not in programming mode
         * means: only when konnekting is ready for appliction
         */
        if (Konnekting.isReadyForApplication()) {
    
            if (currentmillis - lastmillis >= blinkDelay) {
    
                Debug.println(F("Actual state: %d"), laststate);
                Knx.write(1, laststate);
                laststate = !laststate;
                lastmillis = currentmillis;
    
                digitalWrite(TEST_LED, HIGH);
                Debug.println(F("DONE"));
    
            }
    
        }
    
    }
    das ist im Prinzip alles ein bisschen aus dem Demo-Sketch und meinem sehr sehr begrenztem Wissen über Programmiersprachen entstanden. Und das wird der Grund sein, warum es auch nicht geht

    Wäre jemand der sich damit auskennt so freundlich mir einen hilfreichen Hinweis zu geben? Meine unendliche Dankbarkeit wäre Ihm sicher!

    VG René

    #2
    Was geht denn genau nicht?

    Kommentar


      #3
      "Geht nicht" ist weder eine Fehlerbeschreibung noch eine Beschreibung mit der man konkret etwas anfangen kann. Was geht denn genau nicht? Was hast du soweit rausgefunden? Was hast du schon probiert?


      Anmerkungen soweit:

      in der loop():
      Code:
      digitalWrite(TEST_LED, HIGH);
      Macht wenig Sinn, da die TEST_LED immer mit HIGH befeuert wird. Nimm hier eher "laststate". Das wechselt immer zwischen AN und AUS.


      Dein

      Code:
      void knxEvents(byte index)
      sieht soweit ganz okay aus.


      Kommentar


        #4
        Zitat von tuxedo Beitrag anzeigen
        "Geht nicht" ist weder eine Fehlerbeschreibung noch eine Beschreibung mit der man konkret etwas anfangen kann. Was geht denn genau nicht? Was hast du soweit rausgefunden? Was hast du schon probiert?
        also Sketch geht in den Arduino rein, eine Verbindung zur Suite lässt sich herstellen und die Parameter lassen sich auch schreiben. Aber das schalten über den Bus geht eben nicht.

        Zitat von tuxedo Beitrag anzeigen
        Anmerkungen soweit:

        in der loop():
        Code:
        digitalWrite(TEST_LED, HIGH);
        Macht wenig Sinn, da die TEST_LED immer mit HIGH befeuert wird. Nimm hier eher "laststate". Das wechselt immer zwischen AN und AUS.
        Ja da gebe ich dir recht, hier habe ich mit Absicht die LED auf High gesetzt um zu testen, ob die Hardware soweit i.O. ist.

        Zitat von tuxedo Beitrag anzeigen
        Dein

        Code:
        void knxEvents(byte index)
        sieht soweit ganz okay aus.
        Danke für den Hinweis, hier hatte ich ehrlich gesagt meinen Fehler vermutet.
        ich werde nachher mal schauen, ob ich das Debug mit zum laufen kriege, dann kann ich ggf. besser rauskriegen, was das Problem ist.

        VG René

        Kommentar


          #5
          Ich vermisse noch
          Code:
          pinMode(XX,OUTPUT);
          für alle Ausgänge in der setup() Funktion.

          Ansonsten warten wie mal auf die Debugausgaben.
          1. Prüfen ob es überhaupt richtige Telegramme ankommen
          2. Was passiert damit? Wird knxEvents() aufgerufen?

          Kommentar


            #6

            Zitat von Eugenius Beitrag anzeigen
            2. Was passiert damit? Wird knxEvents() aufgerufen?
            Die Frage stelle ich mir auch. Nach meinem dafürhalten gibt es da ja nirgends in der Loop eine Veranlassung für, sprich keinen Aufruf. Aber ich bin da wie gesagt recht unbeschrieben, ich kann es also auch einfach nicht verstehen.

            Kommentar


              #7
              0. pinMode einbauen und schauen
              2. knxEvents wird aus der Lib aufgerufen. Lib-interne Sachen werden über Knx.task() abgearbeitet.


              baue die Zeile in die knxEvents() vor dem switch anstatt von "// nothing to do in this sketch" ein:
              Code:
              Debug.println(F("ComObj Index : %d"), index);
              Dann siehst du sofort ob es was ankommt.

              Kommentar


                #8
                Danke Eugenius für die Hilfe. Mit diesem Hinweis und dem Sketch aus dem iButton_IO habs ich nun zum laufen gekriegt.

                Kommentar


                  #9
                  Wo war nun der Fehler genau?

                  Kommentar


                    #10
                    Das würde mich auch interessieren... Woran lag es?

                    Kommentar

                    Lädt...
                    X