Нужна помощь по тахометру на Digispark-е

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

Исправил, изменений нет.

evgta
Offline
Зарегистрирован: 02.09.2016

Гопнег пишет:

Исправил, изменений нет.


А в 27 и 28 где bbb=vr1 и vr2 ?

И скетч снова выложить

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017
if (digitalRead(dath)==HIGH &&xxx ==0){vr1=bbb;xxx=1;}
if (digitalRead(dath)==LOW  &&xxx ==1){vr2=bbb;xxx=0;}

Так?

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017
#include <OLED_I2C.h>
OLED myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];


int dath= 12;
int xxx=0;
unsigned long vr1;
unsigned long vr2;
unsigned long TpperUP;
unsigned long TpperDOWN;
unsigned long Tpper;
int aaa = 0;
unsigned long bbb;
unsigned long ccc;

void setup() {
Serial.begin(9600);
pinMode(dath, INPUT_PULLUP);
myOLED.begin();
  myOLED.setFont(MegaNumbers);
  myOLED.clrScr();


}
void loop() {
if (digitalRead(dath)==HIGH &&xxx ==0){vr1=bbb;xxx=1;}
if (digitalRead(dath)==LOW  &&xxx ==1){vr2=bbb;xxx=0;}
bbb = micros();
if (xxx==1){TpperUP=vr1-vr2;}  //считает верхний полупериод
if (xxx==0){TpperDOWN=vr2-vr1;}   // считает нижний полупериод
Tpper=(TpperUP+TpperDOWN)*2; // Пробовал и так...
//ccc = millis - bbb;

aaa=60000000/Tpper;
if (micros() - bbb>200000) {aaa = 0;}

    myOLED.clrScr();
    myOLED.printNumI((aaa), LEFT, 25);
    myOLED.update();
    myOLED.clrScr();
    
Serial.println(aaa);
//delay(100);



}

Сейчас при старте 1, что явно лучше 1972))

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

Еще допилил.

#include <OLED_I2C.h>
OLED myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];


int dath= 12;
int xxx=0;
unsigned long vr1;
unsigned long vr2;
unsigned long TpperUP;
unsigned long TpperDOWN;
unsigned long Tpper;
int aaa = 0;
unsigned long bbb;
unsigned long ccc;

void setup() {
Serial.begin(9600);
pinMode(dath, INPUT_PULLUP);
myOLED.begin();
  myOLED.setFont(MegaNumbers);
  myOLED.clrScr();


}
void loop() {
if (digitalRead(dath)==HIGH &&xxx ==0){vr1=bbb;xxx=1;}
if (digitalRead(dath)==LOW  &&xxx ==1){vr2=bbb;xxx=0;}
bbb = micros();
if (xxx==1){TpperUP=vr1-vr2;}  //считает верхний полупериод
if (xxx==0){TpperDOWN=vr2-vr1;}   // считает нижний полупериод
Tpper=(TpperUP+TpperDOWN); // Пробовал и так...
//ccc = millis - bbb;

aaa=30000000/Tpper;
if (micros() - bbb>200000) {aaa = 0;}

    myOLED.clrScr();
    myOLED.printNumI((aaa), LEFT, 25);
    myOLED.update();
    myOLED.clrScr();
    
Serial.println(aaa);
//delay(100);



}

 

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

Сейчас думки насчет сброса при отсутствии импульсов более 5 секунд.

evgta
Offline
Зарегистрирован: 02.09.2016

Не так. Строчку с микрос обратно верни.
И не vb1=bbb a bbb=vb1

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

А не одно ли и то же это равенство?

И какую именно строчку?

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

evgta пишет:
Не так. Строчку с микрос обратно верни. И не vb1=bbb a bbb=vb1

Сменил- отсчет встал.

evgta
Offline
Зарегистрирован: 02.09.2016

В 27 и 28 ты стёр vb1=micros(). Не надо это стирать.
А есть ли разница у Васи пять яблок или Вася у пяти яблок?

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

evgta пишет:
В 27 и 28 ты стёр vb1=micros(). Не надо это стирать. А есть ли разница у Васи пять яблок или Вася у пяти яблок?

Прикольная аллегория)) Сейчас верну. 

vr1=bbb в тех же строчках вставить?

 

 

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

Вернул vb1=micros(), стало 1973 при старте.

evgta
Offline
Зарегистрирован: 02.09.2016

Гопнег пишет:

evgta пишет:
В 27 и 28 ты стёр vb1=micros(). Не надо это стирать. А есть ли разница у Васи пять яблок или Вася у пяти яблок?

Прикольная аллегория)) Сейчас верну. 

vr1=bbb в тех же строчках вставить?

 

 


Да

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017
#include <OLED_I2C.h>
OLED myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];


int dath= 12;
int xxx=0;
unsigned long vr1;
unsigned long vr2;
unsigned long TpperUP;
unsigned long TpperDOWN;
unsigned long Tpper;
int aaa = 0;
unsigned long bbb;
unsigned long ccc;

void setup() {
//Serial.begin(9600);
pinMode(dath, INPUT_PULLUP);
myOLED.begin();
  myOLED.setFont(MegaNumbers);
  myOLED.clrScr();


}
void loop() {
if (digitalRead(dath)==HIGH &&xxx ==0){vr1=micros();xxx=1;vr1=bbb;}
if (digitalRead(dath)==LOW  &&xxx ==1){vr2=micros();xxx=0;vr2=bbb;}
bbb = micros();
if (xxx==1){TpperUP=vr1-vr2;}  
if (xxx==0){TpperDOWN=vr2-vr1;}  
Tpper=(TpperUP+TpperDOWN); 

aaa=30000000/Tpper;

if (micros() - bbb>200000) {aaa = 0;}

    myOLED.clrScr();
    myOLED.printNumI((aaa), LEFT, 25);
    myOLED.update();
    myOLED.clrScr();
    
//Serial.println(aaa);




}

 

evgta
Offline
Зарегистрирован: 02.09.2016

Где Вася и где яблоки? Когда местами поменяешь?
29 строка лишняя

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

evgta пишет:
Где Вася и где яблоки? Когда местами поменяешь?

Меняю- при старте вместо 1 вижу 1973.

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

29 точно лишняя.

evgta
Offline
Зарегистрирован: 02.09.2016

Скетч покажи

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017
#include <OLED_I2C.h>
OLED myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];
int dath= 12;
int xxx=0;
unsigned long vr1;
unsigned long vr2;
unsigned long TpperUP;
unsigned long TpperDOWN;
unsigned long Tpper;
int aaa = 0;
unsigned long bbb;

void setup() {
//Serial.begin(9600);
pinMode(dath, INPUT_PULLUP);
myOLED.begin();
  myOLED.setFont(MegaNumbers);
  myOLED.clrScr();
}
void loop() {
if (digitalRead(dath)==HIGH &&xxx ==0){vr1=micros();xxx=1;bbb=vr1;}
if (digitalRead(dath)==LOW  &&xxx ==1){vr2=micros();xxx=0;bbb=vr2;}
if (xxx==1){TpperUP=vr1-vr2;}  
if (xxx==0){TpperDOWN=vr2-vr1;}  
Tpper=(TpperUP+TpperDOWN); 

aaa=30000000/Tpper;

if (micros() - bbb>500000) {aaa = 0;}// !!!

    myOLED.clrScr();
    myOLED.printNumI((aaa), LEFT, 25);
    myOLED.update();
    myOLED.clrScr();
    
//Serial.println(aaa);
}

При старте на секунду вываливается 1973 (что не критично), потом нормальный отсчет, при отсутствии импульсов более 0.5 сек отсчет становится на 0.

По-моему, все заработало.

evgta
Offline
Зарегистрирован: 02.09.2016

Ну и ладно. Это не баг это фича.
Хотя, в строке 31 надо написать
Если микрос меньше двух миллионов тогда ааа равно нулю.

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

Короче, благодарю всех неравнодушных, а отдельно- камрада EVGTA, за помощь и терпеливое объяснение.  Дальше уже более простой допилинг. Буду язык осваивать, а то бейсик тут не особо помогает.

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

evgta пишет:
Ну и ладно. Это не баг это фича. Хотя, в строке 31 надо написать Если микрос меньше двух миллионов тогда ааа равно нулю.

Эта строка дает задержку перед обнулением счетчика, как я понял. Игрался со значениями- менялась задержка. Я про 30. 31 вписал- появилась 2 сек. задержка перед началом отсчета, 1973 уже нет.

evgta
Offline
Зарегистрирован: 02.09.2016

Нет , эта строка с момента старта микроконтроллера две секунды принудительно выводит на дисплей ноль.

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

evgta пишет:
Нет , эта строка с момента старта микроконтроллера две секунды принудительно выводит на дисплей ноль.

Сути это не меняет. Главное- работает. Надо на дигиспарке еще обкатать, т.к. для него все это и планировалось.

evgta
Offline
Зарегистрирован: 02.09.2016

Честно говоря тут не Бейсик не помогает, а проблемы с арифметикой и алгоритмизацией, наверное так правильней.

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

evgta пишет:
Честно говоря тут не Бейсик не помогает, а проблемы с арифметикой и алгоритмизацией, наверное так правильней.

Это, наверное, возрастное))

Загнал скетч в дигиспарк- работает, но не обнуляет при отсутствии импульсов. Точнее, обнуляет только тысячи, не трогая остальные разряды...

#include <DigisparkOLED.h> // Подключил библиотеку OLED- дисплея
#include <Wire.h>

const int dath= 1;
int xxx=0;
unsigned long vr1;
unsigned long vr2;
unsigned long TpperUP;
unsigned long TpperDOWN;
unsigned long Tpper;
int aaa = 0;
unsigned long bbb;

void setup() {

pinMode(dath, INPUT); // задал пин сенсора как вход
  oled.begin(); // Работаю с дисплеем
  oled.clear();
  
  oled.setFont(FONT8X16);
}

void loop() {
if (digitalRead(dath)==HIGH &&xxx ==0){vr1=micros();xxx=1;bbb=vr1;}
if (digitalRead(dath)==LOW  &&xxx ==1){vr2=micros();xxx=0;bbb=vr2;}
if (xxx==1){TpperUP=vr1-vr2;}  
if (xxx==0){TpperDOWN=vr2-vr1;}  
Tpper=(TpperUP+TpperDOWN); 

aaa=30000000/Tpper;

if (micros() - bbb>500000) {aaa = 0;}
if (micros() <2000000) {aaa = 0;}// !!!

    oled.setCursor(60, 2);
    oled.print((aaa));
    //oled.clear();
}

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

а зачем вы 

bbb = millis();

вынесли в отдельную строку? так не будет работать

MaksVV
Offline
Зарегистрирован: 06.08.2015

эм не успел)

MaksVV
Offline
Зарегистрирован: 06.08.2015

нужно наверное затирание "старых" цифр сделать или строку 37 раскоментировать

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

MaksVV пишет:

нужно наверное затирание "старых" цифр сделать или строку 37 раскоментировать

Насчет затирания- может быть, а строку раскомментировать точно не нужно- тут очистка экрана работает с дикой задержкой ака delay(500) или даже побольше.

evgta
Offline
Зарегистрирован: 02.09.2016

Попробовать ааа объявить ансигнед Лонг?

А вообще с этим дисплеем не работал и не знаю что ему надо,
Но и вывод данных на дисплей в каждом цикле это неправильно, надо выводить данные только тогда когда они (данные) изменились по сравнению с предыдущими

В принципе через функцию это делается элементарно.

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

И как же это сделать?

MaksVV
Offline
Зарегистрирован: 06.08.2015

да можно просто раз в 10 мс например. Достаточно будет 

#include <DigisparkOLED.h> // Подключил библиотеку OLED- дисплея
#include <Wire.h>

const int dath= 1;
int xxx=0;
unsigned long vr1;
unsigned long vr2;
unsigned long TpperUP;
unsigned long TpperDOWN;
unsigned long Tpper;
int aaa = 0;
unsigned long bbb;
unsigned long prev=0;


void setup() {

pinMode(dath, INPUT); // задал пин сенсора как вход
  oled.begin(); // Работаю с дисплеем
  oled.clear();
  
  oled.setFont(FONT8X16);
}

void loop() {
if (digitalRead(dath)==HIGH &&xxx ==0){vr1=micros();xxx=1;bbb=vr1;}
if (digitalRead(dath)==LOW  &&xxx ==1){vr2=micros();xxx=0;bbb=vr2;}
if (xxx==1){TpperUP=vr1-vr2;}  
if (xxx==0){TpperDOWN=vr2-vr1;}  
Tpper=(TpperUP+TpperDOWN); 

aaa=30000000/Tpper;

if (micros() - bbb>500000) {aaa = 0;}
if (micros() <2000000) {aaa = 0;}// !!!

iа (millis()-prev>10) {

  oled.setCursor(60, 2);
    oled.print((aaa));
    if (aaa<100) oled.print("   ");
    if (aaa>=100&&<1000) oled.print("  ");
    if (aaa>=1000&&<10000) oled.print(" ");
  prev = millis(); }
    
    
}

 

evgta
Offline
Зарегистрирован: 02.09.2016

Я с калькулятора писать немогу.

Сначала создаём функцию например "disp"
Переносим в нее из цикла строки связанные с дисплеем.
Вместо строк дисплея в цикле ставим вызов функции.
Проверяем работу.
Выкладываем скетч сюда.
Ознакомиться с функциями можно тут
http://arduino.ru/Reference

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

MaksVV, Ваш вариант не катит- счет уходит в отрицательное значение.

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

Что-то мне подсказывает, что при добавлении еще одной функции скатч не влезет в 6 кб памяти (сейчас 5.25 кб).

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

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

#include <DigisparkOLED.h> // Подключил библиотеку OLED- дисплея
#include <Wire.h>
const int dath= 1;
int xxx=0;
unsigned long vr1;
unsigned long vr2;
unsigned long TpperUP;
unsigned long TpperDOWN;
unsigned long Tpper;
unsigned long aaa = 0;
unsigned long bbb;
unsigned long prev=0;

void setup() {
pinMode(dath, INPUT); // задал пин сенсора как вход
  oled.begin(); // Работаю с дисплеем
  oled.clear();
  oled.setFont(FONT8X16);
  oled.setCursor(38, 0);
  oled.print("DIGITAL");
  oled.setCursor(25, 2);
  oled.print("TACHYMETER");

}
  
  void loop() {
if (digitalRead(dath)==HIGH &&xxx ==0){vr1=micros();xxx=1;bbb=vr1;}
if (digitalRead(dath)==LOW  &&xxx ==1){vr2=micros();xxx=0;bbb=vr2;}
if (xxx==1){TpperUP=vr1-vr2;} 
if (xxx==0){TpperDOWN=vr2-vr1;} 
Tpper=(TpperUP+TpperDOWN);
aaa=30000000/Tpper;
if (micros() - bbb>500000) {aaa = 0;}
if (micros() <5000000) {aaa = 0;}// !!!
oled.setCursor(60, 6);
  oled.print((aaa*2));
  if (aaa<100) {oled.print("       ");}
  if (aaa>=100&&aaa<1000) {oled.print("     ");}
  if (aaa>=1000&&aaa<10000) {oled.print("   ");}
  

}

 

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

Память тиньки забита почти под завязку))

evgta
Offline
Зарегистрирован: 02.09.2016

Тогда начинаем удалять лишнее.

Ааа делаем ансигнед инт

И печать просто много пробелов не решает проблему ?

В строке 36 убрать умножить на 2

А в строке 32 поставить 60000000

Вместо инт xxx, поставить булеан xxx

Строчку 34 пока заккоментить
А в строке 33 написать если микрос минус vr1 больше 500000 или микрос минус vr2 больше 500000 тогда ааа равно нулю

В строке 27,28 стереть bbb=vr1

Кстати в библиотеке дисплея нет команды печати в новой строке? Типа println?

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

evgta пишет:
Тогда начинаем удалять лишнее. Ааа делаем ансигнед инт И печать просто много пробелов не решает проблему ? В строке 36 убрать умножить на 2 А в строке 32 поставить 60000000 Вместо инт xxx, поставить булеан xxx Строчку 34 пока заккоментить А в строке 33 написать если микрос минус vr1 больше 500000 или микрос минус vr2 больше 500000 тогда ааа равно нулю В строке 27,28 стереть bbb=vr1 Кстати в библиотеке дисплея нет команды печати в новой строке? Типа println?

#include <DigisparkOLED.h> // Подключил библиотеку OLED- дисплея
#include <Wire.h>
const int dath= 1;
boolean xxx=0;
unsigned long vr1;
unsigned long vr2;
unsigned long TpperUP;
unsigned long TpperDOWN;
unsigned long Tpper;
unsigned int aaa = 0;
unsigned long bbb;
unsigned long prev=0;

void setup() {
pinMode(dath, INPUT); // задал пин сенсора как вход
  oled.begin(); // Работаю с дисплеем
  oled.clear();
  oled.setFont(FONT8X16);
  oled.setCursor(38, 0);
  oled.print("DIGITAL");
  oled.setCursor(25, 2);
  oled.print("TACHYMETER");

}
  
  void loop() {
if (digitalRead(dath)==HIGH &&xxx ==0){vr1=micros();xxx=1;}
if (digitalRead(dath)==LOW  &&xxx ==1){vr2=micros();xxx=0;}
if (xxx==1){TpperUP=vr1-vr2;} 
if (xxx==0){TpperDOWN=vr2-vr1;} 
Tpper=(TpperUP+TpperDOWN);
aaa=60000000/Tpper;
if (micros() - vr1>500000)  {aaa = 0;}if (micros() - vr2>500000)  {aaa = 0;}
//if (micros() <5000000) {aaa = 0;}// !!!
oled.setCursor(60, 6);
  oled.print((aaa));
  if (aaa<100) {oled.print("       ");}
  if (aaa>=100&&aaa<1000) {oled.print("     ");}
  if (aaa>=1000&&aaa<10000) {oled.print("   ");}
  

}

Зависает через секунд 10 на одном значении.

println не работает. oled.setCursor(60, 6)  задает точку начала печати. 60 пикселей слева и 6 строка сверху. Кол-во строк зависит от величины шрифта.

 

evgta
Offline
Зарегистрирован: 02.09.2016

оператор ИЛИ есть  http://arduino.ru/Reference

 33 строка if (micros() - vr1>500000 || micros() - vr2>500000)  {aaa = 0;}

evgta
Offline
Зарегистрирован: 02.09.2016

вот выводит данные только тогла когда они изменились

#include <DigisparkOLED.h> // Подключил библиотеку OLED- дисплея
#include <Wire.h>
const int dath= 1;
boolean xxx=0;
unsigned long vr1;
unsigned long vr2;
unsigned long TpperUP;
unsigned long TpperDOWN;
unsigned long Tpper;
unsigned int aaa = 0;
unsigned int ccc = 0;
unsigned long prev=0;

void setup() {
pinMode(dath, INPUT); // задал пин сенсора как вход
  oled.begin(); // Работаю с дисплеем
  oled.clear();
  oled.setFont(FONT8X16);
  oled.setCursor(38, 0);
  oled.print("DIGITAL");
  oled.setCursor(25, 2);
  oled.print("TACHYMETER");

}
  
  void loop() {
if (digitalRead(dath)==HIGH &&xxx ==0){vr1=micros();xxx=1;TpperUP=vr1-vr2;}
if (digitalRead(dath)==LOW  &&xxx ==1){vr2=micros();xxx=0;TpperDOWN=vr2-vr1;}

Tpper=(TpperUP+TpperDOWN);
aaa=60000000/Tpper;
if (micros() - vr1>500000 || micros() - vr2>500000)  {aaa = 0;}
//if (micros() <5000000) {aaa = 0;}// !!!

if (aaa != ccc){disp();}
  

}

void disp(){

oled.setCursor(60, 6);
  oled.print((aaa));
  if (aaa<100) {oled.print("       ");}
  if (aaa>=100&&aaa<1000) {oled.print("     ");}
  if (aaa>=1000&&aaa<10000) {oled.print("   ");}
  ccc=aaa;
}

 

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

Заменил. Так же зависает...

evgta
Offline
Зарегистрирован: 02.09.2016

А вот выводит только тогда когда изменились данные, но если они меняются чаще чем 20 раз в секунду один фиг не увидишь поэтому не чаще 50000 микросекунд

 

наверное должно работать

#include <DigisparkOLED.h> // Подключил библиотеку OLED- дисплея
#include <Wire.h>
const int dath= 1;
boolean xxx=0;
unsigned long vr1;
unsigned long vr2;
unsigned long TpperUP;
unsigned long TpperDOWN;
unsigned long Tpper;
unsigned int aaa = 0;
unsigned int ccc = 0;

unsigned long ddd=0;

void setup() {
pinMode(dath, INPUT); // задал пин сенсора как вход
  oled.begin(); // Работаю с дисплеем
  oled.clear();
  oled.setFont(FONT8X16);
  oled.setCursor(38, 0);
  oled.print("DIGITAL");
  oled.setCursor(25, 2);
  oled.print("TACHYMETER");

}
  
  void loop() {
if (digitalRead(dath)==HIGH &&xxx ==0){vr1=micros();xxx=1;TpperUP=vr1-vr2;}
if (digitalRead(dath)==LOW  &&xxx ==1){vr2=micros();xxx=0;TpperDOWN=vr2-vr1;}

Tpper=(TpperUP+TpperDOWN);
aaa=60000000/Tpper;
if (micros() - vr1>500000 || micros() - vr2>500000)  {aaa = 0;}
//if (micros() <5000000) {aaa = 0;}// !!!

if (aaa != ccc) {if (micros()-ddd>50000){disp();}}
  

}

void disp(){

oled.setCursor(60, 6);
  oled.print((aaa));
  if (aaa<100) {oled.print("       ");}
  if (aaa>=100&&aaa<1000) {oled.print("     ");}
  if (aaa>=1000&&aaa<10000) {oled.print("   ");}
  ccc=aaa;
  ddd = micros();
}

 

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

Так и виснет.

evgta
Offline
Зарегистрирован: 02.09.2016

Что занчит зависает? мк неумеет зависать, что при этом горит? если только питание плохое

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

Последнее значение. Имхуется мне, что где-то переполнение происходит.

evgta
Offline
Зарегистрирован: 02.09.2016

в протеусе на нано норм работает. 

замени ааа и ссс на ансигнет лонг

может проблема в выводе на экран? там затуп?

пепеполниться ничего неможет, при переполнении просто с нуля отсчет ведется

Гопнег
Гопнег аватар
Offline
Зарегистрирован: 24.11.2017

Заменил. Эффекта не дало. Заметил реакцию на дребезг контактов- появляются заоблачные значения оборотов, после этого виснет.

evgta
Offline
Зарегистрирован: 02.09.2016

в 38 строку попробовать поиграться , тк постоянный вывод на дисплей мог роль делей играть

delayMicroseconds(50);

потому что раисование антидребезга может память сожрать

еще кондер 0,1-1 мкф на ногу датчика попробовать повесить