Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

THEMA:

Arduino Library für Jeti EX Eigenbau-Telemetrie 14 Mai 2016 20:33 #85

  • AlexM_1977
  • AlexM_1977s Avatar
  • Offline
  • Junior Boarder
  • Junior Boarder
  • Beiträge: 22
  • Dank erhalten: 8
Hallo Bernd,

leider bin ich auch erst heute dazu gekommen :) .Habe Deinen Code folgendermaßen angepasst.

JETISENSOR_PTR pSensor = m_pSensors[ m_sensorIdx ];
if( pSensor->m_value != -1 ) // -1 is "invalid"
{
if (pSensor->m_id>15)
{
m_exBuffer[n++] = 0x0 | (pSensor->m_dataType & 0x0F);
m_exBuffer[n++] = pSensor->m_id;
n += pSensor->jetiEncodeValue( m_exBuffer, n );
}
else
{
m_exBuffer[n++] = (pSensor->m_id<<4) | (pSensor->m_dataType & 0x0F); // 4Bit id, 4 bit data type (i.e. int14_t)
n += pSensor->jetiEncodeValue( m_exBuffer, n );
}

}
if( ++m_sensorIdx >= m_nSensors )

Jetzt sind mehr wie 15 sensoren möglich.Habe es mit 20 getestet und des funzt super.

Danke auch an Wolfgang für die Infos.

Grüße Alex
Folgende Benutzer bedankten sich: wstech

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Arduino Library für Jeti EX Eigenbau-Telemetrie 27 Mai 2016 13:36 #86

  • Sepp62
  • Sepp62s Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 289
  • Dank erhalten: 134
Hallo Alex,

vielen Dank für Deine Mühe den Code anzupassen und zu testen.

Ich werde die Funktion so in den "Code-Stamm" übernehmen und fortan wird die Library mehr als 15 Sensoren unterstützen. Kann aber noch ein paar Tage dauern.

Viele Grüße
Bernd

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Arduino Library für Jeti EX Eigenbau-Telemetrie 28 Mai 2016 09:43 #87

  • onki
  • onkis Avatar
  • Offline
  • Platinum Boarder
  • Platinum Boarder
  • Beiträge: 2286
  • Dank erhalten: 791
Hallo Bernd,

ich hab mir noch einen Hallsensor bestellt als Stromsensor für meinen Funglider.
Da möchte ich versuchen sowohl die Daten auf die Minibox als auch auf der DC-16 zu sehen. Bisher schaffe ich nur entweder oder.
Bin für jeden Tip dankbar weil ich den Flieger mit den verschiedenen Sendern einsetzen möchte.
Im RCN gibt es ein Projekt für Hott mit einer netten Library, welche das Sensorauslesen übernimmt. Daran würde ich mich orientieren.

Gruß
Onki
Gruß aus dem Nordschwarzwald
Rainer aka Onki
www.onki.de
gepostet unter Verwendung von 100% recycelter Elektronen.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Arduino Library für Jeti EX Eigenbau-Telemetrie 28 Mai 2016 19:49 #88

  • Sepp62
  • Sepp62s Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 289
  • Dank erhalten: 134
Hallo Onki,

hast Du mal versucht den Code, der die "EX-Telemetrie" macht und die Jetibox-Anzeige zu kombinieren ?

In der Loop würde das dann grob so aussehen:

{
...
jetiEx.SetSensorValue( ID_VOLTAGE, 74 ); // 7.4 V
jetiEx.SetSensorValue( ID_ALTITUDE, 120 ); // 120 m

...
sprintf( line1, "Volt: %d", (int)7 );
jetiEx.SetJetiboxText( JetiExProtocol::LINE1, line1 );

sprintf( line1, "Alt: %d", (int)120 );
jetiEx.SetJetiboxText( JetiExProtocol::LINE2, line2 );
...
}

In der DC-16 würdest Du die Telemetriewerte auf dem Telemetriebildschirm sehen und zusätzlich die Texte in der Jetibox-Emulation. Ob die Minibox die "EX-Telemetrie" ignorieren kann oder ob sie in den Fehlerzustand geht, musst Du selbst probieren (habe keine Minibox).

Ich hoffe, der Beispiel-Code ist so weit klar (er ist an die Samples angelehnt).

Falls Du Gleitkommazahlen als Text ausgeben willst, kannst Du sprintf nicht ohne Weiteres verwenden, sondern musst die Konvertierung ev. selbst machen: forum.arduino.cc/index.php?topic=44262.0

Viele Grüße
Bernd

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von Sepp62.

Arduino Library für Jeti EX Eigenbau-Telemetrie 29 Mai 2016 16:48 #89

  • onki
  • onkis Avatar
  • Offline
  • Platinum Boarder
  • Platinum Boarder
  • Beiträge: 2286
  • Dank erhalten: 791
Hallo Bernd,

ich hab das derzeit so gelöst:
/* 
  Jeti EX Sensor Simple Demo
  benötigt die Jeti Library von Bernd Wokoeck
  TX2 (Pin) 10 des Teensy mit Signalpin Telemetrie verbinden
  Spannungswert vom Sensor an A0 (Pin 14)
  Stromwert vom Sensor an A1 (Pin 15)
**************************************************************/
 
#include <JetiExProtocol.h>
 
JetiExProtocol jetiEx;
enum
{
  ID_VOLTAGE = 1,
  ID_CURRENT,
  ID_CAPACITY,
};
 
float vcode;
float acode;
float myVoltage = 0.0f;
float myCurrent = 0.0f;
float myCapacity = 0.0f;
static char line1[ 16 ];
static char line2[ 16 ];
 
JETISENSOR_PTR sensors[] = 
{
  //              id             name        unit         data type             precision = 0 --> 0, precision = 1 --> 0.0, precision = 2 --> 0.00
  new JetiSensor( ID_VOLTAGE,   "Spannung",  "V",         JetiSensor::TYPE_14b, 1 ),
  new JetiSensor( ID_CURRENT,   "Strom", "A",         JetiSensor::TYPE_14b, 1 ),
  new JetiSensor( ID_CAPACITY,  "Kapazitaet",     "Ah",  JetiSensor::TYPE_14b, 2 ), //
  0 // end of array
};
 
void setup()
{
  #ifdef CORE_TEENSY 
  Serial.begin( 9600 );
#endif
  jetiEx.Start( "OnkiSensor", sensors );
 
  jetiEx.SetJetiboxText( JetiExProtocol::LINE1, "Start 1" );
  jetiEx.SetJetiboxText( JetiExProtocol::LINE2, "Start 2" );
 
 
}
void loop()
{
  GetSensorValues();
 
  jetiEx.SetSensorValue( ID_VOLTAGE, (long)myVoltage );
  jetiEx.SetSensorValue( ID_CURRENT, (long)myCurrent );
  jetiEx.SetSensorValue( ID_CAPACITY, (long)myCapacity );
 
  jetiEx.DoJetiSend(); 
}
 
void GetSensorValues()
{
  analogReadRes(12);
  vcode = analogRead(A0); 
  acode = analogRead(A1); 
  myVoltage = (vcode / 121.00f);
  myCurrent = ((acode / 72.4f)-0.1f);
  myCapacity = myCapacity + (myCurrent / 1440.0f);
  delay(250); 
  Serial.print("Spg: ");
  Serial.print(vcode);
  Serial.print(" digits  entspricht  ");
  Serial.print(myVoltage);
  Serial.println(" V");
  Serial.print("Strom: ");
  Serial.print(acode); 
  Serial.print(" digits  entspricht  ");
  Serial.print(myCurrent);
  Serial.println(" A");
 
  sprintf( line1, "Strom: %f", myCurrent );
  jetiEx.SetJetiboxText( JetiExProtocol::LINE1, line1 );
 
  sprintf( line2, "Kap: %f", myCapacity );
  jetiEx.SetJetiboxText( JetiExProtocol::LINE2, line2 );
 
}
Beides wird in der DC16 und auf der Minibox angezeigt. Werte auf der Minibox sind OK jedoch mit unnötig Nachkommastellen. In der DC-16 sind die Werte um Faktor 10 zu klein. Das wird die sprintf-Geschichte sein. Muss ich mir mal ansehen.
Die Serial-Befehle nutze ich für den Monitor als Hilfe.

Gruß
Onki
Gruß aus dem Nordschwarzwald
Rainer aka Onki
www.onki.de
gepostet unter Verwendung von 100% recycelter Elektronen.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Arduino Library für Jeti EX Eigenbau-Telemetrie 29 Mai 2016 18:16 #90

  • Sepp62
  • Sepp62s Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 289
  • Dank erhalten: 134
Hallo Onki,

das schaut doch schon ganz gut aus.

Die um den Faktor 10 zu kleinen Werte solltest Du einfach so wegbekommen:

jetiEx.SetSensorValue( ID_VOLTAGE, (long)(myVoltage*10.0f) );

Bei der sprintf-Geschichte kann ich beim Arduino leider nicht mit persönlicher Erfahrung dienen. Mich wundert, dass Du überhaupt eine Floating-Point-Konvertierung mit sprintf hinbekommst, da diese im Default deaktiviert ist (dereenigne.org/arduino/arduino-float-to-string). Ansonsten lässt sich bei sprintf die "precision" einfach über den Format-String setzen. Also bei zwei Nachkommastellen so:

sprintf( line1, "Strom: %0.2f", myCurrent );


Alternativ ist hier ein (blind hingeschriebenes) Beispiel für die dtostrf-Funktion:

char tempCurrent[6];
dtostrf( myCurrent, 6, 2, tempCurrent); // Min. 6 chars wide incl. decimal point, 2 digits right of decimal
sprintf( line1, "Strom: %s", temp );

Hoffe, Du kannst was damit anfangen.

Viele Grüße
Bernd


PS: Passt das Ganze nun grundsätzlich für die Verwendung in der DC16 ***und*** mit der Mini-Jetibox ?
Folgende Benutzer bedankten sich: onki

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Ladezeit der Seite: 0.321 Sekunden
Powered by Kunena Forum