Есть идея управления светодиодными панелями в комнате с помощью сдвиговика 74НС595 и самодельного IR передатчика. Возникла проблема при формировании бита на вывод. Есть массив из 8 элементов Код (Text): boolean light[8]={false,false,false,false,false,false,false,false}; а вводной бит в регистр имеет вид Код (Text): 0b00000000 формата byte Каким образом сделать конструктор этого бита, чтобы на основе значений массива light можно было забивать byte 0 или 1, чтобы не перечислять все возможные комбинации?
Рекомендую почитать данную статью http://chipenable.ru/index.php/prog...s-kak-rabotat-s-bitami-makroopredeleniya.html. Вот как это можно сделать, код взят из статьи выше. Добавляем новую вкладку в Arduino IDE, даем ей имя BitsMacros.h, вставляем данный код Код, примера работы Код (Text): #include "BitsMacros.h" void setup() { Serial.begin(9600); } void loop() { byte temp = 0; Serial.print("B - "); Serial.println(temp, BIN); MC_SET_BIT(temp, 3); if (MC_BIT_IS_SET(temp, 3)) { Serial.print("N - "); Serial.println(temp, BIN); MC_CLEAR_BIT(temp, 3); Serial.print("N2 - "); Serial.println(temp, BIN); } delay(1000); }
Да зачем такие сложности, если все делается одним циклом из пары строк? Чем проще тем лучше. Проще всего вообще использовать bitWrite ();
Хм... а чего интересно делать, если оно вообще никак не реагирует, хотя биты отсылаются? Код (Text): #include <LiquidCrystal.h> #define DATA 2 #define LATCH 4 #define CLOCK 3 LiquidCrystal LCD(7, 6, 10, 11, 12, 13); int a=1; int b=2; int c=3; int d=4; byte x = 0b10101010; void setup() { LCD.begin(16, 2); pinMode(DATA,OUTPUT); pinMode(CLOCK,OUTPUT); pinMode(LATCH,OUTPUT); } void loop() { digitalWrite(LATCH,LOW); shiftOut(DATA,CLOCK,LSBFIRST,x); digitalWrite(LATCH,HIGH); LCD.setCursor(0,0);LCD.print(x,BIN); } И дело не в серой перемычке. Ибо что с ней, что без - не работает
Сам пока еще плохо разбираюсь в электронике. Но когда мастерю сам, очень помогает в подобных ситуациях простая прозвонка с помощью мультиметра и сверка со схемой. А так же проверка по питанию с помощью того же мультиметра.
Все возможно. Обычно, когда собираю схемы, делаю шаг за шагом, подключил сдвиговый регистр, проверил, все работает иду дальше и т.д. Как для меня в маленькой схеме проще разобраться и когда возникает проблема, точно знаю где накосячил. Может и Вам стоит попробовать такой подход.
я разобрался, у меня в макетной были две соседние дорожки замкнуты. Все норм. Теперь вот что.. Все знают про экран 16х2. Когда выводишь Byte на нем, то он выводит нули только после 1, а нули не выводит. То есть получается нечто типа ---10000 (вместо - должны выводиться нули). Как их выводить, чтоб без сложных If и кучи кода?