Ребята всем привет! Есть 24 нефиксируемых кнопки, подключенные к трем 74нс165. нужно изменить код, чтобы работало так: кнопку нажал-включил, еще нажал- выключил.
#define latchPin 10 // защелка 12 вывод м/c
#define clockPin 11 // Синхронизация 11 вывод м/c
#define dataPin 12 // Данные 14 вывод м/c
#define clkPin 7 // CLK
#define latchInPin 4 // защелка
#define dateInPin 6 // DATE IN
uint8_t mk_C = 1, dateIn = 0;
uint8_t mk = 0b00000000;
void setup()
{
// инициализация пинов как выходы
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
// инициализация пинов как входы
pinMode(clkPin, OUTPUT);
pinMode(latchInPin, OUTPUT);
pinMode(dateInPin, INPUT); // инициализация пина как вход
digitalWrite(latchInPin, 1);
digitalWrite(clkPin, 0);
}
void date_In() // Подпрограмма для чтения одной 74HC165
{
mk_C = 0;
mk = 0;
do { // Бесконечный цыкл пока (mk_C < 8).
mk = mk << 1; // Сдвинуть на один бит в лево.
mk = mk + digitalRead(dateInPin); // Прочесть и записать один бит.
digitalWrite(clkPin, 1); // Переключить один бит.
//delay(1);
digitalWrite(clkPin, 0); // Подготовить для переключения одного бита.
//delay(1);
mk_C ++;
} while (mk_C < 8); // Выполняем до тех пор пока CLK меньше 8 тактов.
// delay(1);
}
void loop()
{
digitalWrite(latchInPin, 0); // Прочесть и зиблокировать CLK всех 74HC165. Вывести 1-й бит.
digitalWrite(latchInPin, 1); // Снятие блокировки CLK.
digitalWrite(latchPin, LOW); // Защёлка для приёма
date_In(); // Прочитать первую 74HC165.
shiftOut(dataPin, clockPin, MSBFIRST, mk); // отправляем данные в 1-ю м/с 74HC595
date_In(); // Прочитать вторую 74HC165.
shiftOut(dataPin, clockPin, MSBFIRST, mk); // отправляем данные во 2-ю м/с 74HC595
date_In(); // Прочитать третью 74HC165.
shiftOut(dataPin, clockPin, MSBFIRST, mk); // отправляем данные в 3-ю м/с 74HC595
digitalWrite(latchPin, HIGH); // Защёлка передача
}