Arduino Library für Jeti EX Eigenbau-Telemetrie
- Micha
-
- Offline
- Premium Member
-
- Posts: 130
- Thank you received: 3
TPL_KUNENA_MESSAGE_REPLIED_NEW Re:RE: Arduino Library für Jeti EX Eigenbau-Telemetrie
11 Feb 2017 09:20
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
Please Log in or Create an account to join the conversation.
- IG-Modellbau
-
- Offline
- Moderator
-
- Posts: 3781
- Thank you received: 2809
TPL_KUNENA_MESSAGE_REPLIED_NEW Arduino Library für Jeti EX Eigenbau-Telemetrie
11 Feb 2017 09:35
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
Please Log in or Create an account to join the conversation.
- Sepp62
-
Topic Author
- Offline
- Elite Member
-
- Posts: 305
- Thank you received: 154
TPL_KUNENA_MESSAGE_REPLIED_NEW Re:RE: Arduino Library für Jeti EX Eigenbau-Telemetrie
11 Feb 2017 09:40
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"
Please Log in or Create an account to join the conversation.
- Micha
-
- Offline
- Premium Member
-
- Posts: 130
- Thank you received: 3
TPL_KUNENA_MESSAGE_REPLIED_NEW Arduino Library für Jeti EX Eigenbau-Telemetrie
11 Feb 2017 09:56
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
Please Log in or Create an account to join the conversation.
- Sepp62
-
Topic Author
- Offline
- Elite Member
-
- Posts: 305
- Thank you received: 154
TPL_KUNENA_MESSAGE_REPLIED_NEW Arduino Library für Jeti EX Eigenbau-Telemetrie
11 Feb 2017 10:08 - 11 Feb 2017 10:09
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 10:09 by Sepp62. Reason: Fehler mit c== 0 korrigiert
Please Log in or Create an account to join the conversation.
- Micha
-
- Offline
- Premium Member
-
- Posts: 130
- Thank you received: 3
TPL_KUNENA_MESSAGE_REPLIED_NEW Arduino Library für Jeti EX Eigenbau-Telemetrie
12 Feb 2017 12:02
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
Please Log in or Create an account to join the conversation.
Time to create page: 0.392 seconds