Jump to content

Recommended Posts

Hallo und guten Morgen...

ich bin leider hier der Stammkunde! ­čśÇ Ich hoffe, das nimmt mir niemand ├╝bel... Durch die intensive Nutzung von Tinkerforge-Baugruppen kommen selbstverst├Ąndlich viele Fragen auf...

Ich habe hier herumgelesen, dass es bei der Verwendung der Interrupte am IO-16V2 mitunter zu 'Verklemmungen' kommt. Ich habe meine Applikation nun schon mit Eurer Hilfe recht weit voranbringen k├Ânnen. Jetzt bin ich beim IO-16V2 und habe auch ein seltsames Problem.

Ich habe Kanal 0 bereits mit einem EdgeCounter erfolgreich in Betrieb und wollte nun parallel den Kanal 1 mit einem Interrupt nutzen. Das schl├Ągt fehl. Erst einmal ganz ohne Fehler.

Ich habe dann den RED Brick neu gestartet und alle laufenden Programme (nodejs) beendet. 

Danach habe ich das Beispiel Download (ExampleInterrupt.js) f├╝r meine Umgebung lauff├Ąhig (Pfade/Ports etc..) gemacht. Jedoch liefert das Example auch keine Daten und keine Fehler.

Ich habe dann mein node.js Script mit denselben Parametern konfiguriert, jedoch funktioniert das nicht und wirft auch keinen Error.

Ich habe dann den Konfigurationsaufruf io.setInputValueCallbackConfiguration(1, 1000, false) so modifiziert, dass er einen ErrorCallback verwendet. Das ist zwar nicht explizit dokumentiert, aber sieht so aus...

io.setInputValueCallbackConfiguration(1, 1000, false, 
	() => {
		Logger.log('setInputValueCallbackConfiguration OK');
	},
	(err) => {
		Logger.log('setInputValueCallbackConfiguration ERROR', err);
	}
);

Dieser Aufruf wirft einen Fehler 31.

Nun steht bei diesem Callback in der Doku nichts davon, dass er einen Fehler Werfen kann und welchen. Ich gehe davon aus, dass es der allg. Fehler

IPConnection.ERROR_TIMEOUT = 31

ist. (Eine detaillierte Dokumentation w├Ąre hier sehr hilfreich! - auch die vom RED Brick steht seit 2015 auf 'nicht vollst├Ąndig' - aber das nur am Rande... ­čśÇ)

Was l├Ąuft hier falsch? Warum funktioniert dasselbe Script mit einem EdgeCounter sehr wohl und das mit dem Interrupt nicht?

Wo muss ich weiter suchen? Gibt es noch diese bounce_time? Hat es was damit zu tun? Wo sollte man die bounce_time setzen?

Beste Gr├╝├če vom
Theo!

PS: Ich hatte nicht erw├Ąhnt, dass am BrickViewer alle Pegel├Ąnderungen prima zu sehen sind. Der Interrupt wird halt nur nicht getriggert. Konfiguriert ist: io.setConfiguration(1, 'i', true);

Edited by theobald
Link to post
Share on other sites

Moin,

Kannst du ein vollst├Ąndiges Beispiel posten bei dem das Problem auftritt? Ich habe gerade versucht das hier nachzustellen aber es funktioniert.

Hast du neben dem Aufruf der Callback-Konfigurationsfunktion das Callback auch mit z.B.

io.on(Tinkerforge.BrickletIO16V2.CALLBACK_INPUT_VALUE,
    // Callback function for input value callback
    function (channel, changed, value) {
        console.log('Channel: ' + channel);
        console.log('Changed: ' + changed);
        console.log('Value: ' + value);
        console.log();
    }
);

registriert? Sonst schickt das Bricklet zwar Callbacks, sie werden aber von den Bindings ignoriert.

Sind die Firmwares aktuell?

Der Error-Callback der setInputValueCallbackConfiguration-Funktion ist soweit ich das sehe hier:

https://www.tinkerforge.com/de/doc/Software/Bricklets/IO16V2_Bricklet_JavaScript.html#BrickletIO16V2.setInputValueCallbackConfiguration

erw├Ąhnt. Die allgemeine API-Beschreibung auf derselben Seite (die zugegebenerma├čen leicht ├╝bersehen werden kann, weil die Beispiele so lang sind) listet auch den Fehlercode auf den du da bekommst.

Den debounce gibt es nur bei dem Flankenz├Ąhler soweit ich das ad-hoc sehe.

Gru├č,
Erik

Link to post
Share on other sites

Ja! Danke f├╝r die Antwort. Hier kommt mein Code...

<!DOCTYPE html>
<html>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <head>
        <title>Tinkerforge | JavaScript Example</title>
    </head>
    <body>
        <div style="text-align:center;">
            <h1>IO-16 Bricklet 2.0 Interrupt Example</h1>
            <p>
                <input value="192.168.5.42" id="host" type="text" size="20">:
                <input value="4280" id="port" type="text" size="5">,
                <input value="2fYVua" id="uid" type="text" size="5">
                <input value="Start Example" id="start" type="button" onclick="startExample();">
            </p>
            <p>
                <textarea readonly id="text" cols="80" rows="24" style="resize:none;"
                          >Press "Start Example" to begin ...</textarea>
            </p>
        </div>
        <script src="./js/tinkerforge/Tinkerforge.js" type='text/javascript'></script>
        <script type='text/javascript'>
            var ipcon;
            var textArea = document.getElementById("text");
            function startExample() {
                textArea.value = "";
                var HOST = document.getElementById("host").value;
                var PORT = parseInt(document.getElementById("port").value);
                var UID = document.getElementById("uid").value;
                if(ipcon !== undefined) {
                    ipcon.disconnect();
                }
                ipcon = new Tinkerforge.IPConnection(); // Create IP connection
                var io = new Tinkerforge.BrickletIO16V2(UID, ipcon); // Create device object
                ipcon.connect(HOST, PORT,
                    function(error) {
                        textArea.value += 'Error: ' + error + '\n';
                    }
                ); // Connect to brickd
                // Don't use device before ipcon is connected
                //                
                ipcon.on(Tinkerforge.IPConnection.CALLBACK_CONNECTED,
                    function (connectReason) {
                        // Set period for input value (channel 4) callback to 0.5s (500ms)
// theobald
ipcon.authenticate(
  "9Pttfnn9zh00i0uCQvNnnUedd",
  (ok) => { textArea.value += 'auth OK\n'; },
  (err) => { textArea.value +=  'auth ERR' + err + '\n'; }
);
// theobald end
                  
// ge├Ąndert auf chanel 1 also A1-GND                  
                        io.setInputValueCallbackConfiguration(1, 500, false);
                    }
                );

                // Register input value callback
                io.on(Tinkerforge.BrickletIO16V2.CALLBACK_INPUT_VALUE,
                    // Callback function for input value callback
                    function (channel, changed, value) {
                        textArea.value += 'Channel: ' + channel + '\n';
                        textArea.value += 'Changed: ' + changed + '\n';
                        textArea.value += 'Value: ' + value + '\n';
                        textArea.value += '\n';
                        textArea.scrollTop = textArea.scrollHeight;
                    }
                );
            }
        </script>
    </body>
</html>

Zudem habe ich gerade bemerkt, dass ├╝ber das Websocket in der Developer Konsole von FF Daten alle 500ms flie├čen. Nur die kommen offs im Browser nicht an?? Das sieht so aus:

grafik.thumb.png.14909499da8aadda4edb1ac550beb01f.png

Firmware ist v.2.0.2.

OK! Danke benz├╝glich des Fehlercodes...

Gr├╝├če
Theo

 

Edited by theobald
Link to post
Share on other sites

Du benutzt das Authenticate falsch, den setInputValueCallbackConfiguration-Aufruf (und alles weitere was erst passieren soll, wenn die Verbindung steht und authentisiert ist) musst du in das returnCallback des authenticate-Aufrufs packen.

  • Thanks 1
Link to post
Share on other sites

Danke! Das werde ich gleich testen. Ich habe jetzt ca. 3000 Zeilen code f├╝r diese Projekt geschrieben und diese Verfahrensweise bisher nirgendwo beachtet.

Steht das in der API-Beschreibung?

Asche auf mein Haupt! ­čśÇ

Gr├╝├če und Danke.
Theo

Link to post
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.

×
×
  • Create New...