【Arduino】PWM出力をアナログ入力(5)に折り返して現在値をLCDに表示

PWM出力をアナログ入力(5)に折り返して現在値をLCDに表示
ゴチャゴチャしてたので修正しました。

お約束:#includeのあとの<>は半角に修正して下さい。


#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LCD表示用宣言
const int PIN_PWM = 3; // ピン3(PWM)を宣言
const int PIN_Analog_Input = 5; // ピンA5(Analog)を宣言
float V_OUT = 0; // 出力電圧の宣言と初期値0
int pwmOut = 0; // pwmのOut値
int intCount = 0; // ループ回数を宣言と初期値0
// int pwmOut = (int) V_OUT * 51;

void setup()
{
// 起動画面
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 (intCount = 0; intCount <= 255;intCount++){ // intCountを0~255までループ
// PWM出力
pwmOut = intCount;
analogWrite( PIN_PWM, pwmOut ); // pwmOut(0~255)の値をPWM出力

// アナログ入力
int input_value = analogRead(PIN_Analog_Input); // input_value=アナログ入力
int convert_v = (input_value*5)/1024; //10ビット値を出力

// LCD上段(PWM出力)を表示
lcd.setCursor(0, 0); /* 0列0行から表示する */
lcd.print("PWM:"); /* 「PMW:」を表示 */
lcd.setCursor(4, 0); /* 4列0行から表示する */
lcd.print(intCount); /* intCountの値を表示 */
lcd.setCursor(9, 0); /* 9列0行から表示する */
lcd.print("i:"); /* 「i:」を表示 */
lcd.setCursor(11, 0); /* 11列0行から表示する */
lcd.print(pwmOut); /* pwmOutの値を表示 */

// LCD下段(アナログ入力)を表示
lcd.setCursor(0, 1); /* 0列1行から表示する */
lcd.print("A:"); /* 「A:」を表示 */
lcd.setCursor(2, 1); /* 2列1行から表示する */
lcd.print(input_value); /* input_value(アナログ入力) */

lcd.setCursor(6, 1); /* 6列1行から表示する */
lcd.print("c:"); /* 「c:」を表示 */
lcd.setCursor(8, 1); /* 8列1行から表示する */
lcd.print(convert_v); /* convert_v(10ビット値)表示 */

delay(300); // 300msec待つ
lcd.clear(); // LCDをクリア
}
}
     


と、やってみましたが、失敗に終わりました。
PWMがアナログ出力ではなくあくまでもデューティー比を変えているだけなので
テスターのように低速ではないため都合よく刈り取れないようです。
0や1023が大半でした。。。
本来のアナログを入力してやればもう少しいい結果が出るかとは思うのですが。。。

このままではPWMを使ったパルス発生器くらいにしか利用用途が思いつかない。。。

この記事へのコメント