Всем привет!
Есть в интернете простой счётчик деталей. Но он не практичный из за концевика в схеме. Я хочу вместо его поставить ик модуль. Вся проблема заключается в том, как его правильно подключить, чтобы все работало. Когда препятствия нет, на выходе модуля 5 вольт, когда есть -0, с концевиком наоборот. И надо ли что-то менять в коде?
Сам код:
void DispUpdate(void);
boolean DebounceButton(int ScanPort, boolean last);
#define INC 2 //Пин подключения датчика готовой продукции
#define RES 3 //Пин подключения кнопки сброса счетчика
#define CLK 4 //TM1637 CLK
#define DIO 5 //TM1637 DIO
int8_t CountDisp[] = {0x00,0x00,0x00,0x00};
static int Counter = 0; //Значение счетчика будет сохраняться здесь
bool INCCurr = false;
bool INCPrev = false;
/*
* Создаем объект tm1637 класса TM1637
* в качестве параметров передаём ему
* номера пинов к которым подключен модуль
* с дисплеем
*/
TM1637 tm1637(CLK, DIO);
void setup()
{
pinMode(INC, INPUT); //Определяем пины подключения кнопки сброса
pinMode(RES, INPUT); //и датчика готовой продукции как входные
//Инициализация дисплея на базе драйвера TM1637
tm1637.init();
/*
* Установка яркости свечения сегментов
* возможные значения: BRIGHT_TYPICAL либо 2
* BRIGHT_DARKEST либо 0
* BRIGHTEST либо 7
* Также можно вводить значения от 0 до 4
* при вводе начения свыше 4 визуального различия
* в яркости свечения не наблюдается поэтому решено
* остановиться на 3
*/
tm1637.set(2);
}
void loop()
{
//Обнуление счетчика
if(digitalRead(RES))
{
Counter = 0;
}
//Проверка кнопки инкремента - нажатие и обработка "Антидребезг"
INCCurr = DebounceButton(INC, INCPrev);
if(INCPrev == false && INCCurr == true)
{
if(Counter == 9999)
{
Counter = 0;
}
else
{
Counter ++;
}
}
INCPrev = INCCurr;
DispUpdate();
}
//Функция подавления дребезга контактов концевого датчика
boolean DebounceButton(int ScanPort, boolean last)
{
boolean current = digitalRead(ScanPort);
if(current != last)
{
delay(10);
current = digitalRead(ScanPort);
}
return current;
}
//Функция обновления дисплея
//Вывод значения счетчика на дисплей
void DispUpdate(void)
{
int intValue = Counter;
int divValue;
for(int i = 3; i >= 0; i --)
{
divValue = intValue % 10;
intValue = intValue / 10;
CountDisp[i] = divValue;
}
tm1637.display(CountDisp);
}
Заранее благодарю!