#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 4);
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
#define ENCODER_CLK 2
#define ENCODER_DT 3
#define ENCODER_BTN 4
int8_t MT1[11] = { B00010001, B00011000, 0, 0, 0, B00010010, B00110100, B01011000, B00000010, 0, 0};
int8_t MT80[11] = { B00000010, B10000000, 0, B00011000, 0, 0, B00010010, B00110100, B00010001, B00010000, B00010001};
char* MODE[] = {"NO USE", "A1A", "A1A_N", "A1A_W", "A2A ", "A3B ",
"A3C ", "A3D ", "A3E ", "A3E_C ", "A3E_W ",
"B3E ", "B7B ", "B7D ", "B8E", "F1A",
"F1B ", "F2B ", "F3E ", "F3E_C ", "F3E_W ",
"F7B ", "F9B ", "F9D ", "H2A ", "H3E ",
"J2E ", "J2D ", "J3E ", "J3E_C ", "J3E_D ",
"J3E_L ", "J3E_W ", "J7B ", "J7D_C ", "J7D ",
"X1B ", "F1B_T ", "F1B_U ", "F1B_L ", "F9W ",
"G1B ", "YOBI ", "YOBI ", "YOBI", "YOBI",
"YOBI ", "YOBI ", "YOBI ", "YOBI", "YOBI",
"USB ", "LSB ", "ISB ", "CW", "DATA",
"LINK ", "YOBI ", "YOBI ", "YOBI", "YOBI",
};
char* CH[] = {"NOUSE", "1 ", "2 ", "3 ", "4 ", "5 ",
"6 ", "7 ", "8 ", "9 ", "10 ",
"11 ", "12 ", "13 ", "14 ", "15 ",
"16 ", "17 ", "18 ", "19 ", "20 "
};
char* FREQ[10];
char* POW[] = {"NO", "1W", "-", "-", "50W", "100W", "1000W" };
int8_t cc ;
int8_t lng = 11;
static uint8_t bcd2bin (uint8_t val) {
return val - 6 * (val >> 4);
}
void setup() {
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_BTN, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
// put your setup code here, to run once:
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("ORC-61F MOGI SET ");
lcd.print("VER 0.0");
delay(500);
// Print a message to the LCD.
lcd.setCursor(0, 0);
lcd.print("FREQ: MOGI ");
lcd.setCursor(0, 1);
lcd.setCursor(0, 1);
lcd.setCursor(0, 2);
lcd.print("SIYO TX TUNE ");
lcd.setCursor(0, 3);
lcd.print("CH+ CH- MOD+ MOD- ");
Serial.begin(2400); // 2400bpsでシリアルポートを開く
}
int lastClk = HIGH; //ロータリエンコーダ
// リードエンコーダ
void readEncoder() {
int dtValue = digitalRead(ENCODER_DT);
if (dtValue == HIGH) {
Serial.println("Rotated clockwise ⏩");
}
if (dtValue == LOW) {
Serial.println("Rotated counterclockwise ⏪");
}
}
void loop() {
mySerial.begin(4800); // ソフトウェアシリアルの初期化
mySerial.println("Hello, world?");
// disp_cx_cont();
disp_cx_Status();
SET_MT1();
}
void disp_cx_Status() {
// Print a message to the LCD.
lcd.setCursor(0, 0);
lcd.print("FREQ: STAT");
lcd.setCursor(6, 0);
//FREQ=MT1[];
lcd.print(MT80[6], HEX);
lcd.setCursor(8, 0);
lcd.print(MT80[7], HEX);
lcd.setCursor(10, 0);
lcd.print(MT80[8], HEX);
lcd.setCursor(12, 0);
lcd.print("Hz");
lcd.setCursor(0, 1);
lcd.print("CH MOD PO ");
lcd.setCursor(2, 1);
lcd.print(CH[ (bcd2bin(MT80[3]))]); //CH
lcd.setCursor(9, 1);
// int8_t MO = bcd2bin(MT80[1]);
lcd.print(MODE[(bcd2bin(MT80[10]))]); //MODE
lcd.setCursor(16, 1);
lcd.print(POW[bcd2bin(MT80[0])]); //POW
lcd.setCursor(0, 2);
// print(POW[bcd2bin(MT80[0])]);
lcd.print("SIYO TX TUNE ");
lcd.setCursor(0, 3);
lcd.print("REMOTO- ");
}
void disp_cx_cont() {
// Print a message to the LCD.
lcd.setCursor(0, 0);
lcd.print("FREQ: MOGI ");
lcd.setCursor(6, 0);
//FREQ=MT1[];
lcd.print(MT1[5], HEX);
lcd.setCursor(8, 0);
lcd.print(MT1[6], HEX);
lcd.setCursor(10, 0);
lcd.print(MT1[7], HEX);
lcd.setCursor(12, 0);
lcd.print("Hz");
lcd.setCursor(0, 1);
lcd.print("CH MOD PO ");
lcd.setCursor(2, 1);
lcd.print(CH[ (bcd2bin(MT1[1]))]); //CH
lcd.setCursor(9, 1);
int8_t MO = bcd2bin(MT1[1]);
lcd.print(MODE[(bcd2bin(MT1[0]))]); //MODE
lcd.setCursor(16, 1);
lcd.print(POW[bcd2bin(MT1[10])]); //POW
lcd.setCursor(0, 2);
lcd.print("SIYO TX TUNE ");
lcd.setCursor(0, 3);
lcd.print("CH+ CH- MOD+ MOD- ");
}
void SET_MT1() {
Serial.println(B10111101, HEX); // STX BD
Serial.print(lng, HEX); // LHG 0B
Serial.print("\t");
Serial.print(B00000001, HEX); // MT1 01
Serial.println("\t");
cc = lng + 1;
for (int x = 0; x < 10; x++) { // ASCIIコード表を出力
Serial.print(x, HEX);
Serial.print("\t");
Serial.print(MT1[x], HEX); // ASCIIコードを十六進数で出力
cc = cc + MT1[x];
Serial.print("\t");
Serial.print(MT1[x], BIN); // ASCIIコードを十六進数で出力
Serial.print(" CC("); // 改行 Serial.print(cc, BIN); // ASCIIコードを十六進数で出力
Serial.print(cc, BIN); // ASCIIコードを十六進数で出力 Serial.println("]"); // 改行
Serial.println(")"); // 改行 Serial.print(cc, BIN); // ASCIIコードを十六進数で出
delay(200);
}
cc = int8_t (~cc) + 1;
Serial.print(int8_t(cc), BIN); // ASCIIコードを十六進数で出力
Serial.println("cc"); // 改行
Serial.println(B11101101, HEX); // ETX ED
Serial.println(B11101101, HEX); // ETX ED
Serial.println(int(cc), HEX); // CC
Serial.println(int(cc), HEX); // CC
Serial.println(""); // 改行
//hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
Serial.println("stxlngMT 1 2 3 4 5 6 7 8 9 0 ");
Serial.print(B10111101, HEX); // STX BD
mySerial.print(B10111101, HEX); // STX BD
Serial.print(" ");
Serial.print(lng, HEX); // LHG 0B
mySerial.print(lng, HEX); // LHG 0B
Serial.print(" ");
Serial.print(B00000001, HEX); // MT1 01
mySerial.print(B00000001, HEX); // MT1 01
Serial.print(" ");
cc = lng + 1;
for (int x = 0; x < 10; x++) { // ASCIIコード表を出力
// Serial.print(x, HEX);
Serial.print(" ");
Serial.print(MT1[x], HEX); // ASCIIコードを十六進数で出力
mySerial.print(MT1[x], HEX); // ASCIIコードを十六進数で出力
cc = cc + MT1[x];
Serial.print(" ");
//Serial.print(MT1[x], BIN); // ASCIIコードを十六進数で出力
//Serial.print(" CC("); // 改行 Serial.print(cc, BIN); // ASCIIコードを十六進数で出力
//Serial.print(cc, BIN); // ASCIIコードを十六進数で出力 Serial.println("]"); // 改行
//Serial.println(")"); // 改行 Serial.print(cc, BIN); // ASCIIコードを十六進数で出
}
cc = int8_t (~cc) + 1;
// Serial.print(int8_t(cc), BIN); // ASCIIコードを十六進数で出力
// Serial.println("cc"); // 改行
Serial.print(B11101101, HEX); // ETX ED
mySerial.print(B11101101, HEX); // ETX ED
Serial.print(" "); // 改行
Serial.println(int(cc), HEX); // CC
mySerial.println(int(cc), HEX); // CC
Serial.println(""); // 改行
delay(200);
}
byte decToBcd(byte val) {
return ( (val / 10 * 16) + (val % 10) );
}