digital PIN nach Start auf high [gelöst]

Hallo Gemeinde,

ich möchte mit einem nano eine relais karte schalten. diese sind aber leider low aktiv.

http://www.ebay.de/itm/1-Kanal-5V-Relay-Relais-Module-Modul-Kupplung-fur-Arduino-PIC-AVR-DSP-ARM-MSP430-/271793521309?hash=item3f4828029d:g:-koAAOSwGIRXZDRT

über einen taster soll das relais ein u ausgeschaltet werden.

der sketch an sich funktioniert ordnungsgemäß.

was muss ich in den sketch eingeben, damit ein digital pin (hier 6) nach dem start auf high geht u erst nach dem drücken des tasters auf low?

const int switchPin = 2;
const int ledPin = 6;

int state;
int lastState;
int ledState;

void setup() 
{
  pinMode(ledPin, OUTPUT);
  pinMode(switchPin, INPUT);

  Serial.begin(9600);
}

void loop() 
{
  state = digitalRead(switchPin);

  if (state != lastState) 
  {
    if (state == HIGH) 
    {
      if (ledState == LOW) 
      {
        ledState = HIGH;
        Serial.println("RELAIS AUS");
      }
      else
      {
        ledState = LOW;
        Serial.println("RELAIS EIN");
      }
    }
    lastState = state;
  }
   digitalWrite(ledPin, ledState);
  delay(20);
}

Gruß

// erst 
digitalWrite(ledpin,1); 

//dann 
pinMode(ledPin, OUTPUT);

Vielleicht auch noch einen zusätzlichen Pullup

sorry, was meinste mit erst... dann )

Hallo Garagenloeter,

es wäre vernünftig eine vollständige Initialisierung in setup() vorzunehmen. das heisst:

lastState = HIGH;
ledState = HIGH;
digitalWrite(ledPin,HIGH);

Der Eingang auf Pin2 sollte unbedingt einen PullUp-Widerstand haben. Ich bin jetzt nicht sicher, ob der Nano den Befehl pinMode(switchPin,INPUT_PULLUP) unterstützt. Wenn nicht, muss du selbst einen Widerstand gegen Plus einbauen. Der Taster wird dann gegen Masse geschaltet und ist dann ebenfalls mit LOW aktiv.

Gruss
René

garagenloeter: sorry, was meinste mit erst... dann )

Heißt die gezeigte Reihenfolge einhalten. ;)

Reihenfolge hab ich zwichendurch gemacht. leider ohne erfolg. keine änderung. relais schaltet beim start durch.

dann das probiert:

lastState = HIGH; ledState = HIGH; digitalWrite(ledPin,HIGH);

nun wird der taster nicht mehr abgefragt.

der widerstand ist ein pull down mit 1k5.

garagenloeter: Reihenfolge hab ich zwichendurch gemacht. leider ohne erfolg. keine änderung. relais schaltet beim start durch.

dann das probiert:

lastState = HIGH; ledState = HIGH; digitalWrite(ledPin,HIGH);

nun wird der taster nicht mehr abgefragt.

der widerstand ist ein pull down mit 1k5.

Dann ist etwas an der Schaltung falsch.

Zeig doch mal ein Schaltbild und den aktuellen Sketch. Evtl. ist ja jetzt bedingt durch die "if-Anweisung" auch etwas falsch.

evtl. so

const int switchPin = 2;
const int ledPin = 6;

int state;
int lastState;
int ledState;

void setup()
{
  pinMode(ledPin, OUTPUT);
  pinMode(switchPin, INPUT);
  digitalWrite(ledPin, HIGH);


  Serial.begin(9600);
}

void loop()
{
  state = digitalRead(switchPin);

  if (state != lastState)
  {
    if (state == HIGH)
    {
      if (ledState == LOW)
      {
        ledState = HIGH;
        Serial.println("RELAIS AUS");
      }
      else
      {
        ledState = LOW;
        Serial.println("RELAIS EIN");
      }
    }
    lastState = state;
  }
   digitalWrite(ledPin, ledState);
  delay(20);
}

ne ne, schaltung ist ok.

ich hab noch eine zeile ausdokumentiert, dann lief es...

super... danke.

funktioniert aber nun... :)

const int switchPin = 2;
const int ledPin = 6;

int state;
int lastState=HIGH;
int ledState=HIGH;
//digitalWrite(ledPin,HIGH);

void setup() 
{
  pinMode(ledPin, OUTPUT);
  pinMode(switchPin, INPUT);

  Serial.begin(9600);
}

void loop() 
{
  state = digitalRead(switchPin);

  if (state != lastState) 
  {
    if (state == HIGH) 
    {
      if (ledState == LOW) 
      {
        ledState = HIGH;
        Serial.println("RELAIS AUS");
      }
      else
      {
        ledState = LOW;
        Serial.println("RELAIS EIN");
      }
    }
    lastState = state;
  }

  digitalWrite(ledPin, ledState);
  delay(20);
}

den sketch von ardubu schau ich mir gleich auch noch an. war quasie zeitgleich.

void setup() { pinMode(ledPin, OUTPUT); // schaltet deinen Pin auf Low, Relais macht klack pinMode(switchPin, INPUT);

Serial.begin(9600); }

void setup() 
{
  digitalWrite(ledPin,HIGH); // Schaltet Pin auf High / Pullup ein
  pinMode(ledPin, OUTPUT); // Pin sofort High, ohne jedes Klack
  pinMode(switchPin, INPUT);

  Serial.begin(9600);
}

danke combie, nun ist noch besser.

dann hab ich "digitalWrite(ledPin,HIGH);" nur an falscher stelle geschrieben.