Проблемы с обработкой входящих сигналов

intervision
Offline
Зарегистрирован: 31.03.2017

Приветствую.

Возникла проблема с обработкой контроллером сигналов на пинах.

Условие весьма тривиальное:

При наличии сигнала на 1 пине выдавать напряжение на второй пин, тем самым, включая светодиод

При наличии сигнала на другом пине, соответственно включать другой светодиод.

Сигналы подаются на пины через кнопки.

Проблема:

При нажатии любой кнопки срабатывают оба светодиода одновременно.

Схема подключения тут: https://circuits.io/circuits/4500741-w-counter-test

Скетч:

int led = 13;
int hot = 7;
int cold = 5;

int getCold, getHot;
// the setup routine runs once when you press reset:
void setup() {

  pinMode(led, OUTPUT);
  pinMode(hot, INPUT);
  pinMode(cold, INPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);

}

void loop() {
getCold = digitalRead(cold);
getHot = digitalRead(hot);
  
  if (getHot == HIGH)
  	{
    	digitalWrite(9, HIGH);
    	digitalWrite(led, HIGH);
  	}
  else
 	{
        digitalWrite(9, LOW);
    	digitalWrite(led, LOW);
	}
  
  if (getCold == HIGH)
   	{
    	digitalWrite(A10, HIGH);
    	digitalWrite(led, HIGH);
    }
  else
  	{
    	digitalWrite(10, LOW);
    	digitalWrite(led, LOW);
  	}
  delay(100);
}

Что может быть не так?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. Нафига кнопки соединены вместе (чёрным проводом)? Типа, резистор экономим? Получается элемент OR, и сигнал появляется на обоих пинах при нажатии любой кнопки.

2. Что делает пин А10 в строке 34?

intervision
Offline
Зарегистрирован: 31.03.2017

1. Ага, решил сэкономить на подтягивающем резисторе, видимо, неудачно.

2. Косяк от прошлой редакции кода.

Теперь все как надо, спасибо.

intervision
Offline
Зарегистрирован: 31.03.2017

Если можно в эту тему еще вопрос:

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

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

intervision
Offline
Зарегистрирован: 31.03.2017

Про делитель, идущий после источника питания. Да, его результат планируется читать аналоговым входом для оценки уровня заряда источника.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Понятно, значит Вы не собираетесь читать его с бешенной частотой, а так типа разок в секунду и хватит. Тогда можете смело ставить делитель из двух резисторов примерно на 1Мом в сумме ну, там +/- 50% - не важно.

Если бы Вам надо было читать с максимальной возможной частотой, то там такие большие нельзя. Там надо, чтобы выходное сопротивление делителя (это почти тоже, что сопротивление резисторов делителя соединённых параллельно) было не более 10К

intervision
Offline
Зарегистрирован: 31.03.2017

Большое спасибо за помощь.