Aktive Hilfe gesucht für Telemetriedatenerfassung

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Moin!

      So langsam läuft mein Programm.
      Temperaturen lesen, shut sown bei Zündung aus nach Verzögerung.
      Jetzt gehe ich wieder ans Datenloggen. Da muss ich eure Vorlagen nochmals durchackern.

      Zwei Probleme habe ich noch.
      1.
      Ein Eingang der beim Programmstart High ist wird als low erkannt.
      Ist er einmal low und wieder high, wird das sauber erkannt.
      Das Problem ist wiederholbar.

      2.
      Ich kann nur A0 bis A5 auslesen.A6 bis A11 gehen nicht, es kommen keine Werte


      Wie bekomme ich das weg?
    • Moin

      Leider kann ich meinen Code nicht voll posten.
      Gibt es beim Arduino und C# sowas wie saubere und unsaubere Programiermethoden?
      Wenn ich die Feuchte als Digitaleingäge definiere kann ich auf D6/A7 Digital was messen und auf D23/ A5 wird nichts angezeit, obwohl die Pegel ankommen.
      Wenn ich beide Eingänge nicht definiere, also zum Analog einlesen, dann bekomme ich nur auf D23/A5

      Kurz
      Auf D23/A5 kann ich nur Analog lesen
      Auf D6/A7 kann ich nur Analog lesen

      Da muss doch ein Bug beim Definieren der Eingänge sein.

      Wenn ich das richtig verstanden habe muss ich für Digital E/A jeweils definieren und für Analogeinlesen nicht?
      Ich wäre so froh, wenn da jemand Licht ins Dunkel bekommen könnte.
      Ich denke ich kann Alle Eingänge Digital Lesen und Schreiben und A0-A11 auch Digital einlesen.
      Das scheint aber nicht uneingeschränkt zu funktionieren.

      Gruß Klaus

      Hier definiere ich meine Eingänge:


      Quellcode

      1. arduino.pinMode(7, Arduino.INPUT); // X5-1 Drivemode
      2. arduino.pinMode(0, Arduino.INPUT); // X5-2 noch nix
      3. arduino.pinMode(8, Arduino.INPUT); // X5-3 Tankreserve
      4. arduino.pinMode(1, Arduino.INPUT); // X5-4 Tempobegrenzung
      5. arduino.pinMode(9, Arduino.INPUT); // X5-5 Warnmeldungen
      6. arduino.pinMode(2, Arduino.INPUT); // X5-6 Zündung als Überwachung für Shut down
      7. arduino.pinMode(10, Arduino.INPUT); // X5-7 Freigabe BMS
      8. arduino.pinMode(3, Arduino.INPUT); // X5-8 Brake auf Schaltplatte
      9. // arduino.pinMode(23, Arduino.INPUT); // X2-11 Feuchte oben
      10. // arduino.pinMode(6, Arduino.INPUT); // X4-2 Feuchte unten
      11. arduino.pinMode(11, Arduino.OUTPUT); // Relais Warn
      12. arduino.pinMode(5, Arduino.OUTPUT); // Relais Zündung Reset für Start
      Alles anzeigen


      arduino.pinMode(5, Arduino.OUTPUT); // Relais Zündung Reset für Start

      Hier lese ich die Werte aus.


      Quellcode

      1. int Drivemode = arduino.digitalRead(7); // Drivemode lesen
      2. int noch_nix = arduino.digitalRead(0); // noch nix
      3. int Tankreserve = arduino.digitalRead(8); // Tankreserve lesen
      4. int Tempobegrenzung = arduino.digitalRead(1); // Tempobegrenzung lesen
      5. int Warnmeldung = arduino.digitalRead(9); // Warnmeldung lesen
      6. // int Freigabe_BMS = arduino.digitalRead(2); // Zündung lesen
      7. int Freigabe_BMS = arduino.digitalRead(10); // Freigabe_BMS lesen
      8. int Brake = arduino.digitalRead(3); // Brake lesen
      9. int Feuchte_oben = arduino.analogRead(5); // Feuchte lesen D23/A5
      10. int Feuchte_unten = arduino.analogRead(7); // Feuchte lesen D6/A7
      Alles anzeigen

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von lemminger65 ()

    • Hallo Klaus,
      ich hab mal in einem älteren Versuchsprojekt von mir nachgesehen, weil mir die Pinmode-Definitionen etwas wenig vorkamen...

      C#-Quellcode

      1. //+++++++++++++++++++++++++++++++++++++++++++++++
      2. // Arduino-Klasse
      3. static naspArduino.Arduino arduino; // bitte Kommentar am Anfang des Moduls beachten
      4. //
      5. // pin modes aus firmata.h
      6. //#define INPUT 0x00 // defined in Arduino.h
      7. //#define OUTPUT 0x01 // defined in Arduino.h
      8. //#define PIN_MODE_ANALOG 0x02 // analog pin in analogInput mode
      9. //#define PIN_MODE_PWM 0x03 // digital pin in PWM output mode
      10. //#define PIN_MODE_SERVO 0x04 // digital pin in Servo output mode
      11. //#define PIN_MODE_SHIFT 0x05 // shiftIn/shiftOut mode
      12. //#define PIN_MODE_I2C 0x06 // pin included in I2C setup
      13. //#define PIN_MODE_ONEWIRE 0x07 // pin configured for 1-wire
      14. //#define PIN_MODE_STEPPER 0x08 // pin configured for stepper motor
      15. //#define PIN_MODE_ENCODER 0x09 // pin configured for rotary encoders
      16. //#define PIN_MODE_SERIAL 0x0A // pin configured for serial communication
      17. //#define PIN_MODE_PULLUP 0x0B // enable internal pull-up resistor for pin
      18. //#define PIN_MODE_IGNORE 0x7F // pin configured to be ignored by digitalWrite and capabilityResponse
      19. //#define TOTAL_PIN_MODES 13
      20. //
      21. private const int ARDU_PINTYPE_DIGITALINPUT = 0;
      22. private const int ARDU_PINTYPE_DIGITALOUTPUT = 1;
      23. private const int ARDU_PINTYPE_ANALOGINPUT = 2;
      24. private const int ARDU_PINTYPE_ANALOGOUTPUT = 3;
      25. private const int ARDU_PINTYPE_PWM = 3;
      26. private const int ARDU_PINTYPE_SERVOOUTPUT = 4;
      27. //
      28. // Digital Pin definition
      29. private const int PIN_LUEFTER = 19;
      30. // Analog Pin definition
      31. private const int PIN_POWEROK = 0;
      32. private const int PIN_ON = 1;
      33. private const int PIN_OFF = 0;
      34. //
      35. //------------------------------------------------
      36. //+++++++++++++++++++++++++++++++++++++++++++++++
      37. // Hardware monitor Klasse
      38. // http://openhardwaremonitor.org/downloads/
      39. //
      40. public UpdateVisitor updateVisitor = new UpdateVisitor();
      41. public Computer computer = new Computer();
      42. //------------------------------------------------
      43. //+++++++++++++++++++++++++++++++++++++++++++++++
      44. //
      45. private int MaxTemp = 0;
      46. private int deltaTemp = 0;
      47. private int PowerOK = 1;
      48. private int PowerOFFcnt = 0;
      49. private string comport = "";
      50. private int Sichtbar = 0;
      51. private int PowerDown = 0;
      52. //------------------------------------------------
      53. public MainWindow()
      54. {
      55. InitializeComponent();
      56. Inilesen();
      57. this.Show();
      58. //TODO: LP bzw. COM auch da ?
      59. //+++++++++++++++++++++++++++++++++++++++++++++++
      60. //Initiate Arduino class.
      61. //string comport = Properties.Settings.Default.ArduinoCOM ;
      62. arduino = new naspArduino.Arduino(comport, 57600);
      63. // Pinbelegung : http://docs.lattepanda.com/content/hardware/inputsAndOutputs/
      64. // Wir nehmen die "Analog"-Pins, die sind alle mit dem STM32 verbunden => Schaltplan 7300-101_01:Uebersicht
      65. // A0 bis A2 liegen zudem auf den Steckern des LP die durch die Zusatzplatine nicht mehr zugänglich sind
      66. // A0 = D18 ? => Input "PowerOK"
      67. // A1 = D19 ? => Output "LuefterAn"
      68. // A2 = D20 ?
      69. arduino.pinMode(PIN_POWEROK, ARDU_PINTYPE_ANALOGINPUT); // Pin D18 as INPUT !
      70. arduino.pinMode(PIN_LUEFTER, ARDU_PINTYPE_DIGITALOUTPUT); // Pin D19 as OUTPUT !
      71. // Luefter aus
      72. wrLuefterAus(); // arduino.digitalWrite(19, 0); //
      73. // Power lesen
      74. PowerOK = rdPowerOK(); // arduino.digitalRead(18); // Read the state of pin 18 once.
      75. //------------------------------------------------
      76. (...)
      77. #region private functions
      78. private void wrLuefterAus()
      79. {
      80. arduino.digitalWrite(PIN_LUEFTER, PIN_OFF);
      81. }
      82. private void wrLuefterAn()
      83. {
      84. arduino.digitalWrite(PIN_LUEFTER, PIN_ON);
      85. }
      86. private int rdPowerOK()
      87. {
      88. // 0 = Power Off
      89. // !0 = Power On
      90. return arduino.analogRead(PIN_POWEROK);
      91. }
      92. #endregion
      93. #region control events
      94. (...)
      95. #endregion
      96. }
      97. #region helper classes
      98. (...)
      99. #endregion
      Alles anzeigen


      Es scheint also in "firmata.h" (Projekt in der Arduino-IDE) mehr als 2 Pinmodes zu geben.
      Am besten Du schaust da noch mal selber im Quellcode nach.

      Ein Teil der Kommentare bezieht sich auf meine eigene Hardware, bitte nicht bedenkenlos übernehmen.


      VG
      Lutz

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Lodin_Erikson ()

    • Danke Lutz

      Ich hab das mal eingebaut in den Code.
      Die nächsten Tage muss ich mal testen ob die Eingänge dann besser Funktionieren.

      Was aber immer noch unklar ist, dass der Lattepanda Eingänge nicht als High erkennt wenn diese permanent auf 1 sind.
      Waren die einmal nach dem Programmstart auf 0, dann wird das erkannt. Anscheinend sind die Digitaleingänge flankengetriggert?

      Gruß, Klaus