Arduino Library für Jeti EX Eigenbau-Telemetrie
- Micha
- Offline
- Premium Mitglied
- Beiträge: 130
- Dank erhalten: 3
Micha antwortete auf Re:RE: Arduino Library für Jeti EX Eigenbau-Telemetrie
Posted 11 Feb. 2017 10:20 #229
Morgen!
Sorry!!
Ich habe auch ausgeschlafen!
Ich Habe gefunden warum die Werte nicht Aktualisiert wurden!
Manchmal sieht man den Wald vor lauter Bäumen ja nicht!
if( c == 0 )
return;
Aber wie kann ich mir dann Aktuelle werte eines Sensors auf der Box
Anzeigen lassen?
Soll man nur nicht den
uint8_t c = jetiEx.GetJetiboxKey();
Aufrufen
Oder
Das Senden
jetiEx.SetJetiboxText( JetiExProtocol::LINE1, JetiBoxLine1);
Wenn ich ja per Tasten mir ein Menue (mit Aktuellen Werten zb. der Stromaufnahme ) ausgewählt, habe möchte ich ja auch das die Werte Aktualisiert werden!
Warum soll man das HandelMenu() eigentlich nicht immer Aufrufen?
Stört das den Datenfluss?
Gruß Micha
Sorry!!
Ich habe auch ausgeschlafen!
Ich Habe gefunden warum die Werte nicht Aktualisiert wurden!
Manchmal sieht man den Wald vor lauter Bäumen ja nicht!
if( c == 0 )
return;
Aber wie kann ich mir dann Aktuelle werte eines Sensors auf der Box
Anzeigen lassen?
Soll man nur nicht den
uint8_t c = jetiEx.GetJetiboxKey();
Aufrufen
Oder
Das Senden
jetiEx.SetJetiboxText( JetiExProtocol::LINE1, JetiBoxLine1);
Wenn ich ja per Tasten mir ein Menue (mit Aktuellen Werten zb. der Stromaufnahme ) ausgewählt, habe möchte ich ja auch das die Werte Aktualisiert werden!
Warum soll man das HandelMenu() eigentlich nicht immer Aufrufen?
Stört das den Datenfluss?
Gruß Micha
von Micha
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- IG-Modellbau
- Offline
- Moderator
- Beiträge: 3367
- Dank erhalten: 2412
IG-Modellbau antwortete auf Arduino Library für Jeti EX Eigenbau-Telemetrie
Posted 11 Feb. 2017 10:35 #230
Hallo Micha,
um Werte anzeigen zu können, musst Du den Wert erst in einen String wandeln, so z.B.:
char cLine2[] = "0123456789ABCDEF"; //Zeile die später ausgegeben wird, gefüllt mit dummy Werten
sprintf(cLine2, "Buffer2:%d", _buffer2); //Hier werden Deine Werte in cLine2 geschrieben.
jetiEx.SetJetiboxText( JetiExProtocol::LINE2, cLine2 ); //Und hier dann zur Ausgabe weg gesendet.
So lange sich am Inhalt der Jetibox Zeilen nichts ändert, ist der Aufruf verschwendete Rechenleistung.
Viele Grüße, Ingmar
um Werte anzeigen zu können, musst Du den Wert erst in einen String wandeln, so z.B.:
char cLine2[] = "0123456789ABCDEF"; //Zeile die später ausgegeben wird, gefüllt mit dummy Werten
sprintf(cLine2, "Buffer2:%d", _buffer2); //Hier werden Deine Werte in cLine2 geschrieben.
jetiEx.SetJetiboxText( JetiExProtocol::LINE2, cLine2 ); //Und hier dann zur Ausgabe weg gesendet.
So lange sich am Inhalt der Jetibox Zeilen nichts ändert, ist der Aufruf verschwendete Rechenleistung.
Viele Grüße, Ingmar
von IG-Modellbau
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Sepp62
- Offline Autor
- Elite Mitglied
- Beiträge: 294
- Dank erhalten: 153
Sepp62 antwortete auf Re:RE: Arduino Library für Jeti EX Eigenbau-Telemetrie
Posted 11 Feb. 2017 10:40 #231
HandleMenu() ruft halt SetJetiboxText() auf. Wenn Du das in der Deiner Schleife an einer anderen Stelle (dort wo Du die Messwerte setzen willst) nochmals machst überschreiben sich die Werte. Immer der letzte Aufruf von SetJetiboxText() vor DoJetiSend() gewinnt.
Wenn Du auch Deine Messwerte in HandleMenu() setzt, dann passt das schon. Der Beispiel-Code mit dem Menü ist nicht so 100% auf die alleinige Anzeige in der Jetibox ausgerichtet, daher musst Du da ein wenig "optimieren"
Wenn Du auch Deine Messwerte in HandleMenu() setzt, dann passt das schon. Der Beispiel-Code mit dem Menü ist nicht so 100% auf die alleinige Anzeige in der Jetibox ausgerichtet, daher musst Du da ein wenig "optimieren"
von Sepp62
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Micha
- Offline
- Premium Mitglied
- Beiträge: 130
- Dank erhalten: 3
Hallo Zusammen
Danke für den Hinweis!
dtostrf(vh_sensor1, 4, 2, buffer1);
dtostrf(vh_sensor2, 4, 2, buffer2);
sprintf(JetiBoxLine1,"%5s m %5s \xB0\x43",buffer1, buffer2);
dtostrf(vh_sensor3/100, 4, 2, buffer1);
sprintf(JetiBoxLine2,"%0s hPa", buffer1);
Das ist so schon OK!
Aber Bernd hat geschrieben
„Du solltest HandleMenu() nur aufrufen, wenn Du ein Menü anzeigen willst, in dem Du per Tasten navigieren möchtest. Z.B. wenn Du einen Sensor konfigurieren möchtest.“
Die Werte von Sensor vh_sensor1 ändern sich aber ja laufend!
Wenn ich aber das HandelMenu nicht immer aufrufen Darf/soll werden die Werte ja aber nicht aktualisiert!
Ohne eine Tastendruck geht es ja wieder zurück!
if( c == 0 )
return;
Da Stellt sich mir die Frage wie ich das Hinbekomme!
Ohne den
jetiEx.SetJetiboxText( JetiExProtocol::LINE1, JetiBoxLine1);
jetiEx.SetJetiboxText( JetiExProtocol::LINE2, JetiBoxLine2);
Aufruf bei jedem Durchlauf wird das ja nicht gehen!
Die Tasten abfrage
uint8_t c = jetiEx.GetJetiboxKey();
// down
if( c == 0xb0)
{
_y++;
}
.
.
usw
könnte man natürlich auslassen!
Aber was ist da die Glücklichste Lösung?
Oder hab Ihr eine andere Idee?
Gruß Micha
Danke für den Hinweis!
dtostrf(vh_sensor1, 4, 2, buffer1);
dtostrf(vh_sensor2, 4, 2, buffer2);
sprintf(JetiBoxLine1,"%5s m %5s \xB0\x43",buffer1, buffer2);
dtostrf(vh_sensor3/100, 4, 2, buffer1);
sprintf(JetiBoxLine2,"%0s hPa", buffer1);
Das ist so schon OK!
Aber Bernd hat geschrieben
„Du solltest HandleMenu() nur aufrufen, wenn Du ein Menü anzeigen willst, in dem Du per Tasten navigieren möchtest. Z.B. wenn Du einen Sensor konfigurieren möchtest.“
Die Werte von Sensor vh_sensor1 ändern sich aber ja laufend!
Wenn ich aber das HandelMenu nicht immer aufrufen Darf/soll werden die Werte ja aber nicht aktualisiert!
Ohne eine Tastendruck geht es ja wieder zurück!
if( c == 0 )
return;
Da Stellt sich mir die Frage wie ich das Hinbekomme!
Ohne den
jetiEx.SetJetiboxText( JetiExProtocol::LINE1, JetiBoxLine1);
jetiEx.SetJetiboxText( JetiExProtocol::LINE2, JetiBoxLine2);
Aufruf bei jedem Durchlauf wird das ja nicht gehen!
Die Tasten abfrage
uint8_t c = jetiEx.GetJetiboxKey();
// down
if( c == 0xb0)
{
_y++;
}
.
.
usw
könnte man natürlich auslassen!
Aber was ist da die Glücklichste Lösung?
Oder hab Ihr eine andere Idee?
Gruß Micha
von Micha
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Sepp62
- Offline Autor
- Elite Mitglied
- Beiträge: 294
- Dank erhalten: 153
Sepp62 antwortete auf Arduino Library für Jeti EX Eigenbau-Telemetrie
Posted 11 Feb. 2017 11:08 #233
So als kleinen Anhalt für Deine Programmierstruktur:
Im Menü-Handling gibt es die Y-Koordinate im Menü. Tastendrücke nach oben und unten verändern diese. Definiere die Y-Koordinate "0" so, dass bei dieser die Messwerte anzeigte werden. Wenn Du mit den Tasten in eine andere Ebene navigierst, zeigst Du das Konfigurationsmenü an (wenn Du eines hast).
Ungefähr so:
void HandleMenu()
{
static char _buffer[ 17 ];
static int _x = 0, _y = 0;
uint8_t c = jetiEx.GetJetiboxKey();
if( c != 0 )
{
// down
if( c == 0xb0 )
{
_y++;
}
// up
if( c == 0xd0 )
{
if( _y > 0 )
_y--;
}
// right
if( c == 0xe0 )
{
_x++;
// jetiEx.SetJetiAlarm( 'U' ); // Alarm "U"
}
// left
if( c == 0x70 )
{
if( _x > 0 )
_x--;
else
jetiEx.SetJetiAlarm( 'U' ); // Alarm "U"
}
}
if( y == 0 )
{
// in diesem Zweig werden die Messwerte ausgegeben
int mw1 = 100;
int mw2 = 200;
sprintf( _buffer, "Messwert 1: %d", mw1 );
jetiEx.SetJetiboxText( JetiExProtocol::LINE1, _buffer );
sprintf( _buffer, "Messwert 2: %d", mw2 );
jetiEx.SetJetiboxText( JetiExProtocol::LINE2, _buffer );
}
else
{
// in diesem Zweig wies das Konfigurationsmenü entsprechend aufgebaut
sprintf( _buffer, "Menu x/y: %d/%d", _x, _y );
jetiEx.SetJetiboxText( JetiExProtocol::LINE1, _buffer );
sprintf( _buffer, "Key: 0x%2.2x", c );
jetiEx.SetJetiboxText( JetiExProtocol::LINE2, _buffer );
}
}
Im Menü-Handling gibt es die Y-Koordinate im Menü. Tastendrücke nach oben und unten verändern diese. Definiere die Y-Koordinate "0" so, dass bei dieser die Messwerte anzeigte werden. Wenn Du mit den Tasten in eine andere Ebene navigierst, zeigst Du das Konfigurationsmenü an (wenn Du eines hast).
Ungefähr so:
void HandleMenu()
{
static char _buffer[ 17 ];
static int _x = 0, _y = 0;
uint8_t c = jetiEx.GetJetiboxKey();
if( c != 0 )
{
// down
if( c == 0xb0 )
{
_y++;
}
// up
if( c == 0xd0 )
{
if( _y > 0 )
_y--;
}
// right
if( c == 0xe0 )
{
_x++;
// jetiEx.SetJetiAlarm( 'U' ); // Alarm "U"
}
// left
if( c == 0x70 )
{
if( _x > 0 )
_x--;
else
jetiEx.SetJetiAlarm( 'U' ); // Alarm "U"
}
}
if( y == 0 )
{
// in diesem Zweig werden die Messwerte ausgegeben
int mw1 = 100;
int mw2 = 200;
sprintf( _buffer, "Messwert 1: %d", mw1 );
jetiEx.SetJetiboxText( JetiExProtocol::LINE1, _buffer );
sprintf( _buffer, "Messwert 2: %d", mw2 );
jetiEx.SetJetiboxText( JetiExProtocol::LINE2, _buffer );
}
else
{
// in diesem Zweig wies das Konfigurationsmenü entsprechend aufgebaut
sprintf( _buffer, "Menu x/y: %d/%d", _x, _y );
jetiEx.SetJetiboxText( JetiExProtocol::LINE1, _buffer );
sprintf( _buffer, "Key: 0x%2.2x", c );
jetiEx.SetJetiboxText( JetiExProtocol::LINE2, _buffer );
}
}
Last Edit:11 Feb. 2017 11:09
von Sepp62
Letzte Änderung: 11 Feb. 2017 11:09 von Sepp62. Begründung: Fehler mit c== 0 korrigiert
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Micha
- Offline
- Premium Mitglied
- Beiträge: 130
- Dank erhalten: 3
Hallo Bernd
Ich habe das im Moment über
switch( _y )
{
case 0:
switch( _x )
{
case 0:
sprintf(JetiBoxLine1,"%0s", “Sensor"); //1
sprintf(JetiBoxLine2,"%0s" , "Infos"); // 9
break;
case 1:
sprintf(JetiBoxLine1,"%0s", "Software"); //9
sprintf(JetiBoxLine2,"%0s", VERSION); //9
break;
case 2:
sprintf(JetiBoxLine1,"%0s", "Zykluszeit"); //12
dtostrf(v_millis, 4, 0, buffer2);
sprintf(JetiBoxLine2,"%0s ms." , buffer2);//
break;
default:
_x = 0;
break;
}
break;
case 1:
switch( _x )
{
case 0:
sprintf(JetiBoxLine1,"%0s", "Hoehen Sensor");
sprintf(JetiBoxLine2,"%0s", "Werte");
break;
case 1:
dtostrf(vh_alti, 4, 2, buffer1);
dtostrf(vh_atemp, 4, 2, buffer2);
sprintf(JetiBoxLine1,"%5s m %5s \xB0\x43",buffer1, buffer2);
dtostrf(vh_ldruck/100, 4, 2, buffer1);
sprintf(JetiBoxLine2,"%0s hPa", buffer1);
break;
default:
_x = 0;
break;
}
break;
default:
_y = 0;
break;
}
Gelöst!
Nun wollte ich, wenn ich ein Menu ausgewählt habe wo sich die Werte nicht ändern
Die Procedure nach der abfrage von den Jetitasten (wenn die auch c=0 ist)
Verlassen!
Wenn ich aber eine Anzeige mit ändernden Werten aufrufe dann eben nicht!
Ist das ein gangbarer Weg?
Mir ist noch Aufgefallen,
Wenn ich immer das komplette HandelMenue durchlaufe also
if( c == 0 )
return;
aus kommentiere, werden die Betätigungen der Jetiboxtasten fast immer verlässlich umgesetzt!
Ansonsten kommt es häufiger zu fehlern!
Gruß Micha
Ich habe das im Moment über
switch( _y )
{
case 0:
switch( _x )
{
case 0:
sprintf(JetiBoxLine1,"%0s", “Sensor"); //1
sprintf(JetiBoxLine2,"%0s" , "Infos"); // 9
break;
case 1:
sprintf(JetiBoxLine1,"%0s", "Software"); //9
sprintf(JetiBoxLine2,"%0s", VERSION); //9
break;
case 2:
sprintf(JetiBoxLine1,"%0s", "Zykluszeit"); //12
dtostrf(v_millis, 4, 0, buffer2);
sprintf(JetiBoxLine2,"%0s ms." , buffer2);//
break;
default:
_x = 0;
break;
}
break;
case 1:
switch( _x )
{
case 0:
sprintf(JetiBoxLine1,"%0s", "Hoehen Sensor");
sprintf(JetiBoxLine2,"%0s", "Werte");
break;
case 1:
dtostrf(vh_alti, 4, 2, buffer1);
dtostrf(vh_atemp, 4, 2, buffer2);
sprintf(JetiBoxLine1,"%5s m %5s \xB0\x43",buffer1, buffer2);
dtostrf(vh_ldruck/100, 4, 2, buffer1);
sprintf(JetiBoxLine2,"%0s hPa", buffer1);
break;
default:
_x = 0;
break;
}
break;
default:
_y = 0;
break;
}
Gelöst!
Nun wollte ich, wenn ich ein Menu ausgewählt habe wo sich die Werte nicht ändern
Die Procedure nach der abfrage von den Jetitasten (wenn die auch c=0 ist)
Verlassen!
Wenn ich aber eine Anzeige mit ändernden Werten aufrufe dann eben nicht!
Ist das ein gangbarer Weg?
Mir ist noch Aufgefallen,
Wenn ich immer das komplette HandelMenue durchlaufe also
if( c == 0 )
return;
aus kommentiere, werden die Betätigungen der Jetiboxtasten fast immer verlässlich umgesetzt!
Ansonsten kommt es häufiger zu fehlern!
Gruß Micha
von Micha
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 1.033 Sekunden