Управление массивом портов.
- Войдите на сайт для отправки комментариев
Втр, 14/04/2020 - 17:14
Всем здорова. Я новичок в данной среде, да и не быдлокодил уже очень давно.
Вопрос:
допустим имеем массив портов с номерами портов ввода вывода:
int myPins[] = {2,4,8,3,6,9,11};
byte[7] = data;
Надо по значению данных в битовом исчислении включать комбинацию портов myPins[] кто попадает под 0 или 1.
Как это лучше сделать? В операторе for? перечислять массив портов и причислять им данные
data = byte(Serial.read()); <<< и как эту строчку правильно написать?
for(int i; i<=7; i++)
digitalWriter(myPins[i], data[i]);
Во первых не byte[7] = data;, а byte data[7];. А лучше boolean data[7];
Во вторых
for(int i=0; i<7; i++){
data[i] = byte(Serial.read());
}
В третих
for(int i=0; i<7; i++){
digitalWrite(myPins[i], data[i]);
}
И учите си
Сложная тема. Вроде написано правильно, и компилятор принимает. по факту ерунда какая то получается. Какие бы данные не вводил б, все время на всех битах получаю единицу.
Конечно будет ерунда, если биты и байты мешаете в кучу. Вот это что - byte[7] = data; ?
Как имея число '127' перевести в битовое исчисление '1111111' и выдать его как массив бит по одному биту?
Никак не переводить. Числа внутри МК уже двоичные. Читать конкретный бит можно через bitRead(), например: https://www.arduino.cc/reference/en/language/functions/bits-and-bytes/bitread/
мда, все так просто.
работает, пины переключаются
Для начала хочу разобраться с терминалом.
Написал простенький код : принять массив данных в веденные в терминал в битах, и через некоторое время их вывести на экран терминала.
Только не в битах, не в любом другом виде... На терминал приходит какая то белиберда.
ну первая очевидная ошибка - проверяете Сериал на наличие одного байта, а читаете 12
ТС - Вы бредите.
Считайте 1 (один) байт, который содержит все нужные Вам биты. Это 1 (одно) число. Восьмеричное или шестнадцатеричное. Далее проведите логическое "И" с 1, потом с 2, (1<<1) и т.д. до (1<<i).
Гля - учите си!