/*
An example of using SoftwareSerial.h per Uri Shaked's example
of a UART Example Breakout chip.
*/
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 4);
// Create a SoftwareSerial object
// Set RX to pin 10 and TX to pin 11
SoftwareSerial mySerial(10, 11); // RX, TX
#define TX_EN 5
const int DATA_LENGTH = 8; // 例:5バイトのデータを受信したい場合
byte dataBuffer[DATA_LENGTH];
int byteCount = 0;
uint8_t MT91[9] = { B00000010, B11111111, B11111111, 0, 0, B11111111, B11111111, B00000011 };
uint8_t MT92[9] = { B00000010, B11111111, B11111111, 0, 0, B11111111, B11111111, B00000011 };
uint8_t send[8];
unsigned long freq_prs[] = {30000, 230000, 240000, 250000, 260000, 270000, 280000, 290000, 300000, 310000, 320000, 330000, 340000, 350000, 360000, 370000, 380000, 390000, 399975, 310000, 320000 };
uint8_t cc ;
uint8_t lng = 8;
uint8_t s1 ;
bool REM_LOC;
bool tune;
bool Fault;
unsigned long freq = 225000;
char str_freq ;
//static uint8_t bcd2bin (uint8_t val) ;
//return val - 6 * (val >> 4);
void setup() {
// Initialize hardware serial (USB Serial Monitor) at 115200 baud
Serial.begin(2400); // 115200bpsでシリアルポートを開く
Serial.println("CONT OPEN");
// Serial.println("Type a message and send it via Serial Monitor");
// disp_cx_cont();
// Initialize software serial at 9600 baud
mySerial.begin(2400);
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 ");
delay(10);
// Print a message to the LCD.
lcd.setCursor(0, 0);
lcd.print("FREQ: ");
lcd.setCursor(0, 1);
lcd.setCursor(0, 1);
int count = 10;
}
void loop() {
for (int i = 0; i <= 20; i++) {
;
disp_5B_cont(freq_prs[i]);
SET_MT91(freq_prs[i]);
Serial.println(freq_prs[i], DEC );
Serial.println(i );
disp_5b_Status();
uint8_t count = count + 1;
delay(4000);
count++;
}
// SET_MT91(225000);
// SET_MT91(325000);
// SET_MT91(234250);
// v SET_MT91(243425);
// SET_MT91(252625);
// SET_MT91(261750);
// v SET_MT91(271050);
// SET_MT91(280250);
// SET_MT91(298675);
// SET_MT91(200000);
//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
//・・・・・・・・・・・・・・・・
}
void comm_5B() {
lcd.setCursor(0, 0);
}
void disp_5b_Status() {
while (mySerial.available() > 0) {
byte inByte = mySerial.read();
// 配列に格納
MT92[byteCount] = inByte;
byteCount++;
// 設定したバイト数までたまったら処理
if (byteCount >= DATA_LENGTH) {
// --- ここで取り込んだ配列を処理 ---
Serial.print("5B<< ");
for (int i = 0; i < DATA_LENGTH; i++) {
// Serial.print(dataBuffer[i], HEX); // 16進数で表示
Serial.print(MT92[i], HEX); // 16進数で表示
Serial.print(" ");
}
Serial.println();
// カウンタをリセットして次の受信に備える
byteCount = 0;
}
}
Serial.print("MT92[2] ");
Serial.println(MT92[2], BIN);
Serial.print("MT92[3] ");
Serial.println(MT92[3], BIN);
Serial.print("MT92[4] ");
Serial.println(MT92[4], BIN);
Serial.print("MT92[5] ");
Serial.println(MT92[5], BIN);
REM_LOC = bitRead(MT92[2], 4);
if (REM_LOC == true) {
lcd.setCursor(0, 3);
lcd.print("Remot");
Serial.print("Remoto- ");
} else {
digitalWrite(13, LOW);
lcd.setCursor(0, 3);
lcd.print("Local ");
Serial.print("Local ");
}
tune = bitRead(MT92[2], 3);
if (tune == true) {
lcd.setCursor(5, 3);
lcd.print("TUNE OK ");
Serial.print("TUNE ok ");
} else {
// digitalWrite(13, LOW);
lcd.setCursor(5, 3);
lcd.print("TUNE ");
Serial.print("TUNE ");
}
Fault = bitRead(MT92[2], 2);
if (Fault == true) {
lcd.setCursor(12, 3);
lcd.print("Fault OK ");
Serial.print("Fault OK ");
} else {
// digitalWrite(13, LOW);
lcd.setCursor(12, 3);
lcd.print("Fault ");
Serial.print("Fault ");
}
}
void disp_5B_cont(unsigned long freq) {
// Print a message to the LCD.
lcd.setCursor(6, 0);
lcd.print("------kHz");
lcd.setCursor(12, 0);
lcd.setCursor(0, 0);
lcd.print("Freq ");
lcd.setCursor(6, 0);
lcd.print(freq);
lcd.setCursor(12, 0);
lcd.setCursor(16, 0);
lcd.print("SEND");
lcd.setCursor(0, 1);
lcd.print("CH ");
lcd.setCursor(2, 1);
lcd.setCursor(9, 1);
lcd.setCursor(16, 1);
lcd.setCursor(0, 3);
lcd.print("TX TUNE ");
}
void SET_MT91(unsigned long freq) {
//uint8_t MT91[8] = { B00000010, B11111111, B11111111, 0, 0, B11111111, B11111111, B00000011 };
MT91[3] = 0B00000000;
MT91[4] = 0B00000000;
uint8_t f010m = 0;
uint8_t f001m = 0;
Serial.print( ">> 5B ");
// Serial.print("\t");
//Serial.println("[[[ //100MHz ");
String str_freq = String(freq);
//Serial.println(str_freq);
// Serial.println(str_freq.charAt(0));
uint8_t f100m = str_freq.charAt(0);
// Serial.println(f100m,DEC);
if (f100m == 50 ) {
MT91[3] = 0b11000000;
}
if (f100m == 51 ) {
MT91[3] = 0b01000000;
}
// Serial.println(MT91[3], BIN);
// Serial.println(MT91[3], BIN);
// Serial.println("^^^^^^^^^^^^ ");
// Serial.print("MT 4 100M ]]]] ");
//
// 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 f025k = str_freq.toInt();
// Serial.println(f025k);
if (f025k == 0 ) {
MT91[3] = MT91[3] | 0B00110000;
}
if (f025k == 25 ) {
MT91[3] = MT91[3] | 0B00100000;
}
if (f025k == 50 ) {
MT91[3] = MT91[3] | 0B00010000;
}
if (f025k == 75) {
MT91[3] = MT91[3] | 0B00000000;
}
// 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 f500k = str_freq.toInt();
uint8_t st = str_freq.toInt();
//// Serial.println(f500k, BIN);
// Serial.println(MT91[3], BIN);
MT91[3] = MT91[3] | ( ~f500k & 0b1111);
//MT91[4] = ( ~f010m & 0b1111);
// MT91[4] = ( ( ~f010m & 0b1111) << 4 | (~f001m) & 0b1111);
// Serial.println(MT91[3], BIN);
// Serial.println("....//0.5MHz S]]]]]");
// Serial.println("SSSSSSS//10MHz SSSSSSSSS");
str_freq = String(freq);
// Serial.println(str_freq.charAt(1)); //10MHz
str_freq = String(str_freq.charAt(1));
f010m = str_freq.toInt();
// Serial.println(f010m, BIN);
// Serial.println(MT91[4], BIN);
MT91[4] = ( ~f010m & 0b1111) << 4;
// Serial.println(MT91[4], BIN);
// Serial.println("MT 5 10M ");
// delay(1000);
// Serial.println("SSSSSSS//1MHz SSSSSSSSS");
str_freq = String(freq);
// Serial.println(str_freq.charAt(2)); //1MHz
str_freq = String(str_freq.charAt(2));
f001m = str_freq.toInt() ;
MT91[4] = ( ~f001m & 0b1111);
MT91[4] = ( ( ~f010m & 0b1111) << 4 | (~f001m) & 0b1111);
// Serial.println(MT91[4], BIN);
// Serial.println(MT91[4], HEX);
// delay(1000);
// ora_send(4) = (f100m * 2 ^ 7) + (2 ^ 6) + (f010k * 2 ^ 4) + (conv10((f100k)))
//ora_send(5) = ((conv10((f010m))) * 16) + (conv10((f001m
// Serial.print("MT 5 1M ");
// Serial.println(MT91[4], BIN);
//MT91[4]|(s1)^0b1111000;
//delay(1000);
// 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;
//Serial.print(freq);
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コードを十六進数で出力
}
Serial.println(" ");
mySerial.write(MT91, 8);
cc = int8_t (~cc) + 1;
// Serial.print(" cc ");
// Serial.print(cc);
// 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");
// Serial.println(" //1 261.750MHz Rf on =0:$02,$FF,$FE,$D8,$9E,$FF,$46,$03");
// Serial.println(" //1 234.250MHz Rf on =0:$02,$FF,$FE,$DD,$CB,$FF,$16,$03");
// Serial.println(" //1 243.425MHz Rf on =0:$02,$FF,$FE,$EB,$BC,$FF,$57,$03");
// Serial.println(" //1 252.625MHz Rf on =0:$02,$FF,$FE,$E9,$AD,$FF,$44,$03");
// Serial.println(" //1 261.750MHz Rf on =0:$02,$FF,$FE,$D8,$9E,$FF,$46,$03");
// Serial.println(" //1 271.050MHz Rf on =0:$02,$FF,$FE,$DF,$8E,$FF,$51,$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
}
byte decToBcd(byte val) {
return ( (val / 10 * 16) + (val % 10) );
}