Привет всем подскажите как перекидывать из массива в переменную
скажем так у меня есть массив в формате ASCII char buffer[20] {$GS12345,00001} данный массив я уже представил как буковки и циферки а не код ASCII 251,200,12,15, итд .
задача производить с числом математические действия но с массивом это делать наверно не получиться поэтому я хочу перекинуть его в FLOAT чем мне воспользоваться ?
выделить из строки символы, задающие ваше число, а затем преобразовать эти символы в число, после чего делать с ним амтематические действия. число из строки можно получить, например, при помощи функции sscanf
битва с дураками проиграна, победители торжествуют. слава победителям!
в своей практике я уже мигал светодиодами............... а теперь задумался над тем каким макаром сделать так чтобы светодиод ПЛАВНО набирал яркость и также плавно тух..., и так с некой частотой........., как сие сделать ?
Последний раз редактировалось FreshMan Ср мар 21, 2012 21:12:23, всего редактировалось 2 раза.
FreshMan писал(а):в своей практике я уже мигал светодиодами............... а теперь задумался над тем каким макаром сделать так чтобы светодиод ПЛАВНО набирал яркость и также плавно тух..., и так с некой частотой........., как сие сделать ?
настраивай ШИМ есть счетчик выход счетчика выбираешь скорость шим и регулируешь шим регистром вроде OCR точно не помню настраивается от 0 до 255
все хорошо, только вот флот выводить не хочет, пишет "?". хексы и интеджеры выводит на ура, а вот с флотом непонятка какая-то. Вывожу следующим образом;
хелп, собственно должно получиться подобие счётчика, по прерыванию на INT0 (PIND.2) - отнимает от ввёдённого значения 1+коэфицент. По окончанию счёта (counter=0) срабатывает звуковая сигнализация.
Немогу разобраться с прерываниями - т.е. с отключенным int0. подаю на PIND.2==0 и программа работает. Но стоит подключить прерывания и нет никакого эффекта.
сорри
Да, volatile это правильно. А еще main использует свой локальный float count, а не глобальный volatileunsigned int count, т.е. это разные переменные. Так что float count из main надо убрать.
Сегодня только такой баг исправил в своем коде тоже глобальную переменную в прерывании менял.
Добавил и заработало.
не помогло, никакой разницы
BorisSPB писал(а):Да, volatile это правильно. А еще main использует свой локальный float count, а не глобальный volatileunsigned int count, т.е. это разные переменные. Так что float count из main надо убрать.
помогло отчасти
код уменьшился раза в 2, стали срабатывать прерывания,
но выводится мусор, значения прыгают по обе стороны нуля, счёта нет
Выдало мне размер в 4 байта. На сколько мне известно, что тип char состоит из одного байта.
Из за этого, у меня не работала процедура обработки буфера. Дошло до того, что я закрыл среду и снова открыл проект. Скомпилировал, запустил. Ответ - 1 байт.
Как я понял, компилятор тупанул? Или я чего-то не понял? (наверное транслятор перепутал размер адреса с размером переменной)
I am DX168B and this is my favourite forum on internet!
Есть нетривиальная (для меня) задача.
Есть массив, типа unsigned char buff[32]. В этом массиве лежит пакет, формата ADR[1] CMD[1] SIZE_OF_DATA[1] DATA[SIZE_OF_DATA]
С разбором и обработкой пакета всё понятно и разобрать его несложно.
А вот с данными не могу разобраться. У данных есть свой формат. В основном, это числа.
Формат данных:
U_OUT[2] I_OUT[2] FLAGS[1]
Проблема с U_OUT и с I_OUT, точнее, с их преобразованием. U_OUT представляет собой целое двухбайтное число ( по порядку, сначала младший байт, за тем старший)
Например: 0x28, 0x0A = 0x0A28
Если его представить, как dec - то это будет число 2600. Вот это число надо разделить запятой с точностью до десятых и сотых и передать в переменную, типа float или double.
То есть 2600 = 26,00
Как можно реализовать на Си?
За такой идиоццкий формат пакета прошу не бить, так как девайс заводской и этот формат определил разработчик\производитель девайса. Я добавил бы ещё и CRC16 в конец пакета.
I am DX168B and this is my favourite forum on internet!