LED Won't turn off when output mode is set to LOW

1

I am making an alarm system using an ultrasonic distance sensor. It can be armed and disarmed using a remote, and I want a green led to be on when it is disarmed, and a red led to be on when it is armed. The red led works fine, but the green one stays on.

I have tried commenting out the line that turns on the green led, but it seems to be on by default, so when I start the program, it is already on and won't turn off. The code in question is near the bottom, marked by a comment that says //HERE

#include "IRremote.h"
#include "SR04.h"
#define TRIG_PIN 12
#define ECHO_PIN 11
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long distance;

int receiver = 10;
IRrecv irrecv(receiver);     // create instance of 'irrecv'
decode_results results;      // create instance of 'decode_results'

int buzzer = 3;
int red_led = 2;
int green_led = 0;

bool can_sense = false;
bool release_pressed = false;
bool alarm_off = false;
/*-----( Function )-----*/
void translateIR() // takes action based on IR code received

// describing Remote IR codes 

{

  switch(results.value)

  {
  case 0xFFA25D: Serial.println("POWER"); alarm_off = true; break;
  case 0xFFE21D: Serial.println("FUNC/STOP"); break;
  case 0xFF629D: Serial.println("VOL+"); break;
  case 0xFF22DD: Serial.println("FAST BACK");    break;
  case 0xFF02FD: Serial.println("PAUSE"); release_pressed = true;    break;
  case 0xFFC23D: Serial.println("FAST FORWARD");   break;
  case 0xFFE01F: Serial.println("DOWN");    break;
  case 0xFFA857: Serial.println("VOL-");    break;
  case 0xFF906F: Serial.println("UP");    break;
  case 0xFF9867: Serial.println("EQ");release_pressed = false;    break;
  case 0xFFB04F: Serial.println("ST/REPT");    break;
  case 0xFF6897: Serial.println("0");    break;
  case 0xFF30CF: Serial.println("1");    break;
  case 0xFF18E7: Serial.println("2");    break;
  case 0xFF7A85: Serial.println("3");    break;
  case 0xFF10EF: Serial.println("4");    break;
  case 0xFF38C7: Serial.println("5");    break;
  case 0xFF5AA5: Serial.println("6");    break;
  case 0xFF42BD: Serial.println("7");    break;
  case 0xFF4AB5: Serial.println("8");    break;
  case 0xFF52AD: Serial.println("9");    break;
  case 0xFFFFFFFF: Serial.println(" REPEAT");break;  

  default: 
    Serial.println(" other button   ");

  }// End Case

  delay(100);
}

void setup() {
   Serial.begin(9600);
   pinMode(buzzer,OUTPUT);
   pinMode(red_led,OUTPUT);
   pinMode(green_led,OUTPUT);
   irrecv.enableIRIn();


}

void loop() {

    if (irrecv.decode(&results)) // have we received an IR signal?

  {
    translateIR(); 
    irrecv.resume(); // receive the next value
  }

  distance = sr04.Distance();
  if (distance < 70)
  {
    can_sense = true;
  }

  if (can_sense==true and release_pressed==false)
  {
    while (alarm_off==false)
    {
      digitalWrite(buzzer,HIGH);
      digitalWrite(red_led,HIGH);
      delay(500);
      digitalWrite(buzzer,LOW);
      digitalWrite(red_led,LOW);
      delay(250);

    if (irrecv.decode(&results)) // have we received an IR signal?

  {
    translateIR(); 
    irrecv.resume(); // receive the next value
  }
    }
  }
  if (release_pressed==false) //HERE
  {
    digitalWrite(red_led,HIGH);
    digitalWrite(green_led,LOW); // This should turn off the green led, but it doesn't
  }

  if (release_pressed==true)
  {
    digitalWrite(red_led,LOW);
    digitalWrite(green_led,HIGH);
  }

  alarm_off = false;
  can_sense = false;
}

Thanks for any help :)

arduino
arduino-uno
led
asked on Stack Overflow Aug 6, 2019 by ArduinoBobby • edited Aug 6, 2019 by ArduinoBobby

1 Answer

0

Pins 0 and 1 on an Uno are used for serial communication.

As soon as you did Serial.begin(9600);, you enabled those pins for serial comms, so you can't also use them as standard digital pins.

Simply use another pin for your green LED.

answered on Stack Overflow Aug 6, 2019 by stevieb

User contributions licensed under CC BY-SA 3.0