Замена константы

Обсуждаем контроллеры компании Atmel.
Ответить
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

ATMEL86 писал(а):Помогите с кодом! Нужно для sprintf(lcd_buffer,"kanal 2=%.4f",resultat); присвоить единицу.
тогда не понимаю вопрос.
Куда присвоить?
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 120
Зарегистрирован: Сб апр 20, 2013 16:38:32
Откуда: Страна Чудес

Сообщение ATMEL86 »

я хотел каждой кнопкой заменять спецификаторы формата %.2f на значения %.3f %.4f .
То бишь пытался целой строке присвоить единицу (бред наверно)

Код: Выделить всё

lcd_gotoxy(0,0);
result=((5.00*adc_data[0])/1024.00);
sprintf(lcd_buffer,"kanal 1=%.2f",result);
lcd_puts(lcd_buffer);

lcd_gotoxy(0,1);
resultat=((5.00*adc_data[1])/1024.00);
sprintf(lcd_buffer,"kanal 2=%.2f",resultat);

if (PIND.4==0) {
delay_ms(150);
sprintf(lcd_buffer,"kanal 2=%.3f",i,resultat);
PORTD.0=1;
};
if (PIND.5==0) {
delay_ms(150);
sprintf(lcd_buffer,"kanal 2=%.4f",resultat);
PORTD.1=1;
};

lcd_puts(lcd_buffer);  
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

Ну в первой строке экрана Вы с канала АЦП 0 показываете напряжение с точностью 2 знака после запятой,
во второй - по умолчанию с двумя, а при нажатии соответствующей кнопки с тремя или четырьмя соответственно.

и что не так?

кроме конечно задержки в 150 ms.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 120
Зарегистрирован: Сб апр 20, 2013 16:38:32
Откуда: Страна Чудес

Сообщение ATMEL86 »

Да с задержкой я погорячился!

И так нажимаем на кнопку показывает напряжение с точностью 3 знака, если отпускаю то снова переходит в исходное состояние (точность 2 знака)
Мне нужно что бы при нажатии кнопки сохраняло состояние. :(

у же дня 2 мучаюсь...
Реклама
Эиком - электронные компоненты и радиодетали
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

А как же значение по умолчанию?

или индикация 3 и 4 знака только на какоето время?
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 120
Зарегистрирован: Сб апр 20, 2013 16:38:32
Откуда: Страна Чудес

Сообщение ATMEL86 »

всё зависит какая мне точность измерения будет нужна: Может точность 2 знака а может 3 или 4 по этому и кнопки пытаюсь прикрутить.
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

ответов несколько:

первое - это три кнопки
второе - после нажатия кнопки залипание индикации на время
третье - по нажатию кнопки залипание индикации навсегда (тогда непонятно как вернутся к точности 2 знака)

по второму пункту - это самое простое поставить задержку в конце цикла на пару секунд тогда правда и кнопки читаться будут с той же периодичностью
более правильно по нажатию кнопки выставлять флаг и запускать таймер (аппаратный или програмный) и по истечению времени возвращаться к индикации с точностью 2 знака

по третьему - это типа радиокнопки в винде.

а можно еще и обойтись одной кнопкой только значение гонять по кругу нажал точность 2, еще нажал - 3 и т.д.


Ваша программа Вам решать.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 120
Зарегистрирован: Сб апр 20, 2013 16:38:32
Откуда: Страна Чудес

Сообщение ATMEL86 »

у меня в замысле 4 кнопки 1 и 2 -это %.2f ; 3 кнопка %.3f ; 4 кнопка - %.4f.
То бишь нажимаем любую кнопку получаем нужную точность.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Первой страницей могло бы уже всё закончится :)
Вроде и ссылки дали соответствующие, и пример создания указателей на строки, только подставляй...
Кстати, подсказочка ТС'у. Указатели можно создавать не только с явными именами, их можно запихнуть в массив.

Код: Выделить всё

flash unsigned char *  fmt[]={
  "Channel #2 = %.2f"
  "Channel #2 = %.3f"
  "Channel #2 = %.4f"
}
а затем их по индеку выводить

Код: Выделить всё

  sprintf(lcd_buffer, fmt[0] ,resultat);
  ...........
  sprintf(lcd_buffer, fmt[1] ,resultat);
  ...........
  sprintf(lcd_buffer, fmt[2] ,resultat);
  ...........
Встал на лапы
Аватара пользователя
Сообщения: 120
Зарегистрирован: Сб апр 20, 2013 16:38:32
Откуда: Страна Чудес

Сообщение ATMEL86 »

Спасибо ALEX !
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

В данном контексте я бы не назвал это хорошим решением.

Во первых камень мега16, а программа в 20 строк.
Во вторых это хорошо если вывод информации сделать в виде функции или хотя бы в виде цикла ну короче если программу довести до того, что в ней была одна строка sprintf а не пять и более. Какая разница где строка ТСу внутри sprintf или в переменной.

А тут... :(
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Danko писал(а):Какая разница где строка ТСу внутри sprintf или в переменной.
Ну может ТС'у и без разницы. А так, получается один sprintf с необходимой (текущей) строкой форматирования.
Вполне нормальное решение для однотипных строк форматирования, чтобы не плодить спринтэфы...
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

PS: Или Вы подумали, что я предлагаю выводить три спринтэфа с индексом в массиве ? :)))
Конечно же, это -

Код: Выделить всё

  sprintf(lcd_buffer, fmt[0] ,resultat);
  ...........
  sprintf(lcd_buffer, fmt[1] ,resultat);
  ...........
  sprintf(lcd_buffer, fmt[2] ,resultat);
  ...........
было для примера и для визуального восприятия...
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

Именно так и подумал. :))
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Нет конечно же :))
Это был намёк на переменное переключение строк форматирования, полагая, что ATMEL86 сам додумается создать переменную для индекса массива.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

Да кстати более правильно писать так

Код: Выделить всё

flash unsigned char *  fmt[]={
  "Channel #2 = %.2f  "
  "Channel #2 = %.3f "
  "Channel #2 = %.4f"
}
это чтобы не использовать очистку всего экрана перед выводом строки на экран.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 120
Зарегистрирован: Сб апр 20, 2013 16:38:32
Откуда: Страна Чудес

Сообщение ATMEL86 »

Привет всем! :)) СПАСИБО ОГРОМНОЕ за то, что помогаете!
Объявил как переменную

Код: Выделить всё

flash unsigned char *fmt[]={"Channel #2 = %.2f","Channel #2 = %.3f","Channel #2 = %.4f"};
и в условии:

Код: Выделить всё

if (PIND.4==0) {
delay_ms(30);
sprintf(lcd_buffer, fmt[1] ,resultat);
PORTD.0=1;
};
Работает только при удержании тактовой кнопки. При отпускании кнопки остаётся только светится светодиод т.к. PORTD.0=1;
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

Ветка форума могла закончится на первой странице и разрослась лишь по той причине, что автор основной алгоритм программы держит в голове, а нам выкладывает абсолютно несвязанные куски кода.

ATMEL86, а теперь посмотрите на свой код как будто Вы смотрите на него через пару лет.

Код: Выделить всё

if (PIND.4==0) {
delay_ms(30);
sprintf(lcd_buffer, fmt[1] ,resultat);
PORTD.0=1;
};
При условии чтения нуля с порта D4 сделать для чего незнаю задержку поместить по какому то шаблону (т.е. для чтения шаблона нужно подняться на вверх файла где описаны глобальные переменные, а потом опустится вниз и найти где ты был) поместить какую то переменную с именем РЕЗУЛЬТАТ.

Это я все к чему.
А тому что завтра Вы все помните и через месяц Вы будете помнить, а через год? Лично я поднимаю свои файлы первых проектов и консультирую форумчан по коду, а файлы то 2008 года. И файлы в несколько тысяч строк.

Лично я не вижу результата нашего общения.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Ответить

Вернуться в «AVR»