Взять сигнал с цифровых пинов и перевести в десятичное число ( ARDUINO)
- Войдите на сайт для отправки комментариев
Ср, 19/07/2017 - 10:48
Всем привет, народ в общем такая проблема, подключил прибор на цифровые входы.
Прибор при подаче напряжения соотвественно выдаёт значения по на своих выходах соответственно либо 0 либо +5v (соответственно либо выводится значение в виде 0 или 1 )
void setup()
{
Serial.begin(9600); // установка скорости работы серийного порта на 9600 бит/сек
}
void loop() {
char output_string[25]; //создаём массив
sprintf ( output_string, "%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i", digitalRead(46), digitalRead(45), digitalRead(44), digitalRead(43), digitalRead(42), digitalRead(41), digitalRead(40), digitalRead(39), digitalRead(38), digitalRead(37), digitalRead(36), digitalRead(35), digitalRead(34), digitalRead(33), digitalRead(32), digitalRead(31), digitalRead(30), digitalRead(29), digitalRead(28), digitalRead(27), digitalRead(26), digitalRead(25), digitalRead(24), digitalRead(23), digitalRead(22) ); //записываем в значение с pin 22, 23 и т.д
Serial.println(output_string); //вывести массив на экран
delay(1000); // задержка 1 сек.
}
выглядит это в работе вот так

но хочется увидет нормальное число в десятичном виде , к примеру на 1 значении
0010101010100100100101000 = 5589288
помогите пожалуйста новичку в этом нелёгком деле)))))
Мда . Скоро будут спашивать на форуме как умножить 2 на 2. Эта нелегкая операция сломала мозг передовым новичкам Ардуино. Вы что школьник маладших классов?
Теперь по теме. Есть бинарное число 0101 . Как это будет в десятичной системе 0*2(в степени)3+1*2(в степени)2+0*2(в степени)1+1*2(в степени)0
ПС: степень двойка это сдвиг влево (<<)
0*(0x1<<3)+1*(0x1<<2)+0*(0x1<<1)+1*(0x1<<0)
Я спрашиваю как это реализовать с помощью кода на arduino a не сколько будет 2 на 2
Теперь по теме, прибор выводит число которое мне нужно преобразовать в десятичную систему счисления
если тут сидят действительно умные ребята, подскажите КОД а не примеры которые нужно решать и получать число 5
К сожалению код не работает, всегда выдает 0. И еще вопрос, как потом это число записать в переменную.
К сожалению код не работает, всегда выдает 0. И еще вопрос, как потом это число записать в переменную.
Начните с бета-тестирования. Возьмите код из 8 входов. Может у вас идет переполнение. Направление я вам дал. А дальше вы сами.
Не могу понять, вообще какаято хрень получается, взял сигнал с трех ножек (до первой единицы).
выводит совсем разные вещи:
void setup() { Serial.begin(9600); // установка скорости работы серийного порта на 9600 бит/сек } void loop() { char output_string[25]; //создаём массив sprintf ( output_string, "%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i", digitalRead(46), digitalRead(45), digitalRead(44), digitalRead(43), digitalRead(42), digitalRead(41), digitalRead(40), digitalRead(39), digitalRead(38), digitalRead(37), digitalRead(36), digitalRead(35), digitalRead(34), digitalRead(33), digitalRead(32), digitalRead(31), digitalRead(30), digitalRead(29), digitalRead(28), digitalRead(27), digitalRead(26), digitalRead(25), digitalRead(24), digitalRead(23), digitalRead(22) ); //записываем в значение с pin 22, 23 и т.д Serial.println(output_string); //вывести массив на экран int a = digitalRead(46)*2^24 + digitalRead(45)*2^23 + digitalRead(44)*2^22; //+ digitalRead(43)*2^21 + digitalRead(42)*2^20 + digitalRead(41)*2^19 + digitalRead(40)*2^18 + digitalRead(39)*2^17 + digitalRead(38)*2^16 + digitalRead(37)*2^15 + digitalRead(36)*2^14 + digitalRead(35)*2^13 + digitalRead(34)*2^12 + digitalRead(33)*2^11 + digitalRead(32)*2^10 + digitalRead(31)*2^9 + digitalRead(30)*2^8 + digitalRead(29)*2^7 + digitalRead(28)*2^6 + digitalRead(27)*2^5 + digitalRead(26)*2^4 + digitalRead(25)*2^3 + digitalRead(24)*2^2 + digitalRead(23)*2 + digitalRead(22); Serial.println(a); Serial.println((uint32_t)digitalRead(46) << 24 + digitalRead(45) << 23 + digitalRead(44) << 22); // + digitalRead(43) << 21 + digitalRead(42) << 20 + digitalRead(41) << 19 + digitalRead(40) << 18 + digitalRead(39) << 17 + digitalRead(38) << 16 + digitalRead(37) << 15 + digitalRead(36) << 14 + digitalRead(35) << 13 + digitalRead(34) << 12 + digitalRead(33) << 11 + digitalRead(32) << 10 + digitalRead(31) << 9 + digitalRead(30) << 8 + digitalRead(29) << 7 + digitalRead(28) << 6 + digitalRead(27) << 5 + digitalRead(26) << 4 + digitalRead(25) << 3 + digitalRead(24) << 2 + digitalRead(23) << 1 + digitalRead(22)); delay(1000); // задержка 1 сек. }Вот что рисует:
Команда ^ в Си это исключающее ИЛИ . А вот и приходится 2 в степени n делать сдигом влево.
http://cppstudio.com/post/300/
https://habrahabr.ru/post/146793/ строка 14
1. Порты подряд. поэтому проще.
2. Квон, а зачем ты возишся с дураком, который тебе нахамил?
2. Квон, а зачем ты возишся с дураком, который тебе нахамил?
Правильно! Пока не прочитал ответ, собирался уже было про скобки подсказать, но потом передумал.
Третий закон Ньютона никто не отменял: "Всякому взбрыкнувшему, да отбрыкнется, ибо нефиг!"
Спасибо большое!!!!
Только порты в обратном порядке обходить. Это все благодоря переменной zhopa, без нее ничего бы не получилось))
void setup() { Serial.begin(9600); // установка скорости работы серийного порта на 9600 бит/сек } void loop() { char output_string[25]; //создаём массив sprintf ( output_string, "%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i", digitalRead(46), digitalRead(45), digitalRead(44), digitalRead(43), digitalRead(42), digitalRead(41), digitalRead(40), digitalRead(39), digitalRead(38), digitalRead(37), digitalRead(36), digitalRead(35), digitalRead(34), digitalRead(33), digitalRead(32), digitalRead(31), digitalRead(30), digitalRead(29), digitalRead(28), digitalRead(27), digitalRead(26), digitalRead(25), digitalRead(24), digitalRead(23), digitalRead(22) ); //записываем в значение с pin 22, 23 и т.д Serial.println(output_string); //вывести массив на экран uint32_t zhopa = 0; for (byte i=46; i>21;i--) zhopa = (zhopa << 1) | digitalRead(i); Serial.println (zhopa); delay(1000); // задержка 1 сек. }"Всякому взбрыкнувшему, да отбрыкнется, ибо нефиг!"
Хорошая формулировка! Главное - точная. Не удивлюсь, если сэр Исаак Ньютон примерно так и формулировал.