【Arduino】PWM出力(3pin)を周波数カウンターで読み取りLCD表示する。(失敗)

車やバイクにあるタコメータをArduinoで作ってみたいと思いネットを徘徊すると
周波数カウンタのライブラリを公開しているサイトがありました。
http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/

PWM出力を折り返して入力すればいいのでは?
と適当にプログラムを組んでみるも根本的な問題で失敗です。(一応下記に残してみました。)

根本的な問題とは、
このライブラリですが周波数カウンタの入力端子が5pin固定なんですよ…。
5pinは既にLCDで使ってます。orz
色んなトコに「digitalPin 5」って書いてありました。。。
ライブラリを改変するかLCD側を変更するか…。
チト考えます。。。

// PWM出力(3pin)を周波数カウンターで読み取りLCD表示する

#include <FreqCounter.h> // 周波数カウンター
#include <LiquidCrystal.h> // LCD表示

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LCD表示用宣言
const int PIN_PWM = 3; // ピン3(PWM出力)を定数宣言 constは定数宣言
float V_OUT = 0; // 出力電圧の宣言と初期値0
int intCount = 0; // ループ回数を宣言と初期値0
// int i = 0; // ループ回数を宣言と初期値0
// int i = (int) V_OUT * 51;
long int frq; // 周波数用の変数(frq)を宣言

void setup()
{
// 周波数カウンター
Serial.begin(57600); // シリアルポートに接続
Serial.println("Frequency Counter");

// LCDによる初期画面
lcd.begin(16, 2); /* LCDの設定(16文字2行) */
lcd.clear(); /* LCDのクリア */
lcd.setCursor(0, 0); /* 0列0行から表示する */
lcd.print("Cygnus X Project"); /* 文字列の表示 */
delay(500); // 0.5秒間表示
lcd.clear(); /* LCDのクリア */
}

void loop(){
for (int intCount = 0; intCount <= 255;intCount++){ // intCountを0~255までループ
analogWrite( PIN_PWM, intCount ); // intCountの値をPWM出力

// 周波数用
FreqCounter::f_comp= 8; // Set compensation to 12
FreqCounter::start(100); // 0.1秒待ってカウントする?
while (FreqCounter::f_ready == 0) // 準備が出来るまで待つ
frq=FreqCounter::f_freq; // 結果を読み込み
delay(20);


// PWM出力値をLCD表示
lcd.setCursor(0, 0); /* 0列0行から表示する */
lcd.print("PWM:"); /* 文字列の表示 */
lcd.setCursor(4, 0); /* 4列0行から表示する */
lcd.print(intCount); /* 文字列の表示 */

lcd.setCursor(9, 0); /* 9列0行から表示する */
lcd.print("frq:"); /* 文字列の表示 */
lcd.setCursor(13, 0); /* 11列0行から表示する */
lcd.print(frq); /* 文字列の表示 */

lcd.setCursor(0, 1); /* 0列1行から表示する */
lcd.print("Cygnus X Project"); /* 文字列の表示 */

delay(300); // 300msec待つ

lcd.clear(); // LCDをクリア
}}



     << 追記 >>
LCDの配線を嫌々ですが変更しました。
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LCD表示用宣言
              ↓
LiquidCrystal lcd(8, 9, 4, 2, 6, 7); // LCD表示用宣言

ただし周波数カウンタとPWMが競合(?)するようで
同時使用はNGでした…。orz
普通に走らせるとPWMが出力しない…。
正確に書くとPWMは0-255まで指定できるが255でON、0-254はOFFになる。
しかも周波数カウントも出来ない罠www

仕方ないので2台使ってPWM出力専用機から
周波数カウンタ専用機へ出力を渡せば出来るようです。。。

PWM出力専用ならArduino nanoでも買うかな…。

     

この記事へのコメント