Arduino Library für Jeti EX Eigenbau-Telemetrie
- AlexM_1977
- Offline
- Junior Mitglied
- Beiträge: 22
- Dank erhalten: 8
AlexM_1977 antwortete auf Arduino Library für Jeti EX Eigenbau-Telemetrie
Posted 14 Mai 2016 20:33 #85
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
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
von AlexM_1977
Folgende Benutzer bedankten sich: wstech
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Sepp62
- Offline Autor
- Elite Mitglied
- Beiträge: 294
- Dank erhalten: 153
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
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
von Sepp62
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- onki
- Offline
- Platinum Mitglied
- 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
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.
Rainer aka Onki
www.onki.de
gepostet unter Verwendung von 100% recycelter Elektronen.
von onki
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Sepp62
- Offline Autor
- Elite Mitglied
- Beiträge: 294
- Dank erhalten: 153
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
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
Last Edit:28 Mai 2016 19:50
von Sepp62
Letzte Änderung: 28 Mai 2016 19:50 von Sepp62.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- onki
- Offline
- Platinum Mitglied
- Beiträge: 2286
- Dank erhalten: 791
Hallo Bernd,
ich hab das derzeit so gelöst:
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
ich hab das derzeit so gelöst:
Code:
/*
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 );
}
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.
Rainer aka Onki
www.onki.de
gepostet unter Verwendung von 100% recycelter Elektronen.
von onki
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Sepp62
- Offline Autor
- Elite Mitglied
- Beiträge: 294
- Dank erhalten: 153
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 ?
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 ?
von Sepp62
Folgende Benutzer bedankten sich: onki
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 1.092 Sekunden