Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

goodspeedmen
2016-10-19 11:11:22
Nefreemen пише:

Капец, ну глаз, мерцание...А кода значение меняется Вы то же мерцание видите smile ?
Интересно если сделать так...Тоже будет "мерцать"
      lcd.setCursor(2, 0);
      lcd.print("     "); - стираете 5 символов
      lcd.setCursor(2, 0);
      lcd.print(n) - печатаете переменную n не больше 5 символов с той же позиции.
Возможно топорно но просто ( без каких то вычислений длины печати и пр. лабуды).
Ну если лишний код, извините я уж не знаю "лишняя ли у попа жена" lol

Спасибо нужно будет попробовать. И всё же две попы тоже не ахти.  big_smile

alex_dol
2016-10-19 11:10:26

Перечитал еще раз 1-й пост. У вас 0 остается от числа 100.0, так как 99.9 занимает на одно знакоместо меньше и 0 стандартными средствами не затирается. Если число будет 9.9 - будет видно 2 знака от предыдущих чисел. Вам надо либо перед выводом затирать предыдущие числа пробелами (можно просто очистить дисплей) либо нужен форматированный вывод на дисплей. Ознакомтесь http://www.c-cpp.ru/content/printf. Про оба эти метода уже писали ранее, но вы упорно изобретаете велосипед.

Кусок кода, который вы привели является вариантом форматированного вывода, только вместо одной переменной вы используете 4.

goodspeedmen
2016-10-19 09:47:39

if (update_lcd==0)
  {
   lcd.setCursor(0,0);                    //курсор.
   lcd.print("Counter:");                 //выводит текст.
   lcd.print(lcd_Counter_0);           //выводит значение переменной.       
   lcd.print(lcd_Counter_1);           //выводит значение переменной.
   lcd.print(lcd_Counter_2);           //выводит значение переменной.
   lcd.print(".");                           //выводит текст.
   lcd.print(lcd_Counter_3);           //выводит значение переменной.
   lcd.print("MM");                       //выводит текст.
   lcd.setCursor(0,1);                   //курсор 0 символ 2 строка       
   lcd.print("Сaliber:");                 //выводит текст.
   lcd.print(lcd_caliber_0);           //выводит значение переменной.
   lcd.print(lcd_caliber_1);           //выводит значение переменной.
   lcd.print(lcd_caliber_2);           //выводит значение переменной.
   lcd.print(".");                         //выводит текст.
   lcd.print(lcd_caliber_3);           //выводит значение переменной.
   lcd.print("MM");                      //выводит текст.
   
   update_lcd = 4095;             
  }
   update_lcd = update_lcd--;

NoName
2016-10-19 09:45:33

"лишняя ли у попа жена"  чес слово поржал, ну у вас и  сравнения )))
между прочим goodspeedmen плывет  в правильном направление, только сильно углубился )

у кого есть подключенный индикатор?  - проверьте плс

void setup() {
chat tmp_str[32];   
long data = 1236; // == 123.6
  lcd.begin(0, 0);
  sprintf (tmp_str, " data= %d.%d", data /10, data%10);
  lcd.print(tmp_str);
}

я думал что этот код рабочий

Nefreemen
2016-10-18 23:07:43

Капец, ну глаз, мерцание...А кода значение меняется Вы то же мерцание видите smile ?
Интересно если сделать так...Тоже будет "мерцать"
      lcd.setCursor(2, 0);
      lcd.print("     "); - стираете 5 символов
      lcd.setCursor(2, 0);
      lcd.print(n) - печатаете переменную n не больше 5 символов с той же позиции.
Возможно топорно но просто ( без каких то вычислений длины печати и пр. лабуды).
Ну если лишний код, извините я уж не знаю "лишняя ли у попа жена" lol

goodspeedmen
2016-10-18 22:17:52
Nefreemen пише:

goodspeedmen, Какой у Вас ЛЦД? Если типа 1602 или аналогичный то перед выводом на дисплей очистите  соответственно количество символов с позиции которой Вы выводите на экран. С графическим немножко сложнее нужно очистить прямоугольник.
Если не очищать то получается примерно такое:
102.4
98.74 - а должно быть (хотелось вывести) 98.7 smile .

Да 1602. Я думал передвигать курсор, очищать его if (lcd... < 100) но получается мерцание при очистке ну и к тому же упираемся в лишний код который не нужен...

Nefreemen
2016-10-18 22:07:57

Приведите кусок кода где происходит вывод на LCD.

alex_dol
2016-10-18 21:26:32
goodspeedmen пише:

Ребята я очень всем благодарен всем за ваши ответы но поймите я не умею читать мысли, если их пишите то излагайте из в виде кода, мы же тут "программисты" всё же big_smile

Я тоже не умею читать мысли. Диапазон чисел? Какой дисплей? Какие действия с числами надо совершать?
Какой код можно написать не зная под что писать?

goodspeedmen
2016-10-18 21:12:08

Ребята я очень всем благодарен всем за ваши ответы но поймите я не умею читать мысли, если их пишите то излагайте из в виде кода, мы же тут "программисты" всё же big_smile

Nefreemen
2016-10-18 20:59:14

goodspeedmen, Какой у Вас ЛЦД? Если типа 1602 или аналогичный то перед выводом на дисплей очистите  соответственно количество символов с позиции которой Вы выводите на экран. С графическим немножко сложнее нужно очистить прямоугольник.
Если не очищать то получается примерно такое:
102.4
98.74 - а должно быть (хотелось вывести) 98.7 smile .

goodspeedmen
2016-10-18 20:50:12

Честно сказать после ваших ответов я чувствую себя ущербным (я не обидчивый и готов выслушивать конструктивную критику если от неё есть польза)...  Как придумал, смотрел видео, читал про работу контроллеров для вывода информации на экран нужен байт как по мне вполне очевидный вывод учитывая вводные параметры. Опрос if происходит по мере необходимости соответственно процессору легче оперировать этими цифрами (мне так казалось) neutral И оно отлично работает к тому же. Просто возникла проблема, нужно сравнивать эти цифры на  "<" ">" с таким же количество байтов и тут иногда по каким то непонятным мне причинам определяется, сумма отпала сразу так как "от перемены мест слагаемых сумма не изменяется"  x_0 > y_0 || x_1 > y_1 результат тоже не ахти.

Nefreemen
2016-10-18 20:46:53

Сотрите последнее знакоместо на LCD  smile. Вы сначала выводите четыре символа а потом три а последний остается  wink .

NoName
2016-10-18 08:37:44

)))
goodspeedmen,  решили похвастаться тогда что ли?

"Честно я надеялся увидеть нечто совсем другое..."
*(unsigned char*) pmem ...    такое ? )

основная прелесть  "ардуино"  в наглядности, хотя эта его нагляность реализована в "ущерб функционалу", но работает , и большинство задач удовлетворяет,  так что выстрелили мегой и ладно, хоть пипл к науке будет ближе, чем к журналу из серии "playboy"  ( вот тут вопросов нет, кроме красивых женщин раньше были и толковые общеполитические статьи )  и алкоголю уровня alcoenergy

я сам не светочь чистого кода
но такие алгоритмы убивают всю наглядность

lcd_3++
if(lcd_3==10)
  {
    lcd_3 =0;
    lcd_2++;
  }

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

я просто не понял код, но это все мелочи.

что за девайсину делаете ?

нашел пример
int test = 0xAB;
byte hi, lo;
hi = HighByte(test);  //in case you're wondering this should be 0xA
lo = LowByte(test);    // and this should be 0xB.

вы  данные в hex будете выводить?

alex_dol
2016-10-17 21:37:49

Согласен - деление занимает много времени, но это окупается простотой работы с числом. Через lowByte() и highByte() ниче у вас не выйдет, например число больше 65355, что тогда?

goodspeedmen
2016-10-17 17:09:10

Я же не специалист и не писал что бы кто то чего то исправлял. Я сужу из того что контроллер 8 битный его регистры тоже (значит с байтами ему работать проще), есть пары регистровые но все же это занимает его время на обработку инициализация long деление его, вывод информации и прочие. Честно я надеялся увидеть нечто совсем другое...
lowByte()
highByte()

Підвал форуму