Метод перебора битов в байте, отправленном по последовательному каналу.
В моем текущем проекте, который интегрирует микросхему Arduino/avr с Raspberry-Pi и каждый из которых взаимодействует через последовательный порт, я хочу отправить байт данных в Arduino из RPi, который затем будет повторяться понемногу. кусочек.
Каждый бит представляет настройку. Если бит равен 0, то Arduino выключит соответствующее устройство, если бит равен 1, то Arduino включит это соответствующее устройство. Например, такой байт, как: 01100110, будет означать, что Arduino придется выключить четыре устройства и включить четыре устройства.
Я ищу информацию о том, как преобразовать байт в последовательный номер и побитно перебирать этот байт, чтобы Arduino принимала решения на основе значения каждого бита.
Прошу прощения за недостаток технических подробностей, я воздерживаюсь от использования терминов, которые до сих пор мне непонятны.
С уважением.
@Colorado_Technical_Savage, 👍1
Обсуждение1 ответ
Во всех приведенных ниже примерах value
— это значение байта
LSB -> MSB - таким образом, 00001111 включит первые 4 устройства и выключит последние 4
for(int i = 0, mask = 1; i < 8; i++, mask = mask << 1)
{
if (value & mask)
{
// бит включен
}
else
{
// бит выключен
}
}
В качестве альтернативы вы можете сделать следующее, но значение
будет изменено
for(int i = 0; i < 8; i++, value = value >> 1)
{
if (value & 1)
{
// бит включен
}
else
{
// бит выключен
}
}
Действуем наоборот в каждом байте:
MSB -> LSB - поэтому 00001111 выключит первые 4 устройства и включит последние 4
for(int i = 0, mask = 128; i < 8; i++, mask = mask >> 1)
{
if (value & mask)
{
// бит «i» включен
}
else
{
// бит «i» выключен
}
}
В качестве альтернативы вы можете сделать следующее, но значение
будет изменено
for(int i = 0; i < 8; i++, value = value << 1)
{
if (value & 128)
{
// бит включен
}
else
{
// бит выключен
}
}
- Как получить ненулевой выход из HX711 и ячейки загрузки?
- Отправка информации (например, строки) через цифровые контакты
- Как остановить серводвигатель в текущем положении при использовании последовательного порта? Я хочу, чтобы он оставался в одном положении при получении «0».
- серийные данные портятся
- Arduino Uno по-прежнему загружается и работает, но нет последовательной связи через USB
- Отправка строки с Arduino на ESP8266 работает на UNO, но не на Pro Mini
- Повреждение данных SoftwareSerial - поиск предложений
- Как программировать микрочипы напрямую через USB
ваш вопрос касается программирования на C++..... он не имеет отношения конкретно к Arduino, @jsotola