#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
#define TX_EN 5
uint8_t MT91[9] = { B00000010, B11111111, B11111110, 0, 0, B11111111, B11111111, B00000011 };
uint8_t MT92[9] = { B00000010, B11111111, B11111111, 0, 0, B11111111, B11111111, B00000011 };
uint8_t send[8];
uint8_t cc ;
uint8_t lng = 8;
uint8_t s1 ;
unsigned long freq = 225000;
char str_freq ;
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);
pinMode(TX_EN, OUTPUT);
// put your setup code here, to run once:
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("ORA-5B,20 Controller ");
lcd.print("VER 0.0");
delay(500);
// Print a message to the LCD.
lcd.setCursor(0, 0);
lcd.print("FREQ: ");
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(2400); // ソフトウェアシリアルの初期化
mySerial.println("Hello, world?");
// disp_cx_cont();
disp_5B_cont(225975);
SET_MT91(225000);
SET_MT91(234250);
SET_MT91(243425);
SET_MT91(252625);
//1 225.000MHz Rf on =0:$02,$FF,$FE,$FF,$DA,$FF,$25,$03
//1 234.250MHz Rf on =0:$02,$FF,$FE,$DD,$CB,$FF,$16,$03
//1 243.425MHz Rf on =0:$02,$FF,$FE,$EB,$BC,$FF,$57,$03
//1 252.625MHz Rf on =0:$02,$FF,$FE,$E9,$AD,$FF,$44,$03
//1 261.750MHz Rf on =0:$02,$FF,$FE,$D8,$9E,$FF,$46,$03
//1 271.050MHz Rf on =0:$02,$FF,$FE,$DF,$8E,$FF,$51,$03
//1 280.250MHz Rf on =0:$02,$FF,$FE,$DD,$7F,$FF,$A2,$03
//1 289.475MHz Rf on =0:$02,$FF,$FE,$CB,$76,$FF,$BD,$03
//1 298.675MHz Rf on =0:$02,$FF,$FE,$C9,$67,$FF,$AE,$03
//1 307.850MHz Rf on =0:$02,$FF,$FE,$57,$F8,$FF,$AF,$03
delay(1000);
}
void comm_5B() {
lcd.setCursor(0, 0);
}
void disp_cx_Status() {
// Print a message to the LCD.
lcd.print("FREQ: STAT");
lcd.setCursor(6, 0);
//FREQ=MT1[];
lcd.print(MT92[6], HEX);
lcd.setCursor(8, 0);
lcd.print(MT92[7], HEX);
lcd.setCursor(10, 0);
lcd.print(MT92[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(MT92[3]))]); //CH
lcd.setCursor(9, 1);
// int8_t MO = bcd2bin(MT80[1]);
// lcd.print(MODE[(bcd2bin(MT92[10]))]); //MODE
lcd.setCursor(16, 1);
//lcd.print(POW[bcd2bin(MT92)]); //POW
lcd.setCursor(0, 2);
// print(POW[bcd2bin(MT80[0])]);
lcd.print("SIYO TX TUNE ");
lcd.setCursor(0, 3);
lcd.print("REMOTO- ");
}
void disp_5B_cont(unsigned long freq) {
// Print a message to the LCD.
lcd.setCursor(0, 0);
lcd.print("F ");
lcd.setCursor(6, 0);
//FREQ=MT1[];
lcd.print(MT91[5], HEX);
lcd.setCursor(8, 0);
lcd.print(MT91[6], HEX);
lcd.setCursor(10, 0);
lcd.print(MT91[7], HEX);
lcd.setCursor(12, 0);
lcd.setCursor(0, 1);
lcd.print("CH ");
lcd.setCursor(2, 1);
//lcd.print(CH[(bcd2bin(MT91[1]))]); //CH
lcd.setCursor(9, 1);
int8_t MO = bcd2bin(MT91[1]);
// lcd.print(MODE[(bcd2bin(MT91[0]))]); //MODE
lcd.setCursor(16, 1);
//lcd.print(POW[bcd2bin(MT91[10])]); //POW
lcd.setCursor(0, 2);
lcd.print("TX TUNE ");
lcd.setCursor(0, 3);
lcd.print("CH+ CH- MOD+ MOD- ");
}
void SET_MT91(unsigned long freq) {
//uint8_t MT91[8] = { B00000010, B11111111, B11111111, 0, 0, B11111111, B11111111, B00000011 };
MT91[3] = 0B00000000;
MT91[4] = 0B00000000;
Serial.println(freq);
Serial.print("\t");
Serial.println("[[[ //100MHz ");
String str_freq = String(freq);
Serial.println(MT91[3], BIN);
Serial.println(str_freq.charAt(0), DEC); //100 MHZ
Serial.println(MT91[3], BIN);
if (str_freq.charAt(0) == 50 ) {
bitSet(MT91[3], 7) ;
Serial.print("MT 4 100M ]]]] ");
Serial.println(MT91[3], BIN);
}
bitSet(MT91[3], 6); //
Serial.println(MT91[3], BIN);
Serial.println("[[[[ //0.025MHz SSSSSSSSS");
Serial.println(freq); //0.025MHz
str_freq = String(freq);
str_freq = str_freq.substring(4, 6);
Serial.println(str_freq);
uint8_t frq = str_freq.toInt();
frq = frq / 25 & 0b00000011;
frq = ~(frq) << 4;
Serial.println(frq, BIN);
MT91[3] = MT91[3] | frq;
Serial.print("MT 4 .01M ");
Serial.println(MT91[3], BIN);
Serial.println("[[[[//0.5MHz SSSSSSSSS");
Serial.println(freq); //0.5MHz
str_freq = String(freq);
Serial.println(str_freq.charAt(3));
str_freq = String(str_freq.charAt(3));
uint8_t st = str_freq.toInt();
Serial.println(MT91[3], BIN);
Serial.println(st, BIN);
MT91[3] = MT91[3] | ~st;
Serial.println("....//0.5MHz S]]]]]");
Serial.print("MT 4 .1M ");
Serial.println(MT91[3], BIN);
Serial.println("SSSSSSS//10MHz SSSSSSSSS");
str_freq = String(freq);
Serial.println(str_freq.charAt(1)); //10MHz
str_freq = String(str_freq.charAt(1));
st = str_freq.toInt();
//Serial.print(st, BIN);
Serial.println(~st, BIN);
MT91[4] = ~st << 4;
Serial.println(MT91[4], BIN);
Serial.print("MT 5 10M ");
Serial.println(MT91[4], BIN);
Serial.println("SSSSSSS//1MHz SSSSSSSSS");
str_freq = String(freq);
Serial.println(str_freq.charAt(2)); //1MHz
str_freq = String(str_freq.charAt(2));
s1 = ~(str_freq.toInt()) ;
Serial.println(s1, BIN);
Serial.println( (s1)^0b11110000 , BIN);
Serial.println( (s1) , DEC);
Serial.println(MT91[4]|(s1)^0b11110000, BIN);
Serial.println( s1, BIN);
MT91[4] = MT91[4]|(s1)^0b11110000;
Serial.print("MT 5 1M ");
Serial.println(MT91[4], BIN);
//MT91[4]|(s1)^0b1111000;
Serial.println("YYYYY\t");
send[0] = MT91[0] ^ 0;
send[1] = MT91[1] ^ send[0];
send[2] = MT91[2] ^ send[1];
send[3] = MT91[3] ^ send[2];
send[4] = MT91[4] ^ send[3];
send[5] = MT91[5] ^ send[4];
send[7] = MT91[7] ^ send[5];
send[6] = 0 ^ send[7];
MT91[6] = send[6] ^ B11111111;
for (int x = 0; x < 9; x++) { // ASCIIコード表を出力
Serial.print("MT91 [");
Serial.print(x + 1, HEX);
Serial.print("\t");
Serial.print(MT91[x], HEX); // ASCIIコードを十六進数で出力
cc = cc + MT91[x];
Serial.print("\t");
Serial.print(MT91[x], BIN); // ASCIIコードを十六進数で出力
Serial.print(" CC("); // 改行 Serial.print(cc, BIN); // ASCIIコードを十六進数で出力
Serial.print(send[x], BIN); // ASCIIコードを十六進数で出力 Serial.println("]"); // 改行
Serial.println(")"); // 改行 Serial.print(cc, BIN); // ASCIIコードを十六進数で出
delay(200);
}
cc = int8_t (~cc) + 1;
//hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
Serial.println(" 1 2 3 4 5 6 7 8 9 0 ");
cc = lng + 1;
for (int x = 0; x < 8; x++) { // ASCIIコード表を出力
// Serial.print(x, HEX);
Serial.print(" ");
Serial.print(MT91[x], HEX); // ASCIIコードを十六進数で出力
mySerial.print(MT91[x], HEX); // ASCIIコードを十六進数で出力
}
cc = int8_t (~cc) + 1;
Serial.print(" ");
Serial.println("............");
Serial.println(" //1 225.000MHz Rf on =0:$02,$FF,$FE,$FF,$DA,$FF,$25,$03");
Serial.println("//1 234.250MHz Rf on =0:$02,$FF,$FE,$DD,$CB,$FF,$16,$03");
}
byte decToBcd(byte val) {
return ( (val / 10 * 16) + (val % 10) );
}
Loading
grove-oled-sh1107
grove-oled-sh1107