Anzeige 
Seite 3 von 13 ErsteErste 123456789101112 ... LetzteLetzte
Ergebnis 31 bis 45 von 191

Thema: Einfache Jeti EX Telemetrie-Library für Arduino Mini Pro 328

  1. #31
    User
    Registriert seit
    16.07.2006
    Ort
    St. Gallen, Schweiz
    Beiträge
    47
    Daumen erhalten
    2
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard Jeti Expander Eigenbau

    Ach ja, da ich noch einige Nicht-REX Empfänger und ein Unilog besitze, wäre ich daran auch interessiert.

    Hier gibt's eine längere Abhandlung zu diesem Thema (Erklärung des Expanders ganz unten im Artikel):
    http://j-log.eu/jlog-in-funktion/tel...eti-v1-und-ex/

    Gruss, Wolfgang
    Wolfgang Korosec
    Like it!

  2. #32
    User
    Registriert seit
    30.10.2014
    Ort
    -
    Beiträge
    98
    Daumen erhalten
    10
    Daumen vergeben
    18
    0 Nicht erlaubt!

    Standard

    Hallo Wolfgang,

    du hast den Konstruktor des Demosensors Klasse zitiert, in der die Membervariablen initialisiert werden. Der memset-Aufruf schreibt "0" in die Timerwerte. Du kannst genauso alle Membervariablen im Konstruktor einzeln hinschreiben per "=" mit einem Wert versehen. Die for-Schleife verpasst allen Variablen einen andern Startwert. Der memset-Befehl ist außerhalb der Schleife, da bei C/C++ ohne geschweifte Klammer nur eine Zeile in einen Block kommt.

    Deine GetTemp-Funktion sieht so ganz gut aus (sofern tiTemp und temp als Membervariablen der Klasse deklariert sind).

    Du kannst es auch so machen:

    long DemoSensor::GetTemp()
    {
    if( ( tiTemp + 4000 ) <= millis() )
    {
    tiTemp = millis(); // ti = Timestamp ?
    return GetIRSensorTemp();
    }
    return -1;
    }

    Wenn ein Sensor ein Wert von -1 hat, überträgt ihn die Library nicht, d.h. Du sparst Dir den "Sendeslot" für diesen Wert und kannst in der Zeit andere Werte übertragen.

    Grüße
    Bernd
    Like it!

  3. #33
    User
    Registriert seit
    16.07.2006
    Ort
    St. Gallen, Schweiz
    Beiträge
    47
    Daumen erhalten
    2
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    Hallo Bernd,
    die DS18S20 Temp Sensoren funktionieren jetzt mal mit der DallasTemperature Library:

    Code:
    Sensors.h:
    
    #include <DallasTemperature.h>
    
    class Sensor
    {
    public:
      Sensor();
    
      long GetTempDS1();
      
    private:
      OneWire oneWire;
      DallasTemperature DSsensors;
    ....
    
    Sensors.ccp:
    
    Sensor::Sensor() : oneWire(ONE_WIRE_BUS), DSsensors(&oneWire), tempIR1(1), tempIR2(2),tempDS1(3)  {
    
      timeStampIRsensor1 = 0;
      timeStampIRsensor2 = 0;
      timeStampDSsensor1 = 0;
      
      // Dallas temperature sensors connected to OneWire Bus
      DeviceAddress tempDeviceAddress;
      DSsensors.begin();
      DSsensors.getAddress(tempDeviceAddress, 0);
      DSsensors.setResolution(tempDeviceAddress, 10);
      DSsensors.setWaitForConversion(false);
      DSsensors.requestTemperatures();
    
      // Texas Instruments TMP007 IR Sensor connected to the I2C bus
    
    }
    
    ...
    
    long Sensor::GetTempDS1()
    {
      if ((timeStampDSsensor1 + delayDSsensor) <= millis() )
      {
        timeStampDSsensor1 = millis();
        DSsensors.requestTemperatures(); 
        tempDS1 = (DSsensors.getTempCByIndex(0));
      } 
      return tempDS1;
    }
    die Library für den IR Sensor wehrt sich (noch) ...

    https://github.com/adafruit/Adafruit_TMP007_Library

    Das Beispiel funktionert, aber den Einbau in die Sensor Klasse hab ich noch nicht geschafft...

    Gruss & Dank,
    Wolfgang
    Wolfgang Korosec
    Like it!

  4. #34
    User
    Registriert seit
    30.10.2014
    Ort
    -
    Beiträge
    98
    Daumen erhalten
    10
    Daumen vergeben
    18
    0 Nicht erlaubt!

    Standard

    Hallo Wolfgang,

    lass' die Sensorklasse doch einfach weg. Die ist wirklich nur dafür gemacht, dass sich "out of the box" Zahlen auf dem Sender-Display ändern und der essentielle Teil des Codes ("SetSensorValue") lesbar bleibt. Sie enthält zuviel Kram, den man für andere Zecke nicht braucht.

    Einfacher ist es, wenn Du den Code so baust, dass es eine "Get"-Funktion oder eine Variable mit dem aktuellen Sensorwert gibt.

    Die Funktion oder die Variable setzt Du einfach in der Hautptschleife in die "SetSensorValue"-Funktion ein.

    Also so (hier mit Variable, die natürlich an anderer Stelle deklariert und befüllt werden muss): jetiEx.SetSensorValue( ID_TEMP, myTempSensorValue );


    Grüße
    Bernd
    Like it!

  5. #35
    User
    Registriert seit
    30.10.2014
    Ort
    -
    Beiträge
    98
    Daumen erhalten
    10
    Daumen vergeben
    18
    0 Nicht erlaubt!

    Standard

    Noch ein genereller Hinweis zur Initialisierung von Klassen/Variablen:

    Wenn man Klassen statisch verwendet, d.h. wenn sie außerhalb der setup() oder loop()-Funktion (oder untergeordneten Funktionen/Methoden) stehen, ist die Reihenfolge der Konstruktor-Aufrufe nicht definiert. Bei Deinem Dallas-Sensor ist alles in Ordnung, da die Sensor-Klasse von der Dallas-Sensor-Klasse abgeleitet ist.

    Wäre der Dallas-Sensor eine eigene Klasse und er würde "neben" der Sensor-Klasse stehen, wäre es nicht klar, welcher Konstruktor zuerst aufgerufen wird. Dies ist generell zu beachten, wenn Libraries/Klassen verwendet werden. Ein Heilmittel ist, dass man die Initialisierung nicht in den Konstruktor steckt, sondern eine eigene "Init"-Funktion schreibt, die dann aus setup() heraus in der gewünschten Reihenfolge aufgerufen wird.

    Grüße
    Bernd
    Like it!

  6. #36
    User
    Registriert seit
    16.07.2006
    Ort
    St. Gallen, Schweiz
    Beiträge
    47
    Daumen erhalten
    2
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    Hallo Bernd,
    ein einfaches ".ino-only" Beispiel für Deine Library wäre echt super. Ich denke, die Mehrheit der Arduinoprogrammierer hätte grosse Freude daran

    Viele Grüsse & herzlichen Dank für Deine Hilfe
    Wolfgang
    Wolfgang Korosec
    Like it!

  7. #37
    User
    Registriert seit
    30.10.2014
    Ort
    -
    Beiträge
    98
    Daumen erhalten
    10
    Daumen vergeben
    18
    0 Nicht erlaubt!

    Standard

    Ich habe hier nochmals alles weggenommen, was man wegnehmen kann.

    Die Werte werden konstant belegt, die Funktion GetSensorValues() muss also so modifiziert werden, dass die eigenen Sensorwerte in die Variablen geschrieben werden. Die Nachkommastellen werden durch das Precision-Attribut in der Sensortabelle bestimmt.

    Code:
    /* 
      Jeti EX Sensor Simple Demo
    **************************************************************/
    
    #include "JetiExProtocol.h"
    
    JetiExProtocol jetiEx;
    
    enum
    {
      ID_VOLTAGE = 1,
      ID_ALTITUDE,
      ID_TEMP,
    };
    
    long myVoltage = 0;
    long myAltitude = 0;
    long myTemp = 0; 
    
    JETISENSOR_PTR sensors[] = 
    {
      //              id             name        unit         data type             precision = 0 --> 0, precision = 1 --> 0.0, precision = 2 --> 0.00
      new JetiSensor( ID_VOLTAGE,    "Voltage",  "V",         JetiSensor::TYPE_14b, 1 ),
      new JetiSensor( ID_ALTITUDE,   "Altitude", "m",         JetiSensor::TYPE_14b, 0 ),
      new JetiSensor( ID_TEMP,       "Temp",     "\xB0\x43",  JetiSensor::TYPE_14b, 1 ), // �C
      0 // end of array
    };
    
    void setup()
    {
      jetiEx.Start( "MySensor", sensors );
    }
    
    void loop()
    {
      GetSensorValues();
      
      jetiEx.SetSensorValue( ID_VOLTAGE,  myVoltage );
      jetiEx.SetSensorValue( ID_ALTITUDE, myAltitude );
      jetiEx.SetSensorValue( ID_TEMP,     myTemp ); 
    
      jetiEx.DoJetiSend(); 
    }
    
    void GetSensorValues()
    {
       myVoltage = 74;    // 7.4V 
       myAltitude = 120;  // 120 m
       myTemp = 315; 	  // 31.5 Grad Celsius	
    }
    Like it!

  8. #38
    User
    Registriert seit
    16.07.2006
    Ort
    St. Gallen, Schweiz
    Beiträge
    47
    Daumen erhalten
    2
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    Hallo Bernd,
    SUPER , vielen Dank !

    Das ist für einfache Anwendungen und für Entwickler, die nicht so mit der objektorientierte Programmierung a la Arduino vertraut sind, ein grosser Segen !!!

    Herzliche Grüsse,
    Wolfgang
    Wolfgang Korosec
    Like it!

  9. #39
    User
    Registriert seit
    30.10.2014
    Ort
    -
    Beiträge
    98
    Daumen erhalten
    10
    Daumen vergeben
    18
    0 Nicht erlaubt!

    Standard

    Es gibt eine neue Version der Library (V0.96) mit ein paar kleinen Verbesserungen:

    1. Für den Teensy kann man optional die ComPort-Nummer (Serial1...3) angeben. So muss man bei unterschiedlichen Verdrahtungen nicht mehr die Library anpassen.

    2. Auch die DeviceID des Sensors kann man nun "von außen" setzen. Hängt man mehr als einen Sensor (im Sinne eines Arduino oder Teensy) an einen Jeti-Empfänger, kann man nun unterschiedliche IDs vergeben. Verwendet man eine Droidbox, so ist es sinnvoll pro Sensor und Modell eine unterschiedliche ID zu vergeben.

    3. In den Beispielen findet sich ein auf das Allerwesentlichste reduzierter Sketch.
    Like it!

  10. #40
    User
    Registriert seit
    09.08.2005
    Ort
    Bad Wildbad
    Beiträge
    6.308
    Daumen erhalten
    255
    Daumen vergeben
    28
    0 Nicht erlaubt!

    Standard

    Hallo,

    das miese Wetter heute und die Tatsache, das ich zu meiner einzigen Aufgabe derzeit (Rumpf vorschleifen zum Lackieren) keine Lust hatte, hat mich dazu bewogen, mal etwas mit dem Teensy und dem Stromsensor zu experimentieren.
    Ich verwende als Stromsensor dieses Teil hier:
    http://www.amazon.de/gp/product/B011...ilpage_o02_s00

    Den Spannungseingang hab ich an A0, den Stromeingang an A1 angeschlossen.
    Nach etwas Experimentieren mit den Multiplikatoren hab ich nun diese erste Lösung zur Messwerterfassung mit Ausgabe an die ser. Konsole:

    Code:
    void setup()
    {                
      Serial.begin(38400);
    }
    
    float vcode;
    float acode;
    float Volt;
    float Strom;
    float Kapazitaet;
    
    void loop()                     
    {
      analogReadRes(12);
      vcode = analogRead(A0);
      acode = analogRead(A1);
      Volt = (vcode / 123);
      Strom = (acode / 67.5);
      Kapazitaet = Kapazitaet + (Strom / 14400);
      Serial.print(" Spannung: ");
      Serial.print(Volt);
      Serial.print(" Volt, ");
      Serial.print(" Strom: ");
      Serial.print(Strom);
      Serial.print(" Ampere ;");
      Serial.print(" verbrauchte Kapazitaet: ");
      Serial.print(Kapazitaet);
      Serial.print(" Ah ");
      Serial.println();
      
      
      delay(250);
    }
    Das funktioniert soweit, zumindest sind die ausgegebenen Messwerte mit den Messwerten am Multimeter vergleichbar.
    Nächster Schritt ist nun den zuvor geposteten. Jeti-Beispielcode zum laufen zu bekommen und statt der Festwerte meine Messwerterfassung einzubauen.
    Ich hoffe das bekomme ich noch hin.
    Ich verzweifel noch an der Syntax. Ich werd das mit dem Semikolon am Zeilenende nie kapieren.

    Gruß
    Onki
    Gruß aus dem Nordschwarzwald
    Rainer aka Onki
    Meine Homepage
    Like it!

  11. #41
    User
    Registriert seit
    09.08.2005
    Ort
    Bad Wildbad
    Beiträge
    6.308
    Daumen erhalten
    255
    Daumen vergeben
    28
    0 Nicht erlaubt!

    Standard

    Hallo,

    ich hab nochmal versucht das Beispielprogramm mit meinem Teensy ans Laufen zu bekommen.
    Es wird ohne Murren kompiliert und übertragen, wenn ich allerdings die Telemetrie mit meinen Schülersender und mini-Jetibox ansehen möchte (also die gecodeten Werte), klappt das nicht. Es kommt rein gar nix auf dem Display.
    Muss ich da noch eine andere Schnistelle auswählen wegen des Teensy oder was mach ich falsch?
    Ich hab RX2/TX2 am Teensy im Einsatz (Pin 9/10).
    Die vorrige C-Geschichte hat mir die Demowerte angezeigt.
    Sorry aber ich bin mit dem Teensy und Arduino noch nicht so ganz vertraut. Ich hab aber noch nicht die aktuelle Library 0.96 im Einsatz.

    Gruß
    Onki
    Gruß aus dem Nordschwarzwald
    Rainer aka Onki
    Meine Homepage
    Like it!

  12. #42
    User
    Registriert seit
    30.10.2014
    Ort
    -
    Beiträge
    98
    Daumen erhalten
    10
    Daumen vergeben
    18
    0 Nicht erlaubt!

    Standard

    Hallo Onki,

    Pin 10 passt schon mal. Das ist "Serial2" und das ist auch der Default, wenn Du nichts anderes einstellst. Pin 9 kannst Du erst Mal weglassen. Auch mit einer älteren Library muss es gehen (die dürften sogar besser getestet sein).

    Mit der Jeti-Mini-Box habe ich allerdings weder Tests gemacht, noch irgendwelche Erfahrungen. Ich teste das Ganze immer an der DS16. Vielleicht gibt es hier Unterschiede.

    Am Besten wäre es, Du könntest es mal mit einer DS/DC/14/16 testen, dann ist das Problem wenigstens mal eingegrenzt.

    Viele Grüße
    Bernd
    Like it!

  13. #43
    User
    Registriert seit
    09.08.2005
    Ort
    Bad Wildbad
    Beiträge
    6.308
    Daumen erhalten
    255
    Daumen vergeben
    28
    0 Nicht erlaubt!

    Standard

    Hallo Bernd,

    ich werd das am Abend nochmal mit meiner DC-16 ausprobieren, obwohl die TM-Lösung eigentlich für meine mc22s mit TU-Modul und mini-Box gedacht ist (im Böötchen).
    Werde mich dann nochmal mit den Ergebnissen (auch mit der neuen Libary) melden.

    Gruß
    Onki
    Gruß aus dem Nordschwarzwald
    Rainer aka Onki
    Meine Homepage
    Like it!

  14. #44
    User
    Registriert seit
    30.10.2014
    Ort
    -
    Beiträge
    98
    Daumen erhalten
    10
    Daumen vergeben
    18
    0 Nicht erlaubt!

    Standard

    Hallo Onki,

    hast Du denn an Deinem Schülersender mit der Jetibox mini schon mal einen anderen Sensor (z.B. MUI) über das EX-Protokoll zum Laufen gebracht ?

    Du hast geschrieben, dass die "C-Lösung" auf der Jetibox-Mini schon mal Daten angezeigt hat. Könnte es nicht sein, dass damit nur das Text-Display übertragen wurde (also das "Non-EX-Protokoll", der zweizeilige Text-Vorläufer von "EX", der auch als "Konfigurationsoberfläche" dient) ?

    Wenn dem so ist, bekommt man das mit der C++-Library prinzipiell schon auch hin (ggf. eben mit ein paar Anpassungen). D.h. wenn Du das mit Deiner DC-16 eingrenzst, hilft es bei der weiteren Lösung.

    Grüße
    Bernd
    Like it!

  15. #45
    User
    Registriert seit
    09.08.2005
    Ort
    Bad Wildbad
    Beiträge
    6.308
    Daumen erhalten
    255
    Daumen vergeben
    28
    0 Nicht erlaubt!

    Standard

    Hallo Bernd,

    ich hab leider keinen einzigen Jeti-Sensor, weil ich persönlich die bescheuert finde (die können immer nur eine Größe ermitteln).
    Ich stehe mehr auf UniSens-E, GPS-Logger 2 und LinkVario, weil das die Schweizer Taschenmesser der Telemetrie sind und nicht nur ein Hackebeil.
    Zuvor hatte ich mit dem UniSense-E die TM-Anzeige an der Minibox. Die würde mir für die Stromsensor-Lösung auch reichen, ich probiere das mit der DC-16 aber auf jeden Fall auch mal aus.

    Gruß
    Onki
    Gruß aus dem Nordschwarzwald
    Rainer aka Onki
    Meine Homepage
    Like it!

Ähnliche Themen

  1. PWM-Library für Arduino-Basis für Beleuchtung und Servoansteuerung (Open Source)
    Von Sepp62 im Forum Mikrocontroller - Programmierung und Eigenentwicklungen
    Antworten: 55
    Letzter Beitrag: 10.03.2019, 15:36
  2. Antworten: 42
    Letzter Beitrag: 20.07.2018, 14:36
  3. GPS mit Arduino Pro Mini?
    Von Rollfeldraser im Forum Multicopter
    Antworten: 5
    Letzter Beitrag: 20.11.2011, 16:57

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •