Не горит светодиод

WindPl
Offline
Зарегистрирован: 29.12.2017

Сделал простенький датчик температуры для дома с 3 светодиодами и пищалкой. Работал недели 2, а потом синий светодиод перестал гореть (он горит кагда температура ниже 30 градусов). При прикосновении пальцем к резистору светодиод горит.

#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(9);
DallasTemperature ds(&oneWire);
void setup() {
  Serial.begin(9600);
ds.begin();
}
void loop() {
ds.requestTemperatures();                      //Получение температуры
delay(760);                                    //Задержка для получения температуры
int temp = ds.getTempCByIndex(0);              //Присваиваем переменной temp температуру
Serial.print("||" + temp);                     //Выводим в монитор порта температуру (и разделительные знаки)
if(temp < 30 && temp > -126){                  //Если температура ниже 30 И больше -126(У меня просто часто коротило на -127)
tone(8, 200, 10000);                           //Включаем пищалку на 10 секунд
}
if(temp < 31)                                  //Если температура ниже 31, то:
{
digitalWrite(4, HIGH);
digitalWrite(3, LOW);                          //Включаем синий светодиод
digitalWrite(2, LOW);                          //Отключаем остальные
}
if(temp > 30 && temp < 35)                     //Если температура выше 30 и ниже 35, то:
{
digitalWrite(4, LOW);
digitalWrite(2,LOW);                           //Включаем зелёный светодиод
digitalWrite(3, HIGH);                         //Отключаем остальные
}
if (temp > 35)                                 //Если температура выше 35, то:
{
digitalWrite(2, HIGH);      
digitalWrite(3, LOW);                          //Включаем красный светодиод
digitalWrite(4, LOW);                          //Отключаем остальные
}
}

Подскажите непросветлённому, что это за напасть такая?

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

11 строка - не нужна - она останавливает контроллер - и он ничего не будет делать - в том числе и не будет выполнять библиотеки...

и еще - может дело не в коде а в плохой пайке? или браке деталей (микро трещина на резисторе)

bwn
Offline
Зарегистрирован: 25.08.2014

Копайте свою пайку, комментарий в 14 строке очень показательный. В Dallas Temperature задержка встроена в библиотеку дублирование делаями не нужно.

WindPl
Offline
Зарегистрирован: 29.12.2017

У меня всё на макетной плате(макетная плата в порядке), из пайки только припаян датчик температуры к проводам(а в серийном порте температура правильная).

А резисторы уже менял.

bwn
Offline
Зарегистрирован: 25.08.2014

Скорее всего контакт в макетке поганый, сами подумайте, если пин настроен в OUTPUT и на низкоомную нагрузку, что вы там пальцем можете изменить?

WindPl
Offline
Зарегистрирован: 29.12.2017

Я их напрямую пытался подключить(без макетной платы), не помогло.

Также не обязательно к резистору, можно ко всему что до светодиода идёт дотронуться.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Без pinMode(4, OUTPUT); вот эта "фиговина" digitalWrite(4, HIGH); включает резистор привязки.

И светодиод светился как раз от него.
Ну и "палец" ловил по той же причине.
Потому-что это - ВХОД!!!

WindPl
Offline
Зарегистрирован: 29.12.2017

Помогло, Спасибо

Алексей Н
Offline
Зарегистрирован: 02.01.2016

trembo пишет:
Без pinMode(4, OUTPUT); вот эта "фиговина" digitalWrite(4, HIGH); включает резистор привязки. И светодиод светился как раз от него. Ну и "палец" ловил по той же причине. Потому-что это - ВХОД!!!

 

А с остальными почему не было такого же "симптома"?

bwn
Offline
Зарегистрирован: 25.08.2014

trembo пишет:
Без pinMode(4, OUTPUT); вот эта "фиговина" digitalWrite(4, HIGH); включает резистор привязки. И светодиод светился как раз от него. Ну и "палец" ловил по той же причине. Потому-что это - ВХОД!!!

Ты,гений! Вот нахрена в Setup смотреть? А я лошара старая.(((((