Arduino, Битовые операции, UART🛠💡
Arduino позволяет не только взаимодействовать с различными датчиками и устройствами, но и проводить битовые операции, используемые во многих языках программирования, позволяя более гибко управлять данными и сокращать используемую память, а также уменьшать объем передаваемых данных
📜 Операция битовый сдвиг
Операция битового сдвига (<< или >>) позволяет сдвинуть биты переменной влево или вправо, заполняя пустующие позиции нулями.
Например, если у нас есть байт 00000101 и мы применяем операцию сдвига влево на один бит (<< 1), то получим 00001010.
🌟 Практика
🌟 Считывание данных и передача через Serial
byte a = 0; // Объявление переменной
void setup()
{
for (int i=2; i<=9; i++) pinMode(i, INPUT_PULLUP); // Настройка пинов на ввод
Serial.begin(9600); // Инициализация последовательного порта
}
void loop()
{
a = 0; // Обнуление переменной
for (int i=0; i<=7; i++){
byte t = !digitalRead(9-i); // Чтение пина и инвертирование (включено - 1, выключено - 0)
a = a | (t << i); // Операция ИЛИ и битовый сдвиг для добавления бита в переменную
}
Serial.write(a); // Отправка данных
delay(10);
}
В этом примере, 8 кнопок записывают свои состояния в 8 битов, которые передаются по UART всего в одном байте, а 8 светодиодов меняют свои состояния в соответствии с полученными данными, разделяя полученный байт обратно на биты.
Код приемника:
byte a = 0;
void setup()
{
for (int i=2; i<=9; i++) pinMode(i, OUTPUT); // Настройка пинов на вывод
Serial.begin(9600);
}
void loop()
{
if (Serial.available()){
byte t = Serial.read(); // Чтение байта
for (int i=0; i<=7; i++){
byte b = (t >> i) % 2; // Битовый сдвиг и определение значения бита
digitalWrite(9-i, b); // Установка значения пина
}
}
}
✨ Tinkercad Схема
https://www.tinkercad.com/things/2hWiVc3hWgx
В Tinkercad вы можете создать схему, протестировать и визуализировать данный процесс, объединив теорию и практику, и увидеть, как работают битовые операции в Arduino!