Светодиод горит даже при низком уровне digitalRead

Я просто создаю простую базовую программу, но не могу понять, что не так.

Я установил три контакта в качестве выхода и три контакта в качестве входа. Когда эти три контакта digitalRead == HIGH установят для светодиода значение HIGH, но вместо этого мой светодиод всегда будет гореть высоко.

Вот мой код Arduino:

int LED_Low = 4; // Red LED
int LED_Avg = 3; // Yellow LED
int LED_High = 2; // Green Led

int WaterLow = 7;
int WaterAvg = 8;
int WaterHigh = 9;


void setup() {
  // Put your setup code here, to run once:
  pinMode(LED_Low,  OUTPUT);
  pinMode(LED_Avg,  OUTPUT);
  pinMode(LED_High, OUTPUT);

  pinMode(WaterLow,  INPUT);
  pinMode(WaterAvg,  INPUT);
  pinMode(WaterHigh, INPUT);
}

void check(){
    if(digitalRead(WaterLow) == HIGH){ // If Water level is low
        digitalWrite(ledLow, HIGH); // Turn on red LED indication water level is low
    }
    else{
        digitalWrite(ledLow, LOW);
    }
    if(digitalRead(WaterAvg) == HIGH){ // If water level is medium
        digitalWrite(ledAvg, HIGH); // Turn on yellow LED indicating water level is average
    }
    else{
        digitalWrite(ledAvg, LOW);
    }
    if(digitalRead(WaterHigh) == HIGH){ //
        digitalWrite(ledHigh, HIGH); //
    }
    else{
        digitalWrite(ledHigh, LOW);
    }
}

void loop() {
    // Put your main code here, to run repeatedly:
    check();
}

Введите описание изображения здесь

Введите описание изображения здесь

На изображении выше я подключил светодиод к контактам 2, 3 и 4 с резистором 1,5 кОм и тремя проводами к контактам 7, 8 и 9, которые будут получать входной сигнал от контакта 5 В и включать светодиод. Соответственно, вывод 5 В подключается к положительному выводу на шине питания и с резисторами 9,1 * 2 последовательно, а затем этот провод подключается к контактам 2, 3 и 4.


person Skyyy    schedule 07.05.2015    source источник
comment
Можете ли вы опубликовать изображение вашего Arduino со всем подключенным?   -  person MikeB    schedule 07.05.2015
comment
Я обновил свой вопрос изображениями и описанием   -  person Skyyy    schedule 07.05.2015


Ответы (2)


Я нашел проблему. Мой код был в порядке. Это была моя трасса.

Контакты, которые я объявил как входные, не были подключены к земле.

person Skyyy    schedule 08.05.2015

Сделать это можно с помощью двух кейсов.

  1. Определите задержку

    if (digitalRead(WaterLow) == HIGH) // If Water level is low
    {
        digitalWrite(ledLow, HIGH); // Turn red LED indication water level is low
        delay(2000);
    }
    else
    {
        digitalWrite(ledLow, LOW);
    }
    
  2. Сделайте такое условие

    int stateled = LOW;
    int previous = LOW;
    long time = 0;
    long debounce = 200;
    
    void loop()
    {
        stateButton = digitalRead(WaterLow);
        if (stateButton == HIGH && previous == LOW && millis() - time > debounce)
        {
            if(stateLED == HIGH)
            {
                stateLED = LOW;
            }
            else
            {
                stateLED = HIGH;
            }
            time = millis();
        }
        digitalWrite(ledlow, stateLED);
        previous == stateButton;
    }
    
person Mahamutha M    schedule 07.10.2015