Счётчик деталей

Всем привет!
Есть в интернете простой счётчик деталей. Но он не практичный из за концевика в схеме. Я хочу вместо его поставить ик модуль. Вся проблема заключается в том, как его правильно подключить, чтобы все работало. Когда препятствия нет, на выходе модуля 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);
}



Заранее благодарю!

Обратные апострофы там же, где буква ё на клавиатуре.

Сейчас работает? Нет.

Значит что-то нужно менять, если цель в том, чтобы система заработала.

Или оставить лет на 150 в коробочке и проверить по истечению - произошло ли чудо.

1 лайк

Что надо поменять? Я не особо понимаю.

Найти в коде место чтения входа и применить инверсию к полученной величине.

56 строка

1 лайк

т.к. вместо кнопки стоит датчик, дребезг отсутствует
функцию DebounceButton можно выкинуть, а 54 строку заменить на

INCCurr = !digitalRead(ScanPort);

наверно, но это не точно)

1 лайк

И все? Как до этого можно догадаться, я не знаю. Благодарю. Буду проверять.

Надо концевик на землю переключить.

Да что с тобой сегодня?

для этого достаточно просто логически помыслить и не надо догадываться

Мыслить можно только о том, где ты имеешь хоть какие то знания. У меня их нет в этой области.

А чё тогда полезли?

2 лайка

Есть такая поговорка. Лучшее враг хорошего. Лично как игрушка для себя подойдет. Но на рынке есть куча решений получше. Поэтому если Вы подойдете с таким решением даже к своему знакомому, то его забракуют сразу. :wink:

Потому что решил сделать, в моей работе это нужная вещь.

Найми инженера

Не знаю, я на работу езжу за 20км, так что для меня автомобиль - нужная вещь. И когда мне надо в нём что-то сделать, я иду в сервис, а не задаю вопросы на автофоруме, путая терминологию и не понимая ответов.

3 лайка

Скучные люди - программисты. Вообще ничего не могут делать, кроме как кодить…
Машина сломается - в сервис, рубашку погладить, щи сварить - жена, розетку поменять - электрика зовут, гвоздь забить - плотника. Ну сами ну вообще ничего ни делают и ни у кого ничего не спрашивают… :slight_smile:

1 лайк

То ли дело простой человек - и аппендицит себе вырежет, и движок в газели переберет, и молекулярный шницель приготовит, и газовый вентиль поменяет без стравливания с магистрали, а потом спичкой проверит. Весело живёт!

6 лайков

Всегда есть какая-то грань, между тем что ты можешь сделать сам и, тем что требует помощи специалиста. Главное трезво оценивать свои возможности. Чему то можно и научиться. Вы же не вызываете на дом повара, чтоб он приготовил пищу, уборщицу для уборки квартиры. (хотя может программисты так и живут, я хз)
Много информации в интернете, где все рассказано, что и как делать.