#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//#include <AD9833.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display1$0330
//AD9833 AD(10, 11, 13); // SW SPI over the HW SPI pins (UNO);
// AD(10);
// HW SPI
//-------------------------------------------------------
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
#define ERRORR 6
/**************************************************************/
/*関数名:read_LCD_buttons*/
/*動作;A0ポートの電圧値から押されたボタンを判別*/
/**************************************************************/
int read_LCD_buttons(int adc_key_in)
{
if (adc_key_in > 1000) return btnNONE; //1023, 戻り値5, 5.00V
if (adc_key_in < 50) return btnRIGHT; //0 , 戻り値0, 0V
if (adc_key_in < 250) return btnUP; //144 , 戻り値1, 0.70V
if (adc_key_in < 450) return btnDOWN; //329 , 戻り値2, 1.61V
if (adc_key_in < 650) return btnLEFT; //504 , 戻り値3, 2.47V
if (adc_key_in < 850) return btnSELECT; //741 , 戻り値4, 3.62V
/* 全てのifが失敗(通常はこれを返さない)*/
return ERRORR;
}
/**************************************************************/
/*関数名:out_analog_volt*/
/*動作;A0ピンの電圧値を表示*/
/**************************************************************/
void out_analog_volt(int adc_key_in)
{
lcd.setCursor(6,1);
lcd.print((float)adc_key_in);
lcd.print((float)adc_key_in*5/1024);
}
/**************************************************************/
/*関数名:out_analog_state*/
/*動作;押されたボタンをLCDに表示*/
/**************************************************************/
void out_analog_state(int lcd_key)
{
lcd.setCursor(0,1);
switch (lcd_key)
{
case btnRIGHT:
{
lcd.print("RIGHT ");
break;
}
case btnLEFT:
{
lcd.print("LEFT ");
break;
}
case btnUP:
{
lcd.print("UP ");
break;
}
case btnDOWN:
{
lcd.print("DOWN ");
break;
}
case btnSELECT:
{
lcd.print("SELECT");
break;
}
case btnNONE:
{
lcd.print("NONE ");
break;
}
case ERRORR:
{
lcd.print("ERROR ");
break;
}
}
}
/**************************************************************/
/*関数名:setup*/
/*動作;LCDの初期化*/
/**************************************************************/
void setup()
{
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Push the buttons");
lcd.setCursor(8,1);
lcd.print("A0 V");
}
/**************************************************************/
/*関数名:loop*/
/*動作;メイン処理*/
/**************************************************************/
void loop()
{
int lcd_key = 0;
lcd_key = read_LCD_buttons(analogRead(A0));
out_analog_state(lcd_key);
out_analog_volt(analogRead(A0));
}