Search code examples
arduinoarduino-unoled

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


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 :)


Solution

  • 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.