Есть проблема, посчитать импульсы и вывести на 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) - гасим.