Счётчик с шагом 0.1
- Войдите на сайт для отправки комментариев
Чт, 21/02/2013 - 20:09
Прошу сильно не бить , только начинаю эксперименти с Arduino .
Не могу понять как сделать счётчик нажатия кнопки , но с шагом не 1 а 0.1
т.е. с каждым нажатие значение на LCD увеличивалось на 0.1 . Не нашёл ни одного похожего проекта где можно былобы подсмотреть как это реализовано :(
Прошу сильно не бить , только начинаю эксперименти с Arduino .
Не могу понять как сделать счётчик нажатия кнопки , но с шагом не 1 а 0.1
т.е. с каждым нажатие значение на LCD увеличивалось на 0.1 . Не нашёл ни одного похожего проекта где можно былобы подсмотреть как это реализовано :(
Что здесь нужно изменить чтобы изменился шаг ?
01 #include <LiquidCrystal.h> 02 const int SensorPin = 8; 03 int signal = 0; 04 int Counter = 0; 05 int lastSignal = 0; 06 LiquidCrystal lcd(12, 10, 3, 4, 5, 6); 07 void setup() { 08 lcd.clear(); 09 delay(100); 10 lcd.begin(16, 2); 11 lcd.print("Sensor1::>"); 12 lcd.setCursor(11, 0); 13 pinMode(SensorPin, INPUT); 14 } 15 void loop() 16 { 17 18 signal = digitalRead(SensorPin); 19 if (signal != lastSignal) 20 { 21 if (signal == HIGH) 22 { 23 Counter++; 24 lcd.print(Counter); 25 lcd.setCursor(11,0); 26 delay(1); 27 } 28 lastSignal = signal; 29 }01Для начала посмотрите как вставлять код с сообщение и отредактируйте его.
Просто сделайте вывод на дисплей как 0,1 не переходя на вещественные числа.
#include <LiquidCrystal.h> const int SensorPin = 8; int signal = 0; int Counter = 0; int lastSignal = 0; LiquidCrystal lcd(12, 10, 3, 4, 5, 6); void setup() { lcd.begin(16, 2); lcd.clear(); delay(100); lcd.setCursor(0, 0); lcd.print("Sensor1::>"); } void loop() { signal = digitalRead(SensorPin); if (signal != lastSignal) { if (signal == HIGH) { Counter++; lcd.setCursor(11,0); lcd.print(Counter/10); lcd.print("."); lcd.print(Counter%10); delay(1); } lastSignal = signal; } }и учтите, если это кнопка, то она может "дребезжать", что бы устранить дребезг, нужно увеличить задержку в 35 строке.
Спасибо !!!
woow, замените int Counter = 0; на float Counter =0;
Так же измените строку 23 на Counter=Counter+0.1;
woow, замените int Counter = 0; на float Counter =0;
Так же измените строку 23 на Counter=Counter+0.1;
>>А со вторым знаком после запятой (нулем) что потом делать?<<
А зачем вообще что то с ним делать ?
Вот сейчас проверил предложеный мной вариант. Все правильно.
Получаются значения 0.10 0.20 0.30 0.40 и т.д.
Перефразирую - зачем этот ноль?
Вам мешает этот 0 ?
Вы показали один вариант , я другой.
Считайте целыми, а перед выводом поделите на 10, или выводите количество десятков, потом точку, потом единицы. Примерно так:
int temp; ... temp=Counter/10; LCD.print(temp); LCD.print("."); temp=Counter % 10; LCD.print(temp);Считайте целыми, а перед выводом поделите на 10, или выводите количество десятков, потом точку, потом единицы. Примерно так:
int temp; ... temp=Counter/10; LCD.print(temp); LCD.print("."); temp=Counter % 10; LCD.print(temp);Ну да... Поленился внимательно посмотреть, извините. "не переходите на вещественные числа" - приставка "не" потерялась по пути от глаз к мозгу :( Но это не плагиат, я тоже сам придумал!
Спасибо , все варианты работают .
Было интересно узнать что один и тот же результат можно получить двумя разными путями.
Если я правильно понял , если мне при достижении нужного значения (например 2.5) требуется получить сигнал на определёном выходе , в варианте с "int" нужно сравнивать со значением в 10 раз большим (25) , а с "float" соответствует тому что вижу на LCD (2.5) ?
>>Было интересно узнать что один и тот же результат можно получить двумя разными путями.<<
На самом деле вариантов гораздо больше.
>>а с "float" соответствует тому что вижу на LCD (2.5) ?<<
Да, именно так.
Небольшая поправка. Вариант с float выводит сотые доли. Т.е. на дисплее буде 2.50 а не 2.5.
>>достаточно в print() передать вторым параметром количество знаков после запятой.<<
Вот этого не знал. maksim, не поделитесь ссылкой на первоисточник? Может еще чего полезного почерпну.
>>Сам спросил, сам отвечу - можно и float выводить с одним знаком,<<
Выводить то можно. Но нужно иметь в виду то что фактическое значение переменной будет несколько отличаться от выводимого.
И если с этим значением, в программе , производятся какие то многоступенчатые преобразования (арифметические) ,то накапливаемая погрешность может быть довольно большой.
Это так , для более углубленого понимания.
Первоисточник самый первоисточный ) http://arduino.cc/en/Serial/Print