Так и не получается заставить работать регистр так как мне надо
Как должна работать программа:
У ардуино на входах (Can1...Can6) постоянно подается высокий сигнал
Когда на всех каналах +5 - на выходах регистра 0
Когда на каком-либо канале 0 - на соответствующем выходе регистра +5
Все работает но не так как бы хотелось:
Изначально на всех каналах +5 и на выходах регистра 0 (все верно)
На первом канале падение на 0 - на соответствующем выходе регистра +5 (верно)
Но потом действует +5 на соответствующем выходе регистра не прекращается до падения на другом канале
Пробовал писать, все так же без изменений
Код: Выделить всё
else
{
digitalWrite(latchPin, LOW);
}
Что, где упустил?
[code]
int Can1 = 22;
int Can2 = 3;
int Can3 = 4;
int Can4 = 5;
int Can5 = 24;
int Can6 = 6;
//определяем выходы регистра
int latchPin = 51;
int clockPin = 49;
int dataPin = 53;
void setup()
{
//инициируем как выходы
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
//настраиваем входы каналов
pinMode(Can1, INPUT);
pinMode(Can2, INPUT);
pinMode(Can3, INPUT);
pinMode(Can4, INPUT);
pinMode(Can5, INPUT);
pinMode(Can6, INPUT);
//настраиваем начальное положение защелки
digitalWrite(latchPin, HIGH);
}
void loop()
{
//считываем LOW c каналов и в зависимости от считанного канала выводим +5V на выходе регистра
// обработка первого канала
if(digitalRead(Can1) == LOW)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 128);
digitalWrite(latchPin, HIGH);
}
// обработка второго канала
if(digitalRead(Can2) == LOW)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 64);
digitalWrite(latchPin, HIGH);
}
// обработка третьего канала
if(digitalRead(Can3) == LOW)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 32);
digitalWrite(latchPin, HIGH);
}
// обработка четвёртого канала
if(digitalRead(Can4) == LOW)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 16);
digitalWrite(latchPin, HIGH);
}
// обработка пятого канала
if(digitalRead(Can6) == LOW)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 8);
digitalWrite(latchPin, HIGH);
}
// обработка шестого канала
if(digitalRead(Can9) == LOW)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 4);
digitalWrite(latchPin, HIGH);
}
}