Есть проблема, посчитать импульсы и вывести на LCD
- Войдите на сайт для отправки комментариев
Пт, 29/03/2013 - 15:37
Добрый день! Есть у меня такая задача. надо ардуинкой посчитать импульсы , суммировать их и вывести на экран ЛСД. Экран 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;
}
Это будет датчик настольного хокея. ))) Чтоб на экране светились количество забитых голов.
Вообщем помогите кто сможет. )
Ну во первых, обычно когда просят помощи - пишут что-же идет не так как ожидается. Иначе приходится гадать.
Гадаем:
у вас в скетче не видно что-бы вы где-то подсчитывали количество забитых. Явно просится еще одна переменная, скажем golCounter и там где вы "засчитываете гол", нужно его увеличивать. golCounter++ делать.
Ну и в конце, так же как вы выводите на ledPin, нужно на экран этот golCounter выводить.
Ну и, по всей видимости, в будущем вы захотите что-бы у вас светодио, все-таки, гас через какой-то время.
А значет, там где вы делате State=reading(), - вам нужно запоминать еще и время включения его. А дальше - по аналогии с тем как вы уже делали
if(millis()-onLedTime>1000) - гасим.