Помогите разобраться с функцией String(x,BIN)
- Войдите на сайт для отправки комментариев
Вс, 26/01/2020 - 23:49
Нужно перевести десятичное число в двоичное. Как это сделать с помощью функции String(x,BIN)?
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(5,BIN);
String myStr = String(5, BIN);
Serial.println(myStr);
delay(300);
}
Например, Serial.println(5,BIN) дает результат 101, что есть правильно, а String myStr = String(5, BIN) выдает 100. Serial.println(14,BIN) выдает 1101, что верно, а String myStr = String(14, BIN) выдает 1111. Что я делаю не так.
Вообще, задача вот в чем. Приходит целое число, которое нужно перевести в двоичное, и в зависимости, от каждого разряда включать или выключать светодиод. Например, пришло 10, в двоичной 1010. 1 светодиод не горит, 2 горит, 3 не горит, 4 горит.
Подключены светодиоды как?
К цифровым выводам, на каждый вывод 1 светодиод. Возможно, не уловил суть вопроса.
Нужно перевести десятичное число в двоичное. Как это сделать с помощью функции String(x,BIN)?
Никак. Функция String() для этого КАТЕГОРИЧЕСКИ не подходит, поскольку, в соответствии с названием, превращает свой аргумент в строку (string), а не в число
да-да, я понял задачу. String вам не поможет.
Для вашей задачи десятичное число вообще не надо никуда преобразовывать, потому что с точки зрения компьютера двоичное 1010 и десятичное - 10 - это одно и то же.
Скажем так - если выводить на сдвиговый регистр или прямо в порт контроллера, то преобразования вообще не нужны.
Я хотел из строки выводить каждую цифру по отдельности с помощью charAt() и дальше сравнивать с 1 или 0, и в соответствии с полученным ответом подключать или отключать светодиод. А все таки, почему функция String(x,BIN) не работает в том варианте, в котором я написал, почему не переводит в двоичную систему правильно?
Лучше почитайте про битовые операции, чем над проблемами String голову ломать.
https://www.arduino.cc/reference/tr/language/functions/bits-and-bytes/bi...
А все таки, почему функция String(x,BIN) не работает в том варианте, в котором я написал, почему не переводит в двоичную систему правильно?
попробовал ваш код из первого поста - у меня все работает, исправно печатается "101" в обоих случаях, так что ищите у себя ошибки.
(x & (1 << n)) > 0
n - разряд от 0 до размерности числа - 1. Например для типа uint8_t n будет от 0 до 7.
Попробовал в Arduino IDE, действительно, работает. А не получалось реализовать с помощью сервиса Tinkercad. Штука прикольная, но результаты неожиданные. В любом случае, всем спасибо за помощь, Вам, b707, в частности. Удачи.