Незначащий "ноль" на индикаторе

andrey3824
Offline
Зарегистрирован: 17.03.2020

Привет всем. Сделал таймер для точечной сварки.
Собрал на ардуино про мини. Скетч немного поменял под себя.
Раньше не сталкивался с чем-то подобным, поэтому менял на интуиции.
Все работает нормально, но при изменении времени импульса больше 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();
  }

}

Как избавиться от ненужного нуля?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

а аффтар чо говорит?

andrey3824
Offline
Зарегистрирован: 17.03.2020

Автора пока не пытал..

andrey3824
Offline
Зарегистрирован: 17.03.2020

По тому скетчу до таких показаний не доходит, поэтому у него таких вопросов не возникало скорее всего

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

значить, добивай до необходимой длины пробелами.  Или прочиталь чонить за функцию sprintf().

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ну или вставь в 64й и 83-й строке в кавычки еще 1-2 пробела. 

andrey3824
Offline
Зарегистрирован: 17.03.2020

Помогло с пробелами, спасибо)

andrey3824
Offline
Зарегистрирован: 17.03.2020

Еще прикрутил к нему энкодер. Аппаратно привязал.
Собрал схемку на двух триггерах