Ankündigung

Einklappen
Keine Ankündigung bisher.

Ultraschall Entfernungsmesser

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

    [Firmware] Ultraschall Entfernungsmesser

    Nach Weihnachtszeit ist Konnekting Zeit wie man so schön sagt


    Ich hab ja schon mit 1-2 hier aus dem Forum per PN gesprochen und auch "versprochen" mich mal mit Konnekting zu beschäftigen und warum sollte ich das auch nicht tun eine super Sache die ihr hier auf die beine Gestellt habt
    Einziges, wenn man neu in die Sache reinkommen möchte, muss man erstmal 1000 Beispiele lesen und 100 verschiedene seiten von der offiziellen Webpräsenz bis zu git.
    das alle hätte mich fast abgehalten

    So nun zu meinem "Projekt"


    Ich hab einen Ultraschall Entfernungsmesser gebaut gibt es zwar zu kaufen aber wenn man gleich mehrere Braucht....
    Stückliste
    Anzahl Name Preis
    1 Siemens BCU 26,94 € 5WG117-2AB12
    1 Arduino Pro Mini 5,00 €
    1 Ultraschall Sensor 3,00 € HR-SR04
    1 10kOhm Wiederstand 0,05 €
    1 Taster 0,10 €

    der code findet sich auf GIT noch habe ich keine MANUFACTURER_ID die muss ich noch beantragen.

    Als nächstes wird mein Wiegand-KNX interface auch noch zu Konnekting umgeschrieben

    #2
    Eine kleine frage hätte ich trotzdem ich probiere schon die ganze zeit rum aber ich bekomme es nicht hin das ich bei einer Leseanfrage vom bus den wert neu abfrage

    Code:
    void knxEvents(byte index) {
     switch (index) {
    
            case 0: // object index has been updated
    
                 Knx.read(0, sonar.ping_cm());
    
    
                break;
    
            default:
                break;
        }
    }
    oder bin ich bei der abteilung gaaanz falsch ?

    Kommentar


      #3
      was ist der index 0 denn für ein Datentyp !? wenn es ein DPT1.001 ist dann musst du das eher so machen:

      case 0:

      if (Knx.read(0)) {

      task_1 = true; // boolsche Var die du in der While Schleife dann abfragen kannst

      }


      boolean task_1 = false;


      void loop() {

      Knx.task();

      if (Konnekting.isReadyForApplication())
      {
      if (task_1 == true)
      {
      task_1 = false;
      sonar.ping_cm();
      }
      }
      }
      www.smart-mf.de | KNX-Klingel | GardenControl | OpenKNX-Wiki

      Kommentar


        #4
        ist DPT.7.011

        das da muss ich dann gleich mal ausprobieren..
        Was komisch ist selbst ohne das etwas im void knxEvents steht gibt er mir wenn ich eine leseanfrage sende einen wert aus nach dem neustart direkt 00 aber nach dem ersten gesendeten wert gibt er mir immer den letzen gesendeten wert raus ich möchte aber das wenn ich eine leseanfrage stelle der wert neu ausgelesen wird.

        Kommentar


          #5
          wenn du werte aus der KNX Nachricht lesen willst, dann geht das so:

          Code:
          value = Knx.read(0);
          Was komisch ist selbst ohne das etwas im void knxEvents steht gibt er mir wenn ich eine leseanfrage sende einen wert aus nach dem neustart direkt 00 aber nach dem ersten gesendeten wert gibt er mir immer den letzen gesendeten wert raus ich möchte aber das wenn ich eine leseanfrage stelle der wert neu ausgelesen wird.
          Hm da sollte mit Konnekting eigentlich nichts zu tun haben.
          www.smart-mf.de | KNX-Klingel | GardenControl | OpenKNX-Wiki

          Kommentar


            #6
            ich möchte eigt. nur einen Read Request

            also ich klicke in der ets auf lesen bei der passenden Gruppenadresse und möchte festlegen was im code passieren soll
            oder wenn edomi startet und eine initRead macht das ich den aktuellen wert bekomme ich bin gerade dabei den Prototyp zu löten wenn ich damit fertig bin werde ich es mal noch probieren ob einer der wege zum Ergebnis führt

            Kommentar


              #7
              Du müsstest mal deinen kompletten Code hier posten.
              wie hast du deine Objekte initialisiert?

              wenn du gleich zu Beginn einen Wert über den Bus lesen möchtest, dann musst du dein Ping gleich am Anfang durchführen bevor du auf den Bus gehst.

              läuft dein Arduino ständig oder musst du ihn schlafen legen? Wenn nicht dann würde ich einfach zyklisch alle 10sek, 30sek, 1min oder was auch immer deine ping routine aufrufen. Das könnte man über die suite parameterisieren. Kommt jetzt ein Readrequest dann nimmt er den wert der letzten Messung.

              Wie lange dauert eine Messung? Sollte nicht zulange dauer.
              www.smart-mf.de | KNX-Klingel | GardenControl | OpenKNX-Wiki

              Kommentar


                #8
                Schau mal ich habe oben im ersten post meine CODE auf GIT gepostet
                https://github.com/x3muha/Konnekting...challSensor1.0


                Die dauer eines Pings sind 29ms wenn ich mich nicht irre

                Der arduino läuft ständig er legt sich auch nicht schlafen.

                Geht mir eigt. darum das ich den Bus nicht zumülle das Zyklische senden ist später deaktiviert
                Der wert soll gesendet werden wenn er sich um 3cm Ändert oder halt auf einen ReadRequest mit dem aktuellen wert antworten
                wenn ich das Zyklisch mache bekomme ich ja alle "10 Minuten" den aktuellen wert aber bei einem ReadRequest eben nur den Letzen gesendeten wert

                Kommentar


                  #9


                  dann würde ich ein weiteres Objekt hinzufügen was ein COM_OBJ_LOGIC_IN ist (hier index4). Wenn du deinen aktuellen Füllstand auslesen möchtest, dann musst du diese Nachricht schicken und dein Device wird mit seiner anderen GA (hier index0) was den Wert darstellt antworten.

                  Code:
                  case 4:  //Bsp 4 
                  
                  if (Knx.read(4))
                               {
                                 task_1 = true; // boolsche Var die du in der While Schleife dann abfragen kannst
                               }
                  
                  
                  boolean task_1 = false;
                  
                  
                  void loop() {
                  
                  Knx.task();
                  
                        if (Konnekting.isReadyForApplication())
                            {
                                if (task_1 == true)
                                {
                                 task_1 = false;
                                 Knx.write(0, sonar.ping_cm());
                                 }
                           }
                  }
                  www.smart-mf.de | KNX-Klingel | GardenControl | OpenKNX-Wiki

                  Kommentar


                    #10
                    Peterich,
                    hab mir deinen Code jetzt zwar nicht angeschaut, aber folgendes kann ich dir mal sagen:
                    der Read request wird vom "KNX-Teil" der Firmware beantwortet. Das heißt es wird einfach der zwischengespeicherte Wert geschickt. Bei jedem Update (Knx.write) wird der interne Zwischenspeicher geändert und anschließend geschickt. Soweit ich den code verstehe kann das Schicken auch nicht verhindert werden (außer du schaffst es irgendwie, die DPT-Flags während der Laufzeit zu ändern und z.B. "T" auf 0 zu setzen).
                    VG Christoph

                    Kommentar


                      #11
                      Sonnengruesser
                      Wenn du Hinweise / Vorschläge / Tipps zur Verbesserung der Doku/der Infos für den Einstieg hast: Bitte melde dich per PM.

                      Kommentar

                      Lädt...
                      X