Незначащий "ноль" на индикаторе
- Войдите на сайт для отправки комментариев
Ср, 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 пробела.
Помогло с пробелами, спасибо)
Еще прикрутил к нему энкодер. Аппаратно привязал.
Собрал схемку на двух триггерах