attachInterrupt() и LCD 1602 вместе
- Войдите на сайт для отправки комментариев
Пнд, 01/06/2015 - 11:51
Доброго времени суток, господа.
Собираюсь делать тахометр, основаный на части датчика Холла, и выводить значения на экран. Так сказать тахометр. Но возникла небольшая проблема. В мануале про attachInterrupt() говорится, что можно считывать сигналы только со второго и третьего цифрового пина.
А в мануале про подключение экрана говорится, что второй и третий пин тоже будут использоваться
Можно как-то все это добро соеденить?
Собираюсь использовать вот этот код, но экран еще не "прицеплен"
// read RPM volatile int rpmcount = 0; int rpm = 0; unsigned long lastmillis = 0; void setup(){ Serial.begin(9600); attachInterrupt(0, rpm_fan, FALLING);//interrupt cero (0) is on pin two(2). } void loop(){ if (millis() - lastmillis == 10){ //Uptade every one second, this will be equal to reading frecuency (Hz). detachInterrupt(0); //Disable interrupt when calculating rpm = rpmcount * 6000; // Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use rpmcount * 30. Serial.print("RPM =\t"); //print the word "RPM" and tab. Serial.print(rpm); // print the rpm value. Serial.print("\t Hz=\t"); //print the word "Hz". Serial.println(rpmcount); //print revolutions per second or Hz. And print new line or enter. rpmcount = 0; // Restart the RPM counter lastmillis = millis(); // Uptade lasmillis attachInterrupt(0, rpm_fan, FALLING); //enable interrupt } } void rpm_fan(){ // this code will be executed every time the interrupt 0 (pin2) gets low. rpmcount++; }
zerojj, дисплей можно на любые выводы сажать. Посмотрите внимательно на примеры использования дисплея, в скетче всегда указывается на какие пины вы его подключили.
Кстати этот код тахометра вы где взяли? В 14 строке очень плохое решение.
Конкретно со временем проблема? Может погорячились. Если поставить 100 или 1000, должно работать?
Конкретно со временем проблема? Может погорячились. Если поставить 100 или 1000, должно работать?
Нужно указывать или интервал или факт прохода нужного отрезка (>=). А просто отловить 10 мсек. может не получиться - просто проскочите...
Поставьте ">="
К тому-же по смыслу там должно быть 60000.
1602 тяпает 6 контактов
LiquidCrystal lcd(13, 12, 11, 10, 9, 8); //RS,E,D4,D5,D6,D7
R/W при высоком уровне переключает экран для чтения вроде, поэтому просто посадить на ноль
контраст надо внимательно смотреть на экран, в некоторых на контрасность есть резисторы внутренние, а в некоторых надо использовать внешние.