Jump to content

Recommended Posts

Geschrieben

Hallo Community,

 

ich bin blutiger Anfänger mit Tinkerforge und habe jetzt mein erstes Set zusammengebaut (Wetterstation). Alles scheint eigentlich prima zu funktionieren. Im Brick Viewer werden alle Bricklets angezeigt und sie arbeiten auch. Das Programm scheint auch nicht das Problem zu sein (Beispielcode Java von der TF-Website in Eclipse kopiert - zeigt keinerlei Fehler an). Aber auf dem Display werden keine Messwerte angezeigt. Es ist zwar beleuchtet und ich kann auch über Brick Viewer eigenen Text ans Display senden und den Cursor blinken lassen usw. (alles was auf ein funktionierendes Display schließen lassen könnte), aber es werden eben keine Messwerte angezeigt. Könnte es am Programmcode liegen? Oder muss ich eine Einstellung im Brick Viewer ändern? Oder ist es doch die Hardware? Ich bin für jeden Hinweis dankbar, bitte aber um ganz einfache Erklärungen, da ich nicht aus dem IT-Bereich komme.

 

Danke im voraus.

Geschrieben

Welcher Beispielcode ist es? In der Dokumentation gibt es einige Fragmente bei der Wetterstation?

 

Folgendes würde ich prüfen:

* die IDs müssen stimmen (im Brickviewer ablesen und im Code anpassen)

* nicht gleichzeitig Brickviewer und Anwendung laufen lassen

* je nach Beispielcode muss dass Programm noch eine Warteschleife haben,

  sonst beendet es sich ja wieder sofort und aktualisiert nichts.

  Darum die Frage nach dem Beispielcode.

Geschrieben

 

Hallo remotecontrol,

 

danke für Deine Anregungen. Zwischenzeitlich habe ich die Anzeige der Messwerte hinbekommen, ohne genau zu wissen, wie ich das gemacht habe (Code erneut hineinkopiert).

 

Trotzdem nachträglich die Antwort auf Deine Fragen. Ich benutze den kompletten Beispielcode aus Schritt 5 von Doc "Mit Java auf das LCD 20x4 Bricklet schreiben".

Jetzt kommt der Moment, der mir am meisten peinlichsten ist. Ich muss mich outen, dass ich nicht weiß, an welche Stelle im Code ich die UID eingeben müsste. Irgendwo in der Dokumentation habe ich gelesen, dass bei Verbindung per USB die Angabe von "localhost" und Port ausreicht. Deshalb hatte ich keine UID eingetragen.

 

Danke noch einmal für die Denkanstöße. Wie gesagt, mittlerweile läuft alles.

Geschrieben

Wenn Du diesen Mustercode meinst:

https://github.com/Tinkerforge/weather-station/blob/master/write_to_lcd/java/WeatherStation.java

 

Da brauchst Du keine UIDs einzustellen: im "enumerate" werden hier explizit die Bricklet-Typen geprüft und initialisiert. Die "Warteschleife" ist dort letztendlich dieser Befehl:

 

System.console().readLine("Press key to exit\n");

Der darauf wartet, dass Du <enter> drückst.

 

Wenn's jetzt geht: viel Spaß beim Experimentieren.

Geschrieben

Per Email hast du mir einen Traceback geschickt:

 

LCD 20x4 initialized
Exception in thread "main" java.lang.NullPointerException
at WeatherStation.main(WeatherStation.java:185)
Barometer initialized

 

Ist bei dir Zeile 185 auch

System.console().readLine("Press key to exit\n");

?

 

Falls ja, welche Java Version verwendest du?

Geschrieben

Hallo Gerry,

 

ich würde sagen, borg hat den richtigen Hinweis gegeben:

Ist bei dir Zeile 185 auch

Code: [select]

 

System.console().readLine("Press key to exit\n");

 

?

 

Falls ja, welche Java Version verwendest du?

 

Du schreibst in deinem ersten Post, dass du den Beispielcode in Eclipse kopiert hast:

(Beispielcode Java von der TF-Website in Eclipse kopiert - zeigt keinerlei Fehler an)

 

Die Zeile

System.console().readLine("Press key to exit\n");
kann in Eclipse nicht verarbeitet werden und es wird die von borg gepostete NullPointException geschmissen.

Die Zeile bezieht sich auf eine "richtige" Console, die aber Exclipse nicht hat. Das Problem hatte ich anfangs auch. Das Programm läuft also bis zu dieser Zeile und bricht dann ab. ( so meine Vermuttung )

 

Lösung: Einfach die Zeile entfernen. Dann läuft das Programm einmal durch und beended sich automatisch.

Wenn du Listener dabei hast musst du das Programm so aufbauen, dass es "am Leben" bleibt (sonsten läuft es halt einmal durch).

Beispielsweiße so:

 

boolean run = true;

while(run)
{
try
  {
TimeUnit.SECONDS.sleep(1); //die while Schleife "schläft" für eine Sekunde
  }
catch (InterruptedException e)
  {
e.printStackTrace();
  }
}

 

Wenn du das Programm dann noch von der "Consolen" Eingabe abhängig machen möchtest kannst du es unter anderem mit einem scaner erweitern:

 

boolean run = true;

Scanner scan = new Scanner(System.in);


while (run)
{
String input = scan.nextLine();
if (input.equals("stop"))
	{
		run = false;
	}
try
	{
	TimeUnit.SECONDS.sleep(1);
	}
catch (InterruptedException e)
	{
	e.printStackTrace();
	}
}
scan.close();

 

Davor und danach kannst du dein Programm schreiben.

 

Es gibt bestimmt noch bessere Lösungen mittels Threads (so mache ich das mittlerweile). Ich bin aber auch noch nicht so lange bei Java, ich denke so als erste Lösung ist das Beispiel in Ordnung. (Verbesserungen immer gerne).

Ein Nachteil der Lösung ist es, dass durch die Zeile "String input = scan.nextLine();" die Whilschleife hier auf eine Eingabe wartet und damit blockiert ist. Führst du separate Threads aus, wird halt nur der eine blockiert, der dann beispielsweiße auch nur für die Eingabe zuständig ist.

 

Ich hoffe, ich konnte dir da weiterhelfen.

 

Grüße

Unex

Geschrieben

Hallo Leute,

 

am Ende eines langen Arbeitstages (ohne IT und Tinkerforge) bin ich nun dazu gekommen, die tollen Hinweise auszuprobieren. Und ich bin sehr glücklich, weil ich die Wetterstation jetzt endlich stabil zum Laufen gebracht habe. Insbesondere Dank an Unex. Deine Code-Schnipsel haben mir den Durchbruch verschafft. Und auch vielen Dank an borg, der mir auf den richtigen Weg geholfen hat.

 

Ich wünsche Euch allen noch einen schönen Abend. Ich werde jetzt noch weiter experimentieren :)

 

Join the conversation

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

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...