Доброе время суток, суть темы такова Два регистра сдвига подключены последовательно 74HC165 у нас получается 16 кнопак Регистр сдвига подключаем к Атмега 1280 (Ардуино) Пишем: int indataPin = 11; int inclockPin = 12; int inloadPin = 13; int temp = 0;. void setup(){ Serial.begin(9600); pinMode(indataPin, INPUT); pinMode(inclockPin, OUTPUT); pinMode(inloadPin, OUTPUT); } void loop(){ digitalWrite(inloadPin, 0); digitalWrite(inloadPin, 1); for(int i=0; i<=15; i++){ digitalWrite(inclockPin, 0); temp = digitalRead(indataPin); digitalWrite(inclockPin, 1); Serial.print (temp); } Serial.println (""); Serial.println ("--------"); delay(2000); Всё работает всё выводится в терминал при нажатие кнопки Далее подключаем регистр сдвига 74HC595 тоже последовательно в качестве нагрузки используем 16 светодиодов Пешем : #define DS 11 #define SHCP 12 #define STCP 8 void setup() { pinMode(DS,OUTPUT); pinMode(SHCP,OUTPUT); pinMode(STCP,OUTPUT); } void loop() { shiftOut(DS,SHCP,LSBFIRST,B01111111); shiftOut(DS,SHCP,LSBFIRST,B11111111); digitalWrite(STCP,HIGH); Подскажите пожалуйста как сделать чтобы это всё в мете работало , когда нажимаешь первую кнопку загорается первый светодиод, нажимаешь вторую загорается второй.
Код (Text): int DS = 9; // дата int SHCP = 10; // защёлка int STCP = 8; // время int indataPin = 11; // Вывод данных 165 int inclockPin = 12; // Вывод время 165 int inloadPin = 13; // Вывод выбора 165 int Data; // Переменная 165 void setup() { Serial.begin(9600); //установка порта на скорость 9600 бит/сек pinMode(DS,OUTPUT); // пин выход дата pinMode(SHCP,OUTPUT); // пин выход защёлки pinMode(STCP,OUTPUT); // пин выход время pinMode(indataPin, INPUT); // Ввод 165. pinMode(inclockPin, OUTPUT); // Ввод время 165. pinMode(inloadPin, OUTPUT); // Вывод load 165. } void loop() { digitalWrite(inloadPin, 0); // считываем 165 digitalWrite(inloadPin, 1); // выводим данные на последовательный вывод 165. for(int i=0; i<=7; i++){ // В цикле считываем каждый из 8 входов (D0-D7) 165. digitalWrite(inclockPin, 0); // Устанавливаем время в лог "0". Data = digitalRead(indataPin); // Читаем текущее состояние выхода данных и сохраняет в дата 165. digitalWrite(inclockPin, 1); // Устанавливаем время в лог "1" и этем завершаем вывод данных. Serial.print (Data); // Отправляем данные } if (Data == '10000000') { // если принят символ '10000000' shiftOut(DS,SHCP,LSBFIRST,B10000000); //формируем биты для регистра сдвига 595 digitalWrite(STCP,HIGH); digitalWrite(STCP,LOW); //регистр закрыть защёлку 595 } Serial.println (""); } ну ни как не хочет работать
Код (Text): int DS = 9; // дата int SHCP = 10; // защёлка int STCP = 8; // время int indataPin = 11; // Вывод данных 165 int inclockPin = 12; // Вывод время 165 int inloadPin = 13; // Вывод выбора 165 int Data; // Переменная 165 void setup() { Serial.begin(9600); //установка порта на скорость 9600 бит/сек pinMode(DS,OUTPUT); // пин выход дата pinMode(SHCP,OUTPUT); // пин выход защёлки pinMode(STCP,OUTPUT); // пин выход время pinMode(indataPin, INPUT); // Ввод 165. pinMode(inclockPin, OUTPUT); // Ввод время 165. pinMode(inloadPin, OUTPUT); // Вывод load 165. } void loop() { digitalWrite(inloadPin, 0); // считываем 165 digitalWrite(inloadPin, 1); // выводим данные на последовательный вывод 165. for(int i=0; i<=7; i++){ // В цикле считываем каждый из 8 входов (D0-D7) 165. digitalWrite(inclockPin, 0); // Устанавливаем время в лог "0". Data = digitalRead(indataPin); // Читаем текущее состояние выхода данных и сохраняет в дата 165. digitalWrite(inclockPin, 1); // Устанавливаем время в лог "1" и этем завершаем вывод данных. } if (Data == '10000000') { // если принят символ '10000000' shiftOut(DS,SHCP,LSBFIRST,B10000000); //формируем биты для регистра сдвига 595 digitalWrite(STCP,HIGH); digitalWrite(STCP,LOW); //регистр закрыть защёлку 595 } Serial.println (""); } И так тоже