Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

THEMA:

Re:RE: Arduino Library für Jeti EX Eigenbau-Telemetrie 11 Feb 2017 10:20 #229

  • Micha
  • Michas Avatar
  • Offline
  • Expert Boarder
  • Expert Boarder
  • Beiträge: 130
  • Dank erhalten: 3
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

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Arduino Library für Jeti EX Eigenbau-Telemetrie 11 Feb 2017 10:35 #230

  • IG-Modellbau
  • IG-Modellbaus Avatar
  • Abwesend
  • Moderator
  • Moderator
  • Beiträge: 3216
  • Dank erhalten: 2282
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

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Re:RE: Arduino Library für Jeti EX Eigenbau-Telemetrie 11 Feb 2017 10:40 #231

  • Sepp62
  • Sepp62s Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 289
  • Dank erhalten: 134
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"

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Arduino Library für Jeti EX Eigenbau-Telemetrie 11 Feb 2017 10:56 #232

  • Micha
  • Michas Avatar
  • Offline
  • Expert Boarder
  • Expert Boarder
  • 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

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Arduino Library für Jeti EX Eigenbau-Telemetrie 11 Feb 2017 11:08 #233

  • Sepp62
  • Sepp62s Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 289
  • Dank erhalten: 134
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 );
}
}

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von Sepp62. Grund: Fehler mit c== 0 korrigiert

Arduino Library für Jeti EX Eigenbau-Telemetrie 12 Feb 2017 13:02 #234

  • Micha
  • Michas Avatar
  • Offline
  • Expert Boarder
  • Expert Boarder
  • 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

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Ladezeit der Seite: 0.263 Sekunden
Powered by Kunena Forum