Есть проблема, посчитать импульсы и вывести на LCD

Kolyanchyk
Offline
Зарегистрирован: 27.02.2013

  Добрый день! Есть у меня такая задача. надо ардуинкой посчитать импульсы , суммировать их и вывести на экран ЛСД. Экран 1602. Ардуино Мега. 

Вход активный +5 вольт подаётся.

Сигналы, это прерывания +5 вольт, тоесть просаживает на землю с задержкой 100 мс HIGH и 100 мс LOW.

Приблизительно сделал вот так ---

#include <LiquidCrystalRus.h>
const int Pin=12;  // контакт 12 на ардуинке принимать будет сигнал
const int ledPin=13;    // диод на ардуинке должен моргать
int ledState=HIGH;      //
int State;
int lastState=LOW;
long lastDebTime=0;     // задержка я так понял в 0
long debDelay=50;       // читать с интервалом в 50 милисекунд
LiquidCrystalRus lcd(22, 24, 26, 28, 30, 32);
void setup()            // загрузка
{
  Serial.begin(9600);
  lcd.begin(16, 2);            // Инициализируем экран.
  lcd.print("Привет!");  //напечатаем приветствие
  lcd.setCursor(0, 1);         // занимаем первое место курсора
                                      // пишем в нижнем рядке
  lcd.print("У тебя ноль"); // функция принт выводит на печать в экране.
  delay(500);
  pinMode(Pin,INPUT); // ставим пин №12 во вход
  pinMode(ledPin,OUTPUT);  // ствим пин №13 в выход
  }

void loop()
{

  int reading=digitalRead(Pin); // читаем вход 12

  if (reading!=lastState)       // если при чтении последнее значение не равно
                                            // lastState то делаем следующее
  {
    lastDebTime=millis();            // считаем последнее прерывание в милисекундах
  }
 
  if ((millis()-lastDebTime)>debDelay)  //если прерывание минус последнее время больше задержки
  {
   State=reading;    // значит стейт читается
  }
 
  digitalWrite(ledPin, State);  // и выводится на светодиод
  lastState=reading;
}

Это будет датчик настольного хокея. ))) Чтоб на экране светились количество забитых голов.

Вообщем помогите кто сможет. )

leshak
Offline
Зарегистрирован: 29.09.2011

Ну во первых, обычно когда просят помощи - пишут что-же идет не так как ожидается. Иначе приходится гадать.

Гадаем:

у вас в скетче не видно что-бы вы где-то подсчитывали количество забитых. Явно просится еще одна переменная, скажем golCounter и там где вы "засчитываете гол", нужно его увеличивать. golCounter++ делать.

Ну и в конце, так же как вы выводите на ledPin, нужно на экран этот golCounter выводить.

Ну и, по всей видимости, в будущем вы захотите что-бы у вас светодио, все-таки, гас через какой-то время.

А значет, там где вы делате State=reading(), - вам нужно запоминать еще и время включения его. А дальше - по аналогии с тем как вы уже делали

if(millis()-onLedTime>1000) - гасим.