Jump to content

IO4 nur steigende Flanke beim Listener abfragen


Recommended Posts

Hallo zusammen,

 

nach dem ersten versuch mit den shell-bindings versuche ich es nun mit java.

es geht darum, per schalter der am IO4 hängt über einen listener eine aktion auszuführen.

das klappt auch soweit, allerdings wird der listener ausgelöst wenn der schalter gedrückt wird, und auch wenn er losgelassen wird. wie lässt sich die abzufragene flanke definieren?

 

 

 

// listener wenn IO4 aktiviert wird
io4.addInterruptListener(new BrickletIO4.InterruptListener() {
    public void interrupt(short interruptMask, short valueMask) {
    System.out.println("STOP");
                try {
                    //stepper stoppen und position auf 0 setzen  
                    stepper.fullBrake();
                    stepper.setCurrentPosition(0);
                }catch(TinkerforgeException e) {
                }
            }
        });

// Enable interrupt on pin 0
io4.setInterrupt((short)(1 << 0));

 

 

 

Link to comment
Share on other sites

Hi,

 

der vollständigkeit halber wie ich es gelöst habe:

io4.addInterruptListener(new BrickletIO4.InterruptListener() {
  public void interrupt(short interruptMask, short valueMask) {
   // System.out.println("!!ENDSCHALTER 0 oder 1!!");
  try {
          val=io4.getValue();
          if (val == 14) {
              System.out.println("NULLSCHALTER " + val);
          }
          if (val == 13) {
              System.out.println("ENDSCHALTER " + val);
          }
   }catch(TinkerforgeException e) {
   }
  }
});
       
// Enable interrupt on pin 0 + 1
io4.setInterrupt((short)(1111));

 

ich habe allerdings noch das problem, dass bei jedem programmdurchlauf der listener scheinbar einmal mehr durchläuft wird, da beim ersten durchlauf eine textausgabe kommt, beim zweiten zwei, beim dritten drei usw. (das programm läuft in einer schleife). liegt das etvl. daran weil der listener nicht gestoppt wird?

wäre nett wenn das nochmal jemand konkret posten könnte, meine versuche  sind bisher gescheitert.

 

=> wie muss er beendet werden?

io4.removeInterruptListener(null);

Link to comment
Share on other sites

Rufst du auf dem gleichen io4 Objekt mehrfach addInterruptListener() auf? Dann fügst du beim jedem Durchlauf einen weiteren Listener hinzu und dann werden auch mehrere Listener ausgeführt. Wenn das nicht deine Absicht ist, dann solltest du addInterruptListener() nur einmal am Anfang aufrufen.

 

removeInterruptListener(null) ergibt keinen Sinn. Wenn dann musst du dir eine Referenz zum Listner Objekt zwischen speichern:

 

BrickletIO4.InterruptListener listener = new BrickletIO4.InterruptListener() { ... }

io4.addInterruptListener(listener);

...

io4.removeInterruptListener(listener);

 

Link to comment
Share on other sites

Rufst du auf dem gleichen io4 Objekt mehrfach addInterruptListener() auf? Dann fügst du beim jedem Durchlauf einen weiteren Listener hinzu und dann werden auch mehrere Listener ausgeführt. Wenn das nicht deine Absicht ist, dann solltest du addInterruptListener() nur einmal am Anfang aufrufen.

Link to comment
Share on other sites

Hi,

 

ich benötige nochmal Hilfe. Ich verstehe die Syntax nicht den Interruptlistener zu beenden!

 

Das Beispiel

io4.removeInterruptListener(listener);

funktioniert nicht.

 

Kannst du mir nochmal bitte konkret nennen wie ich ihn beenden muss, wenn ich ihn so starte?

 

      io4.addInterruptListener(new BrickletIO4.InterruptListener() {
            public void interrupt(short interruptMask, short valueMask) {
                try {
                    if (val == 14) {
                        System.out.print("\nSchalter 1");
                    }
                    if (val == 13) {
                        System.out.print("\nSchalter 2");
                    }
                }catch(TinkerforgeException e) {
                }
            }
        });    

 

Vielen Dank!

Link to comment
Share on other sites

Das geht mit der "io4.addInterruptListener(new BrickletIO4.InterruptListener() { ... }" Schreibweise nicht. Du kannst das so machen:

 

       BrickletIO4.InterruptListener listener = new BrickletIO4.InterruptListener() {
            public void interrupt(short interruptMask, short valueMask) {
                try {
                    if (val == 14) {
                        System.out.print("\nSchalter 1");
                    }
                    if (val == 13) {
                        System.out.print("\nSchalter 2");
                    }
                }catch(TinkerforgeException e) {
                }
            }
        });

        io4.addInterruptListener(listener);

        ...

        io4.removeInterruptListener(listener);

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...