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ß
combie
June 27, 2016, 7:50pm
2
// erst
digitalWrite(ledpin,1);
//dann
pinMode(ledPin, OUTPUT);
Vielleicht auch noch einen zusätzlichen Pullup
sorry, was meinste mit erst... dann )
ReneL
June 27, 2016, 8:07pm
4
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.
ardubu
June 27, 2016, 8:36pm
8
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.
combie
June 27, 2016, 10:34pm
10
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.