attachInterrupt() и LCD 1602 вместе

zerojj
Offline
Зарегистрирован: 01.06.2015

Доброго времени суток, господа. 

Собираюсь делать тахометр, основаный на части датчика Холла, и выводить значения на экран. Так сказать тахометр. Но возникла небольшая проблема. В мануале про 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++;
}

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

zerojj, дисплей можно на любые выводы сажать. Посмотрите внимательно на примеры использования дисплея, в скетче всегда указывается на какие пины вы его подключили.

Кстати этот код тахометра вы где взяли? В 14 строке очень плохое решение.

zerojj
Offline
Зарегистрирован: 01.06.2015

Конкретно со временем проблема? Может погорячились. Если поставить 100 или 1000, должно работать? 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

zerojj пишет:

Конкретно со временем проблема? Может погорячились. Если поставить 100 или 1000, должно работать? 

Нужно указывать или интервал или факт прохода нужного отрезка (>=). А просто отловить 10 мсек. может не получиться - просто проскочите...

Поставьте ">="

К тому-же по смыслу там должно быть 60000.

vov4ik
Offline
Зарегистрирован: 10.09.2013

1602 тяпает 6 контактов  

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);    //RS,E,D4,D5,D6,D7  

R/W при высоком уровне переключает экран для чтения вроде, поэтому просто посадить на ноль

контраст надо внимательно смотреть на экран, в некоторых на контрасность есть резисторы внутренние, а в некоторых надо использовать внешние.