Незначащий "ноль" на индикаторе
- Войдите на сайт для отправки комментариев
Ср, 16/09/2020 - 08:28
Привет всем. Сделал таймер для точечной сварки.
Собрал на ардуино про мини. Скетч немного поменял под себя.
Раньше не сталкивался с чем-то подобным, поэтому менял на интуиции.
Все работает нормально, но при изменении времени импульса больше 1000 мс
и возвращении к значению меньше 1000 на индикации остается "0" на месте единиц.
Шаг сделал 50.
Вот скетч. Я не автор, просто некоторые значения поменял.
#include <LiquidCrystal.h> int bta = 13; //����� � ������� ��������� �������� int svarka = 9; // ����� ������� ������ int secplus = 10; // ����� ������� ���������� ������� ����� int secminus = 11; // ����� ������� ���������� ������� ����� int razplus = 12; // ����� ������� ���������� ���������� �������� int razminus = 8; // ����� ������� ���������� ���������� �������� int lastReportedPos = 1; int lastReportedPos2 = 1; volatile int sec = 300; volatile int raz = 0; LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup() { pinMode(svarka, INPUT); pinMode(secplus, INPUT); pinMode(secminus, INPUT); pinMode(razplus, INPUT); pinMode(razminus, INPUT); pinMode(bta, OUTPUT); lcd.begin(16, 2); // ��������� ����� ���������� ��������� lcd.setCursor(2, 0); // ������������� ������ � ������ 1 ������ lcd.print("Svarka v.1.0"); // ������� ����� lcd.setCursor(2, 1); // ������������� ������ � ������ 2 ������ lcd.print("Tehnopage.ru"); // ������� ����� delay(1000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Delay: Ms"); lcd.setCursor(0, 1); lcd.print("Repeat: times"); } void fire() { for (int i = 1; i <= raz; i++) { digitalWrite(bta, HIGH); delay (sec); digitalWrite(bta, LOW); delay (sec); } delay(1000); } void loop() { if (sec <= 49 ) { sec = 50; lastReportedPos = 50; } if (sec >= 1950 ) { sec = 1900; lastReportedPos = 1850; } else { if (lastReportedPos != sec) { lcd.setCursor(7, 0); lcd.print(" "); lcd.setCursor(7, 0); lcd.print(sec); lastReportedPos = sec; } } if (raz <= 0 ) { raz = 1; lastReportedPos2 = 2; } if (raz >= 11 ) { raz = 10; lastReportedPos2 = 9; } else { if (lastReportedPos2 != raz) { lcd.setCursor(8, 1); lcd.print(" "); lcd.setCursor(8, 1); lcd.print(raz); lastReportedPos2 = raz; } } if (digitalRead(secplus) == HIGH ) { sec += 50; delay(20); } if (digitalRead(secminus) == HIGH ) { sec -= 50; delay(20); } if (digitalRead(razplus) == HIGH ) { raz += 1; delay(250); } if (digitalRead(razminus) == HIGH ) { raz -= 1; delay(250); } if (digitalRead(svarka) == HIGH ) { fire(); } }
Как избавиться от ненужного нуля?
а аффтар чо говорит?
Автора пока не пытал..
По тому скетчу до таких показаний не доходит, поэтому у него таких вопросов не возникало скорее всего
значить, добивай до необходимой длины пробелами. Или прочиталь чонить за функцию sprintf().
ну или вставь в 64й и 83-й строке в кавычки еще 1-2 пробела.
Помогло с пробелами, спасибо)
Еще прикрутил к нему энкодер. Аппаратно привязал.
Собрал схемку на двух триггерах