Светодиод должен гореть, когда «высокий». Почему мой горит только с «низким»?

led

Это мой дополнительный вопрос, основанный на серии одного проекта. Перейдите в мой профиль, чтобы прочитать все.

Итак, я создаю что-то, что включает в себя функцию, имеющую счетчик (1000), который со временем уменьшается, но при нажатии на мягкий счетчик счетчик увеличивается. При каждом шаге 200 загорается один светодиод. Итак, если количество равно 837, горят 4 светодиода.

В моем предыдущем вопросе у меня были проблемы с включением светодиодов, потому что они не горели, даже когда код был, насколько я мог видеть, правильным. Вместо этого он сделал противоположное тому, что я закодировал. Теперь я изменил свой код в противоположном направлении,

письмо:

digitalWrite(LED1, LOW); // включаем светодиод (LOW - уровень напряжения)

Что на самом деле делает светодиод ярким. Хотя я бы написал «ВЫСОКИЙ», он бы потускнел.

Итак, мой фактический вопрос: как мой светодиод может гореть, если он установлен на «низкий», в то время как вам нужно установить его на «высокий», чтобы на самом деле светился?


Мой полный код:

int cleanCount = 1000;
int IsItWorkingLED = 13;
int softpotPin = A0; //аналоговый контакт 0
int LED1 = 1;
int LED2 = 2;
int LED3 = 4;
int LED4 = 5;
int LED5 = 7;



void setup () {
    Serial.begin(9600);
    digitalWrite(softpotPin, HIGH); // включаем подтягивающий резистор
    pinMode(LED1, OUTPUT);  
    pinMode(LED2, OUTPUT);  
    pinMode(LED3, OUTPUT);  
    pinMode(LED4, OUTPUT);  
    pinMode(LED5, OUTPUT);

    digitalWrite(LED1, HIGH);   // включаем светодиод (HIGH - уровень напряжения)
    digitalWrite(LED2, HIGH);   // включаем светодиод (HIGH - уровень напряжения)
    digitalWrite(LED3, HIGH);   // включаем светодиод (HIGH - уровень напряжения)
    digitalWrite(LED4, HIGH);   // включаем светодиод (HIGH - уровень напряжения)
    digitalWrite(LED5, HIGH);   // включаем светодиод (HIGH - уровень напряжения)
}


void loop() {
    int softpotReading = analogRead(softpotPin);
    if (softpotReading < 980) { // ЕСЛИ ПРИКАСАЛСЯ
        digitalWrite(IsItWorkingLED, HIGH); 
        ++cleanCount;
        Serial.println(cleanCount);
        delay(8); // Увеличение в 5 раз быстрее
    }
    else if (softpotReading > 980) { // ЕСЛИ НЕ ПРИКАСАТЬСЯ
        digitalWrite(IsItWorkingLED, LOW); 
        --cleanCount;
        Serial.println(cleanCount);
        delay(32); // Медленное уменьшение
    }
    else {      // Если что-то не так..
        Serial.println("Something wrong!");
        digitalWrite(IsItWorkingLED, HIGH);    
        delay(250);               
        digitalWrite(IsItWorkingLED, LOW);    
        delay(250);               
    }

        if (cleanCount <= 200) {
            Serial.println("Knal 1 LED aan");
            digitalWrite(LED1, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED2, HIGH);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED3, HIGH);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED4, HIGH);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED5, HIGH);   // включаем светодиод (НИЗКИЙ уровень напряжения)
        }
        else if (cleanCount >= 201 && cleanCount <= 400) {
            Serial.println("Knal 2 LEDs aan");
            digitalWrite(LED1, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED2, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED3, HIGH);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED4, HIGH);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED5, HIGH);   // включаем светодиод (НИЗКИЙ уровень напряжения)
        }
        else if (cleanCount >= 401 && cleanCount <= 600) {
            Serial.println("Knal 3 LEDs aan");
            digitalWrite(LED1, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED2, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED3, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED4, HIGH);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED5, HIGH);   // включаем светодиод (НИЗКИЙ уровень напряжения)
        }
        else if (cleanCount >= 601 && cleanCount <= 800) {
            Serial.println("Knal 4 LEDs aan");
            digitalWrite(LED1, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED2, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED3, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED4, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(LED5, HIGH);   // включаем светодиод (НИЗКИЙ уровень напряжения)
        }
        else if (cleanCount >= 801 && cleanCount <= 1000) {
            Serial.println("Knal 5 LEDs aan");
            digitalWrite(1, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(2, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(4, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(5, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
            digitalWrite(7, LOW);   // включаем светодиод (НИЗКИЙ уровень напряжения)
        }
        else {
            Serial.println("Just..do nothing"); 
        }



}

, 👍1


3 ответа


Лучший ответ:

2

Ваше предположение о том, что для зажигания светодиода требуется высокое напряжение, неверно. Все, что вам нужно, это соответствовать определенным минимальным пороговым значениям напряжения и тока. Поскольку анод светодиода подключен высоко, способ удовлетворить эти требования заключается в том, чтобы снизить катод.

Символ светодиода

,

Я понятия не имею, что вы на самом деле имеете в виду под «анодом» и «катодом» (новичок, как вы могли догадаться), но, таким образом, установив его на «низкий», он действительно сияет. Ах хорошо. Спасибо!, @Sander Schaeffer

@SanderSchaeffer: добавлена ссылка и аннотированный символ, чтобы сделать его немного понятнее., @Ignacio Vazquez-Abrams


0

Когда вы даете команду digitalWrite LOW, вы в основном подключаете этот контакт к GND. Если вы даете команду digitalWrite HIGH, вы подключаете этот контакт к +5 В. Таким образом, в зависимости от того, как вы подключили светодиод, вы можете использовать любой из них для включения светодиода. Поскольку LOW включает ваш светодиод, длинный провод светодиода должен быть подключен к источнику питания +5 В, а короткий провод — к контакту на Arduino. Я не знаю, почему светодиод не гаснет полностью, когда вы даете команду digitalWrite HIGH, но так и должно быть.

Если вы хотите уменьшить яркость светодиодов, вам следует попробовать использовать команду AnalogWrite, которая отправит сигнал ШИМ и позволит вам сделать яркость светодиодов любой желаемой.

,

0

Светодиоду требуется, чтобы положительное напряжение шло от анода к катоду (от плюса к минусу)

Вы можете подключить его к цифровому выводу двумя разными способами. (В обоих случаях вам также понадобится токоограничивающий резистор, чтобы не сжечь светодиод и/или цифровой вывод, но не обращайте на это внимание в данном обсуждении.)

Вы можете подключить положительную клемму светодиода к +5 В, а отрицательную клемму к цифровому контакту. Похоже, это то, что вы сделали. Когда вы это сделаете, если вы установите цифровой выход на HIGH, то оба контакта светодиода будут подключены к +5 В, поэтому светодиод будет выключен. Установите выход на НИЗКИЙ, и он будет подключен к земле. Теперь ток выходит из шины +5 В через светодиод на заземленный цифровой контакт, и светодиод загорается.

Вместо этого вы можете изменить эту проводку. Подключите положительную клемму светодиода к цифровому контакту, а отрицательную — к земле. Теперь, когда вы устанавливаете контакт на ВЫСОКИЙ уровень, +5 В вытекает из контакта, через светодиод и в соединение с землей, поэтому светодиод загорается. Установите контакт на НИЗКИЙ уровень, и обе стороны светодиода будут подключены к земле, поэтому он выключится.

Изменить:

Обратите внимание, что вы говорите об уровнях напряжения и затемнении светодиодов. Если вы используете цифровые выходы и HIGH или LOW, вы можете только включать или выключать светодиод. Нет возможности изменить его яркость.

Однако вы можете подключить светодиод к выводу ШИМ (широтно-импульсной модуляции) и настроить этот вывод для аналогового вывода. В ШИМ Arduino быстро включает и выключает светодиод. Установите максимальное выходное значение, 255, и светодиод перестанет мигать и будет гореть 100% времени. Установите выход на 128, и светодиод будет гореть половину времени и выключаться половину времени. Установите выход на 64, и светодиод будет гореть 1/4 времени, выключаться 3/4 времени и т. д.

Когда вы мигаете светом достаточно быстро, наши глаза усредняют яркость, и свет, который горит 1/4 времени, выглядит на 1/4 ярче, чем свет, который горит 100 % времени.

Большинство Arduino имеют ограниченное количество аналоговых выходов. Используемая вами модель Arduino может не иметь 7 аналоговых выходов.

,