Problem: Active Low Relais an Arduino Firmata

Begonnen von porkman, 31 Dezember 2014, 16:54:26

Vorheriges Thema - Nächstes Thema

porkman

Hallo liebe FHEM Gemeinde,

ich lese hier schon seit längerem mit großem Interesse mit und habe, dank der vielen guten Tipps aus den Beiträgen des Forums, FHEM auf meinem Raspi schon recht gut ans Laufen bekommen.
Nun habe ich, unter Anderem, ein 2-Fach Relais Board mit Active_Low Eingängen an einem Ethernet-Firmata-Arduino, mit welchem ich eine Außenbeleuchtung sowie über "on-for-timer" einen el. Garagentorantrieb schalten möchte. Das Umdrehen der Schaltlogik mit "attribute active_low yes" funktioniert das auch recht gut.
Ein Problem habe ich aber noch: Wenn der Firmata-Arduino neu gestartet wird, dann ziehen beim Initialisieren die Relais kurz an, bis der in FHEM  Das ist bei ner Außenbeleuchtung noch tolerierbar, wenn die mal kurz blinkt, aber beim Toröffner ist das dann weniger lustig, weil dann das Garagentor unkonditional auf, bzw (u.U. noch schlimmer) zu geht. Die Ansteuerung in FHEM hab ich z.b. so gemacht:
define mega2out_26 FRM_OUT 26
attr mega2out_26 userattr room_map structexclude
attr mega2out_26 IODev mega2
attr mega2out_26 activeLow yes
attr mega2out_26 devStateIcon off:black_Steckdose.off on:black_Steckdose.on
attr mega2out_26 group Aktoren
attr mega2out_26 room HT-Schalter
attr mega2out_26 stateFormat value


Nun hab ich gelesen das man dagegen in den "normalen" Arduino Sketches gleich zu Beginn von "void setup() {..." die betreffenden Ports auf "high" setzen soll, um dies zu vermeiden. Also hab ich das mal quick and dirty für die beiden betreffenden Ports eingebaut:
/*==============================================================================
* SETUP()
*============================================================================*/

void setup()
{
  digitalWrite(26, HIGH); // Außensteckdose
  digitalWrite(27, HIGH); // Garagentoröffner

#ifdef NETWORK_FIRMATA
#ifdef _YUN_CLIENT_H_
  Bridge.begin();
#else
...

...leider ohne Erfolg. Die beiden Relais an Port 26 und 27 flackern beim startup immer noch.
Muss ich die Relais nun auf "active_high" umtüdeln, oder hat jemand solche Teile erfolgreich laufen?
Meine SW Versionen sind wie folgt:
FHEM: fhem.pl 7097 2014-11-30 07:41:36Z rudolfkoenig
Arduino ConfigurableFirmata: V_2_06

Über konstruktive Tips würde ich mich sehr freuen!

Herzliche Grüße und guten Rutsch!
Hartmut




Wzut

dein problem steckt vermutlich in der DigitalOutputFirmata.cpp , schau dir mal den Breich um die Zeile 70 an :
if (IS_PIN_DIGITAL(pin) && mode == OUTPUT && Firmata.getPinMode(pin) != IGNORE
) {
    digitalWrite(PIN_TO_DIGITAL(pin), LOW); // disable PWM
    pinMode(PIN_TO_DIGITAL(pin), OUTPUT);
    return true;

ersetze doch da mal noch das digitalWrite(PIN_TO_DIGITAL(pin), LOW) gegen ein HIGH
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

porkman

Hallo Wzut,

danke für den Input, ich hab mal den Code wie von Dir beschrieben angepasst:
  if (IS_PIN_DIGITAL(pin) && mode == OUTPUT && Firmata.getPinMode(pin) != IGNORE) {
    // digitalWrite(PIN_TO_DIGITAL(pin), LOW); // disable PWM
    digitalWrite(PIN_TO_DIGITAL(pin), HIGH); // disable PWM
    pinMode(PIN_TO_DIGITAL(pin), OUTPUT);
    return true;
  }


...leider sind die Ports trozdem laut fhem Log ziemlich genau bis zum reconnect in low:
2014.12.31 18:51:26 1: 3031 disconnected, waiting to reappear (FRM:192.168.9.14:1025)
2014.12.31 18:51:30 3: querying Firmata Firmware Version
2014.12.31 18:51:30 3: Firmata Firmware Version: ConfigurableFirmata_wiz5100net_mega2.ino V_2_06


Herzliche Grüße
Hartmut

Nepumuk4321

Hallo,

das Thema ist ja schon etwas älter. Ich stehe jetzt aber vor dem gleichen Problem  ;D
Gibt es denn schon eine Lösung?

FHEM@RPI2, HMUSB; Keymatic;Thermostate (HM-CC-RT-DN); Rolladenaktoren(HM-LC-BI1PBU-FM); 2xConfig-Firmata@ArduinoUno mit Relaisausgängen und DS18B20;Schaltaktor(HM-LC-SW1-BA-PCB); Rauchmelder(HM-SEC-SD); ArduinoNano+ nRF24L01 MySensors;   FHEM@RPI1 als Teststation mit RF1101se@ArduinoNano.....