Записать двоичное число в массив

Atreid
Offline
Зарегистрирован: 16.01.2016

Здраствуйте. Голову сломал и гугл погнул, а найти не могу.
Нужно - десятичное число от 0 до 127 перевести в двоичное и записать его в виде массива. Чтобы каждый ноль и единица в своей ячейке. Второй день ум морщу и палатку грею и никак.

Araris
Offline
Зарегистрирован: 09.11.2012

Ну вот, например : http://forum.arduino.cc/index.php?topic=203970.0

Или вот на ту же тему : http://forum.arduino.cc/index.php?topic=109262.0

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Atreid пишет:
гугл погнул

Поаккуратнее там! Сломаете - где даташиты искать будем?

Atreid
Offline
Зарегистрирован: 16.01.2016

Araris, спасибо.

С наскоку не понял ничего, они там Аналоговы вход мучают, но думаю и мне должно подойти. Пошел изучать внимательно и вдумчиво (чертовы сдвиги битов).  :)

Если будет время объясни пожалуйста на примере цифры 50. Надо её в массив[7] запихать :)

 

ЕвгенийП пишет:

Atreid пишет:
гугл погнул

Поаккуратнее там! Сломаете - где даташиты искать будем?

Да шо ему сделается. © :)

Araris
Offline
Зарегистрирован: 09.11.2012

Даже и не знаю, что и как объяснять.. Там несколько рабочих примеров разной сложности. Если заменить analogRead(0) на 50, или любую переменную типа int - ничего по сути не изменится.

Atreid
Offline
Зарегистрирован: 16.01.2016

Помогла другая ссылка (была внутри второй, данной тобой):

http://luckylarry.co.uk/programming-tutorials/arduino-programming/arduin...

Просто переменная int a=50;

переписывалась как строка String buf = String(a,BIN);

ну потом можно "выдирать" нули и единички из buf, как из обычного массива []   :)

Там же в статье описанно как дописать необходимые нули, до необходимой длинны в 8 символов.

Arasis, еще раз спасибо за наводку ;)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Atreid пишет:

Просто переменная int a=50;

переписывалась как строка String buf = String(a,BIN);

ну потом можно "выдирать" нули и единички из buf, как из обычного массива []   :)

Фига-се! 

Я-то думал, что из Питера в Москву через Хабаровск - далеко, а оказывается люди и через Мельбурн ездят!

JasKo
Offline
Зарегистрирован: 21.11.2015

Я извиняюсь, а каков тайный смысл всего этого дейсвия - вместо одного бвйта памяти, занять семь, чтобы озу и так не безграничная быстрее исчерпалась?

Atreid
Offline
Зарегистрирован: 16.01.2016

JasKo пишет:

Я извиняюсь, а каков тайный смысл всего этого дейсвия - вместо одного бвйта памяти, занять семь, чтобы озу и так не безграничная быстрее исчерпалась?

Смысл следующий:

Собираю Лазер-Таг на ардуине (протокол Майлз 2)

В выстреле  есть данные о игроке - ID, цвет команды и непосредственно урон.

Отправляется это всё массивом по IR каналу последовательностью нулей и единиц (ноль = импульсу 600 мкс, единица=1200)

ID игрока может быть от 0 до 127 (7 бит)

Вот и надо заполнить массив выстрела ...600,1200,600,600.... и тд, в зависимости от установочных данных 

из промежуточного масива 7 байт (куда я переписывал ID=50 в двоичном виде) я и буду читать, что мне писать в массив выстрела - 600 или 1200.

Вот так. Как мог объяснил.

Если поняли, что мне надо и знаете как это сделать более элегантно, буду очень признателен за подсказку.

arduinec
Offline
Зарегистрирован: 01.09.2015

Можно сделать например так:

for (i=0; i<=7; i++) {
  if (bitRead(data, i) == 0) delayMicroseconds(600);
  else delayMicroseconds(1200);
}
 

Atreid
Offline
Зарегистрирован: 16.01.2016

ardunec

Как из массива переписать в длительность - вопрос даже не возникал.

Изначатно вопрос был - перевести число из десятичной ситемы в двоичную ввиде массива. 

У же разобрался - результат меня устраивает. 

Всем кто участвовал спасибо.

arduinec
Offline
Зарегистрирован: 01.09.2015

Atreid пишет:

Как из массива переписать в длительность - вопрос даже не возникал.

В моём примере нет массива! Там однобайтное число разбивается на отдельные биты и, в зависимости от значения бита, выбирается нужная длительность.