theobald Geschrieben September 29, 2020 at 06:46 Share Geschrieben September 29, 2020 at 06:46 (bearbeitet) 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); bearbeitet September 29, 2020 at 06:49 von theobald Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
rtrbt Geschrieben September 29, 2020 at 07:54 Share Geschrieben September 29, 2020 at 07:54 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 Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
theobald Geschrieben September 29, 2020 at 15:11 Autor Share Geschrieben September 29, 2020 at 15:11 (bearbeitet) 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: Firmware ist v.2.0.2. OK! Danke benzĂŒglich des Fehlercodes... GrĂŒĂe Theo  bearbeitet September 29, 2020 at 16:18 von theobald Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
rtrbt Geschrieben September 30, 2020 at 11:30 Share Geschrieben September 30, 2020 at 11:30 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. 1 Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
theobald Geschrieben September 30, 2020 at 12:56 Autor Share Geschrieben September 30, 2020 at 12:56 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 Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.