Arduino Library für Jeti EX Eigenbau-Telemetrie
- AlexM_1977
-
- Offline
- Junior Member
-
- Posts: 22
- Thank you received: 8
TPL_KUNENA_MESSAGE_REPLIED_NEW Arduino Library für Jeti EX Eigenbau-Telemetrie
14 May 2016 18:33
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
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
The following user(s) said Thank You: wstech
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
27 May 2016 11:36
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
Please Log in or Create an account to join the conversation.
- onki
-
- Offline
- Platinum Member
-
- Posts: 2286
- Thank you received: 791
TPL_KUNENA_MESSAGE_REPLIED_NEW Arduino Library für Jeti EX Eigenbau-Telemetrie
28 May 2016 07:43
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.
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
28 May 2016 17:49 - 28 May 2016 17:50
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 May 2016 17:50 by Sepp62.
Please Log in or Create an account to join the conversation.
- onki
-
- Offline
- Platinum Member
-
- Posts: 2286
- Thank you received: 791
TPL_KUNENA_MESSAGE_REPLIED_NEW Arduino Library für Jeti EX Eigenbau-Telemetrie
29 May 2016 14:48
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.
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
29 May 2016 16:16
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 ?
The following user(s) said Thank You: onki
Please Log in or Create an account to join the conversation.
Time to create page: 0.372 seconds