Arduino Library für Jeti EX Eigenbau-Telemetrie

  • Micha
  • Micha's Avatar Offline
  • Premium Mitglied
  • 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
von Micha

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • IG-Modellbau
  • IG-Modellbau's Avatar Offline
  • Moderator
  • 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
von IG-Modellbau

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Sepp62
  • Sepp62's Avatar Offline Autor
  • Elite Mitglied
  • 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"
von Sepp62

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Micha
  • Micha's Avatar Offline
  • Premium Mitglied
  • Premium Mitglied
  • Beiträge: 130
  • Dank erhalten: 3

Micha antwortete auf Arduino Library für Jeti EX Eigenbau-Telemetrie

Posted 11 Feb. 2017 10:56 #232
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
von Micha

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Sepp62
  • Sepp62's Avatar Offline Autor
  • Elite Mitglied
  • 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 );
}
}
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
  • Micha's Avatar Offline
  • Premium Mitglied
  • Premium Mitglied
  • Beiträge: 130
  • Dank erhalten: 3

Micha antwortete auf Arduino Library für Jeti EX Eigenbau-Telemetrie

Posted 12 Feb. 2017 13:02 #234
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
von Micha

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Ladezeit der Seite: 1.033 Sekunden