Добрый вечер! Помогите разобраться. Как мне в : void analogWriteCallback(byte pin, int reg) { } byte pin разбить на массив int? Моя задача: С компа вызываю "analogWriteCallback(10010110, 0);" и первый аргумент разложить на массив 1 и 0, для дальнейшей установки этих "битов" на 8 пинов. Пример: Код (Text): void analogWriteCallback(byte pin, int reg) { Каким-то образом получаю pin[]; for(i = 0; i <= 8; i++){ if(pin[i]) == 1{ digitalWrite(i, HIGH); } else{ digitalWrite(i, LOW); } } }
Код (Text): for(i = 0; i < 8; i++){ //итераций должно быть 8, от 0 до 7 if(pin&(1<<i)){ //единица, сдвинутая влево на i займет позицию, смещенную на i от младшего бита digitalWrite(i, HIGH); } else{ digitalWrite(i, LOW); } } Если надо в первый пин загонять старший бит, то if(pin&(1<<(7-i))) Несколько смущает конструкция analogWriteCallback(10010110, 0) Это где так значение байта можно представлять?
Спасибо! При поиске находил подобное, но в этот раз все понял! "Несколько смущает конструкция analogWriteCallback(10010110, 0) Это где так значение байта можно представлять?" - это я так для примера написал)(спешил) Я так понимаю что в первый аргумент надо вставлять 10-ое число
Подскажите плз что почитать по этому? Сдвиговые регистры? Если честно, то я не совсем понимаю эти записи "if(pin&(1<<(7-i))), (pin>>i)&1"
В общем случае читать про битовые операции в C или C++. А записи эти означают примерно следующее. 1. Единица сдвигается влево на (i-7) позиций. В результате получаем число, составленное из нулевых бит на всех позициях, кроме (i-7)-й. Получившееся число побитно (бит за битом) подвергается логической операции "и" с содержимым pin, в результате которой все биты, кроме (i-7)-го, обнуляются (поскольку второй из аргументов 0), а (i-7)-й сохраняет значение (поскольку второй аргумент 1). Если получившееся число 0 (а это может быть только если (i-7)-й бит в pin равен 0), то условие if не выполнено. Иначе ((i-7)-й бит в pin равен 1) выполнено. 2. Содержимое pin сдвигается вправо на i позиций, что перемещает бит из i-й позиции в первую. Далее побитное "и" с единицей обнуляет все биты, кроме первого. В результате имеем значение этого самого первого бита из результата сдвига, т.е. значение i-го бита из pin. PS. опечатка. Везде i-7 следует читать как 7-i.