FT-897周波数表示不調につき別置LCD表示器製作まだたまに誤動作するにで改良が必要
表示器の電源を先に入れるとFT817の電源が入らない時が有るのでFT-817の電源を先に入れる/*FT817周波数 MODE表示器2018/4/15 10:002018 /4 /16 22:242018 /4 /17 9:452018/4/18 10;30*/#include <LiquidCrystal.h>LiquidCrystal lcd(8, 9, 4, 5, 6, 7);byte indata = 0;//受信データbyte d[9];//読出しデータ5bytebyte mode;//型式MODEint mf[9];void setup(){Serial.begin(9600);lcd.begin(16, 2);//LCDの初期化 2行16文字lcd.setCursor(0,0);}//カーソルの初期位置//----------------binに変換 -------------------------------void loop(){if(Serial.available() < 1){//読取バッファーが無信号を確認//読出しバッファー無で読出コマンド(0x03)送信 B0000 0011Serial.write(0x00);Serial.write(0x00);Serial.write(0x00);Serial.write(0x00);Serial.write(0x03);}//-----------------RS232CDATA読込読出バッファー有検出0以上--------------delay (100);//これが無いと読み取りミスすることが有るif(Serial.available() > 0){//バッファーに信号有りを確認{byte c1=0;//カウント5回設定while (c1 < 5){//5個読出DATA1 DATA2 DATA3 DATA4 DATA5indata = Serial.read();//データー1byte読込d[c1]=indata;//読込データを配列変数d[c1]に転送d[0],d[1],d[2],d[3],d[4]c1++;}}//カウンタ+1するbyte c = 0;int byteH= 0 ;int byteL = 0;while(c < 5){// 例 433.123.45B0100 0011 B0011 0001 B0010 0011 B0100 0101byteH=((d[c] >> 4) & 0x0F);//4bit右へずらすB0100 0011 → B000 0100 & B0000 1111でマスクをかけると10の桁が1桁で読めるbyteL=d[c] & 0x0F;//1の桁のみにする B0100 0011& B00001111 → B0000 0011 mf[c]= byteH * 10 + byteL;//10桁*10 + 1桁 でBCDからBINの変換が出来る BCDでの操作は出来ないのでこの様な事をするc++ ;}// カウンターの数を1プラスするこの動作を5回する事でリグからの信号を読み取ることが出来るlcd.setCursor(0,0);// LCD表示し始め位置の設定1行目1桁目を最初とする// -------------------------------型式表示-------------------------------mode=(mf[4]);//4bit目のデータは電波も型式を表すコードは下記if(mode==0x00){//モードコードと読出し数で&を取り=値でモード表示するlcd.print("LSB");} else if(mode==0x01){lcd.print("USB");}else if(mode==0x02){lcd.print("CW ");} else if(mode==0x03){lcd.print("CWR");}else if(mode==0x04){lcd.print("AM ");} else if(mode==0x08){lcd.print("FM ");}else if(mode==0x0A){lcd.print("DIG");} else if(mode==0x0C){lcd.print("PKT");}elselcd.print("WFM");//---------------------------表示値に変換 -------------------------------{long f;long fm;long p0;long p1;long p2;long p3;long n0;long n1;long n2;long n3;long n4;n0=1000000; n1=10000; n2=100; n3 =100000; n4 =100;p0 = mf[0] * n0 ;p1 = mf[1] * n1 ;p2 = mf[2] * n2 ;p3 = mf[3];f = p0 + p1 + p2 + p3;//表示周波数はfif (f != fm){lcd.print (" FT817 JH2NZS " );//JH2NZSの部分を自分のコール書きかえれば自分のコールが表示出来ますlcd.setCursor(0,1);lcd.print ("");lcd.setCursor(0,1);lcd.print ("F " );fm=f;}//周波数に変化無い時はスルー//-------------------------------小数点位置の計算-------------------------------//ここは小数点を付けるルーチン433.123.45小数点を付け無いならlcd.print (f);でOK 但し4331235と表示されます//ソフトが泥縄なので説明は省略(論理は正解で動きます苦労しました){if (mf[0] == 0) { lcd.print(""); }else{ lcd.print(mf[0]); }if (mf[1] > 9) { lcd.print(mf[1]/10); lcd.print("."); lcd.print(mf[1]%10); }else if ((mf[1]<10) &&(mf[1]>1)){ lcd.print(0); lcd.print("."); lcd.print(mf[1]%10); }else lcd.print("0.0"); if (mf[2] < 10){ lcd.print(0); }lcd.print(mf[2]);lcd.print(".");if (mf[3]<10){ lcd.print(0); lcd.print(mf[3]%10); }else lcd.print(mf[3]);}}delay (300);}}