mikedb
December 5, 2020, 8:34am
1
Hi
I use a 10k resistor pull-up to 5V on Pin D2 this is my input pin.
My output pin goes to a LED with a 1K resistor.
If I GND the input pin I read 0V on Pin D2 and 5.06V when the GND is removed.
The LED just stays on..what am I missing?
int lockOpenPin = 2;
int armLedPin = 11;
void setup()
{
pinMode (lockOpenPin, INPUT);
pinMode (armLedPin, OUTPUT);
digitalWrite(armLedPin, HIGH);//Test LED OK.
delay(1000);
digitalWrite(armLedPin, LOW);
delay(1000);
}
void loop()
{
if (digitalRead (lockOpenPin == HIGH))
{
digitalWrite(armLedPin, HIGH);
}
if (digitalRead (lockOpenPin == LOW))
{
digitalWrite(armLedPin, LOW);
}
}
mikedb:
Hi
I use a 10k resistor pull-up to 5V on Pin D2 this is my input pin.
My output pin goes to a LED with a 1K resistor.
If I GND the input pin I read 0V on Pin D2 and 5.06V when the GND is removed.
The LED just stays on..what am I missing?
int lockOpenPin = 2;
int armLedPin = 11;
void setup()
{
pinMode (lockOpenPin, INPUT);
pinMode (armLedPin, OUTPUT);
digitalWrite(armLedPin, HIGH);//Test LED OK.
delay(1000);
digitalWrite(armLedPin, LOW);
delay(1000);
}
void loop()
{
if (digitalRead (lockOpenPin == HIGH))
{
digitalWrite(armLedPin, HIGH);
}
if (digitalRead (lockOpenPin == LOW))
{
digitalWrite(armLedPin, LOW);
}
}
First of all, where is the other ledpin go? (Vcc or GND?)
Robin2
December 5, 2020, 8:52am
3
In this code
void loop()
{
if (digitalRead (lockOpenPin == HIGH))
{
digitalWrite(armLedPin, HIGH);
}
if (digitalRead (lockOpenPin == LOW))
{
digitalWrite(armLedPin, LOW);
}
}
the lines like this are wrong
if (digitalRead (lockOpenPin == HIGH))
they should be
if (digitalRead (lockOpenPin) == HIGH)
Also you are doing two digitalRead()s which could return different values. Much better to do it like this
void loop()
{
lockOpenState = digitalRead(lockOpenPin) {
if (lockOpenState == HIGH))
{
digitalWrite(armLedPin, HIGH);
}
else
{
digitalWrite(armLedPin, LOW);
}
}
...R
mikedb
December 5, 2020, 9:13am
4
The LED other pin goes to GND.
In my code I have a 1sec pulse LED in the setup part to test if the LED is working and it lights up for 1sec.
Robin2:
Thanks made the change to my code and the LED is now switching on/off when the input is HIGH or LOW.
This works!!..Thanks
if (digitalRead (lockOpenPin) == HIGH)
This is simpler if you don't need to use the state of the input anywhere else in the program
void loop()
{
digitalWrite(armLedPin, digitalRead(lockOpenPin));
}
void loop()
{
if (digitalRead (lockOpenPin) == HIGH)
{
digitalWrite(armLedPin, HIGH);
}
else
{
digitalWrite(armLedPin, LOW);
}
}
or, shorter by using the 'ternary' operator (?:):
void loop()
{
digitalWrite(armLedPin, (digitalRead (lockOpenPin) == HIGH) ? HIGH : LOW);
}
Even shorter on the 99% of Arduinos where HIGH==1==true and LOW==0==false:
void loop()
{
digitalWrite(armLedPin, digitalRead (lockOpenPin));
}
johnwasser:
Even shorter on the 99% of Arduinos where HIGH==1==true and LOW==0==false:
void loop()
{
digitalWrite(armLedPin, digitalRead (lockOpenPin));
}
I don't understand your comment - digitalRead returns HIGH or LOW, not true or false.
TheMemberFormerlyKnownAsAWOL:
I don't understand your comment - digitalRead returns HIGH or LOW, not true or false.
You're right, the third example works on every Arduino because digitalRead() returns HIGH or LOW and digitalWrite() takes an argument of HIGH or LOW. It doesn't matter at all how HIGH and LOW are defined.