#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 display
//AD9833 AD(10, 11, 13); // SW SPI over the HW SPI pins (UNO);
// AD(10);
// HW SPI
#include <Arduino.h>
#include <DigitalButton.h>
// Create multiple button instances
DigitalButton button1(2, true);
DigitalButton button2(3, true);
DigitalButton button3(4, true);
DigitalButton button4(5, true);
DigitalButton button5(6, true);
DigitalButton button6(7, true);
//-------------------------------------------------------
#define btn_1 0 //UP 1
#define btn_2 1 //DOWN
#define btn_3 2 //
#define btn_4 3 //SELECT 4
#define btn_5 4 //SELECT 4
#define btn_NONE 5 //NONE 5
#define ERRORR 6
int SEL_F1 = 4;
int F1[6] = { 700, 1000, 1500, 2000, 3000 };
int SEL_F2 = 2;
int F2[6] = { 700, 1000, 1500, 2000, 3000 };
int SEL_LV = 0;
int SEL_MODE = 2;
int MODE[3];
unsigned mode_m[20] = { "SINE", "2TON", "KEY" };
int SEL_OUT = 0;
int sel_F1;
int sel_F2;
int osc1_setfreq;
/*
ロータリーエンコーダ実験01
*/
int val;
int encoder0PinA = 2;
int encoder0PinB = 3;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;
void osc1(int osc1_setfreq) {
AD9833 AD(10); // HW SPI, select pin 10
SPI.begin();
AD.begin();
AD.setFrequency(osc1_setfreq, 0); // 1000 Hz.
}
/*
/**************************************************************/
/*関数名:read_LCD_buttons*/
/*動作;A0ポートの電圧値から押されたボタンを判別*/
/**************************************************************/
int read_LCD_buttons(int adc_key_in) {
if (adc_key_in > 1000) return btn_NONE; //1023, 戻り値5, 5.00V
if (adc_key_in < 250) return btn_1;
if (adc_key_in < 350) return btn_2; //144 , 戻り値1, 0.70V
if (adc_key_in < 650) return btn_3; //329 , 戻り値2, 1.61V
if (adc_key_in < 750) return btn_4; //504 , 戻り値3, 2.47V
if (adc_key_in < 850) return btn_5; //641 , 戻り値4, 3.62V
/* 全てのifが失敗(通常はこを返さない)*/
return ERRORR;
}
/**************************************************************/
/*関数名:out_analog_volt*/
/*動作;A0ピンの電圧値を表示*/
/**************************************************************/
void out_analog_volt(int adc_key_in) {
lcd.setCursor(10, 2);
// lcd.print((float)adc_key_in);
lcd.setCursor(15, 2);
// lcd.print((float)adc_key_in * (5 / 1024));
}
/**************************************************************/
/*関数名:out_analog_state*/
/*動作;押されたボタンをLCDに表示*/
/**************************************************************/
void out_analog_state(int lcd_key) {
lcd.setCursor(1, 2);
switch (lcd_key) {
case btn_1:
{
lcd.print("bt1 ");
sel_F1++;
if (sel_F1 > 5) {
sel_F1 = 0;
}
F1[1] = F1[sel_F1];
Serial.print("F1[");
Serial.print(F1[sel_F1]);
osc1(F2[sel_F1]);
AD9833 AD(10); // HW SPI, select pin 10
SPI.begin();
AD.begin();
AD.setFrequency(F1[sel_F1], 0); // 1000 Hz.
delay(200);
break;
}
case btn_2: //LEFT:
{
lcd.print("bt2 ");
sel_F2++;
if (sel_F2 > 5) {
sel_F2 = 0;
}
F2[2] = F2[sel_F2];
// Serial.print("F2= ");
// Serial.print(F2[sel_F2]);
AD9833 AD(10); // HW SPI, select pin 10
SPI.begin();
AD.begin();
AD.setFrequency(F2[sel_F2], 0);
delay(300);
break;
}
case btn_3:
{
lcd.print("bt3 ");
SEL_MODE++;
if (SEL_MODE > 5) {
SEL_MODE = 0;
}
//MODE[1] = MODE[SEL_MODE];
//Serial.print(MODE[SEL_MODE]);
AD9833 AD(10); // HW SPI, select pin 10
SPI.begin();
AD.begin();
AD.setWave(AD9833_SINE);
//Serial.print(AD.getWave());
delay(300);
break;
}
case btn_4: //DOWN:
{
lcd.print("bt4 ");
sel_F2++;
if (sel_F2 > 5) {
sel_F2 = 0;
}
F2[1] = F2[sel_F2];
// Serial.print(F2[sel_F2]);
delay(300);
break;
}
case btn_5: //SELECT:
{
lcd.print("bt5");
break;
}
case btn_NONE:
{
lcd.print(" ");
break;
}
case ERRORR:
{
lcd.print("ERROR ");
break;
}
}
}
void setup() {
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("ORT-61F TEST SET ");
lcd.print("VER 0.0");
delay(1000);
// lcd.init();
// Print a message to the LCD.
lcd.setCursor(0, 0);
lcd.print("F1: ");
lcd.setCursor(0, 1);
lcd.print("LV:MUTE ");
lcd.setCursor(0, 2);
lcd.print("MODE:SINE ");
lcd.setCursor(0, 3);
lcd.print("-- F1 --- MOD DW ");
//
//*+++++++++++++++++++++++++++++++++++++
Serial.begin(9600);
AD9833 AD(10); // HW SPI, select pin 10
SPI.begin();
AD.begin();
AD.setWave(AD9833_OFF);
AD.setFrequency(3000, 0); //
// Serial.print(AD.setFrequency(3000, 0));
AD.setWave(AD9833_SINE);
// Serial.print(AD.getWave());
delay(1000);
AD.setWave(AD9833_OFF);
while (!Serial && millis() < 1000);
button1.begin();
button2.begin();
button3.begin();
button4.begin();
button5.begin();
button6.begin();
Serial.println("Multiple Buttons Example");
Serial.println("Button 1: Pin 2, Button 2: Pin 3, Button 3: Pin 4");
}
void loop() {
button1.update();
button2.update();
button3.update();
button4.update();
button5.update();
button6.update();
if (button1.isClicked()) {
Serial.println("Button 1 clicked");
//lcd.print("bt1 ");
sel_F1++;
if (sel_F1 > 5) {
sel_F1 = 0;
}
F1[1] = F1[sel_F1];
Serial.print("F1[");
Serial.print(F1[sel_F1]);
osc1(F2[sel_F1]);
AD9833 AD(10); // HW SPI, select pin 10
SPI.begin();
AD.begin();
AD.setFrequency(F1[sel_F1], 0); // 1000 Hz.
delay(200);
}
if (button2.isClicked()) {
Serial.println("Button 2 clicked");
// lcd.print("bt2 ");
sel_F2++;
if (sel_F2 > 5) {
sel_F2 = 0;
}
F2[2] = F2[sel_F2];
Serial.print("F2= ");
Serial.print(F2[sel_F2]);
AD9833 AD(10); // HW SPI, select pin 10
SPI.begin();
AD.begin();
AD.setFrequency(F2[sel_F2], 0);
delay(300);
}
if (button3.isClicked()) {
Serial.println("Button 3 clicked");
//lcd.print("bt3 ");
SEL_MODE++;
if (SEL_MODE > 5) {
SEL_MODE = 0;
}
MODE[1] = MODE[SEL_MODE];
Serial.print(MODE[SEL_MODE]);
AD9833 AD(10); // HW SPI, select pin 10
SPI.begin();
AD.begin();
AD.setWave(AD9833_SINE);
Serial.print(AD.getWave());
delay(300);
}
if (button4.isClicked()) {
Serial.println("Button 4 clicked");
lcd.print("bt4 ");
sel_F2++;
if (sel_F2 > 5) {
sel_F2 = 0;
}
F2[1] = F2[sel_F2];
// Serial.print(F2[sel_F2]);
delay(300);
}
if (button5.isClicked()) {
Serial.println("Button 5 clicked");
lcd.print("bt5");
}
if (button6.isClicked()) {
Serial.println("Button 6 clicked");
}
delay(10);
}