S-Meter History Arduino

Hardware en software.
Plaats reactie
Bericht
Auteur
Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

S-Meter History Arduino

#1 Bericht door Dopp »

Hallo Allemaal,


Ik ben begonnen aan het maken van een arduino schakeling
voor aan een Yaesu FT817.

Het wordt dus een Arduino Nano met Pixel LCD display
aan een Nano met een RS232 naar cat control FT817

Dus een stand alone kastje aan het Yeasu setje

Ideaal voor Vossen-jagen maar natuurlijk ook
voor gewoon mee kijken als je via repaeter mobile mee luisterd etc

Ik zal regelmatig hier proberen vorderingen te tonen van de sketch en de hardware

Zie plaatje zoals ik het al werkend heb op de PC in MyMapping,exe software.
Bijlagen
Picture of ft817 on 144800<br />S meter history in MyMapping
Picture of ft817 on 144800
S meter history in MyMapping
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: S-Meter History Arduino

#2 Bericht door Dopp »

Hallo Allemaal,


Alvast een voor proefje

Met yaesu ft817 en cat62 kabel is een max232 nodig denk ik

Aangesloten op pin 0 en 1
Dus moet er af als je wilt programmeren via de USB<>PC

Nu nog op zoek naar een geschilkt Display

Dat moet een pixel display zijn denk ik dus geen Alfa nummeriek display


Setupje voor de FT817 Arduino Code.

Alleen nog aan de slag in de GFXDisplay() routine

Alle verzamelde Smeter values staan in arrS[]

Alle hulp en commentaar welkom !!!!

Code: Selecteer alles


/* PA3BNX FT817 S-meter 
 * 12-10-2016
 * 13-10-2016 
 * I understand that the Arduino Uno and Nano have just one UART
 * so we must connect a max232 on pin 0 and 1 
 * Todo communication to the FT817 with Cat62 Yaesu Cable
 * One INPUT pin with button for Reset The S meter display
 */

//Integer
const int cDelayTime=1000;
const byte cUarray=100;
const byte cEmpty=255;
const byte cResetPin=2;

//String
String inputString;
//Bool
bool bStringComplete;
//Array
byte arrS[cUarray];

//Functions
void AddNewSmeter(byte s)
{ 
static int c; 

//With 255 just reset pointer
if (s==cEmpty) {c=0;return;} 

c+=1;

if (c>cUarray)
{
  for (byte i=1;i<cUarray;i++)
  {
   arrS[i-1]=arrS[i];
  }
 c=cUarray; 
}

arrS[c]=s;
}//Last StoreSmeter


void AskFreqFT817()
{
  //Read RX Status
  //x,x,x.x,e7 (231)
  byte buf[]={0,0,0,0,231};
  Serial.write(buf,5);
}//Last Ask


void ClearSmeter()
{
for (int i=0;i<cUarray;i++)
 {
  arrS[i]=cEmpty;
 }
}//Last ClearSmeter

byte ExtractFT817Smeter(String MyString)
{
  //Not ready yet
  //Read RX Status
  //x,x,x.x,f7  (247)
  //76543210
  //3210=S meter data
  //7=Squels
  byte x;
  byte buf[5];

  MyString.getBytes(buf,5);
      
  if (buf[4]==247)
  {
   if (buf[0] && 1) {x+=1;}
   if (buf[0] && 2){x+=2;}
   if (buf[0] && 4){x+=4;}
   if (buf[0] && 8){x+=8;}
   //x ranges between 0 and 15 
   return x;
  }
   return cEmpty;
}//Last ExtractFT817Smeter

void SerialEvent()
 {
   while (Serial.available()) {
    //get the new byte:
    byte inByte=(byte)Serial.read();
    
    if (inputString.length() > 4 )
     {
      bStringComplete=true;
     }
     else
     {
      //add it to the inputString:
      inputString+=inByte;
     }
   }
 }//Last SerialEvent
   

void GFXDisplay()
{
//Show here the Values in arrS[] 
//On a Display
for (byte i=0;i<cUarray;i++)
{
 if (arrS[i]=cEmpty){return;} 
 //Draw here values from arrS[]
}
}//Last GFXDisplay

void setup() {
  // put your setup code here, to run once:
Serial.begin(4800);

pinMode(13,OUTPUT);//Led 13 as Received Cat-ft817 cmd 
pinMode(cResetPin,INPUT_PULLUP); 

ClearSmeter();
AddNewSmeter(cEmpty);

}

void loop() {
  // put your main code here, to run repeatedly:

byte count;

AskFreqFT817();

SerialEvent();

delay(cDelayTime);

 tryagain:

if (bStringComplete==true) 
{
 digitalWrite(13,HIGH);//Something RXed

 if (digitalRead(cResetPin)==LOW)
 {
  ClearSmeter();
  AddNewSmeter(cEmpty);
  GFXDisplay();
 }
 
 if (inputString != "")
  {
   byte s = ExtractFT817Smeter(inputString);  
   AddNewSmeter(s);
   GFXDisplay();
  }
  digitalWrite(13,LOW);//Processed Something RXed
 }
else
 {
  //Try max 10 times before ask for new Smeter
  count+=1;
  if (count<10)
   {
    //Wait for RXed data 
    SerialEvent();
    goto tryagain; 
   }
   
 }//Last bStringComplete

 inputString="";
 bStringComplete=false;
 count=0; //Not needed I think because loop starts again

}//Last Loop


Bijlagen
max232-ft817.jpg
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

-----
Berichten: 1027
Lid geworden op: 19 jul 2010, 14:43
Roepletters: XX0XX

Re: S-Meter History Arduino

#3 Bericht door ----- »

Vroeger gebruikte ik altijd braaf de MAX232 maar met het gebruik van USB to RS232 converters is het niet meer nodig, die dingen werken prima op 5 volt en er komt ook niet veel meer uit.

Let op dat de MAX232 het signaal inverteert.

Wat ik tegenwoordig doe is een FTDI chippie inbouwen, te koop voor een kleine 2 euro, dan kan ik mijn project direct op de USB poort aansluiten. geen geklooi meer fysieke met com poorten ( die op veel computers al helemaal niet meer aanwezig zijn)
Bijlagen
FTDI-RS232.jpg
FTDI-RS232.jpg (19.37 KiB) 10191 keer bekeken

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: S-Meter History Arduino

#4 Bericht door Dopp »

Hallo Allemaal,

Tsja toch een max232 op gaatjes print gezet.

Bij USb spreekt men van Master en slave
De bedoeling is van Arduino naar FT817 dus niet naar USB van de PC

Het Display moet ik nog uitzoeken
Ik wil het niet wagen om de poortjes
direct op 5 volt van de arduino uno te zetten.

Ben op zoek naat level converter printjes etc

morgen op DvRA
Bijlagen
BackILS-1.jpg
FrontILS-1.jpg
Max232-2-1.jpg
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: S-Meter History Arduino

#5 Bericht door Dopp »

Hallo Allemaal,

Ben spelende met LCD5110

en een nano arduino

Smeter History

Nog niet klaar maar alvast een probeerseltje

Code: Selecteer alles

/*
 * ===============================
 *((C))PA3BNX FT817 Smeter History
 * with Nokia LCD5110 Display
 * 06-07-2018
 */

#include <Adafruit_GFX.h>
#include <Adafruit_SPITFT.h>
#include <Adafruit_SPITFT_Macros.h>
#include <gfxfont.h>

#include <Adafruit_PCD8544.h>

// Software SPI (slower updates, more flexible pin options):
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

//Int
int t = 2000;


void Demo()
{
 SmeterHistoryFT817(16);  //Reset
for (int i = 0;i<368;i++)
{

if (i >= 100 && i< 150) 
  {
  SmeterHistoryFT817(11);
  }
  else
  {
   SmeterHistoryFT817(random(0,15)); 
  }
 delay(70);
} 
}//Last Demo


void SmeterHistoryFT817(byte rssi)
//ToDo try to draw 
{

const int UboundArr=168;
static byte Smeter[UboundArr];
static int count=0;
int i;

if (rssi==16){
  count = 0 ;
  for (i=0 ; i < UboundArr-i ; i++)
  {
    Smeter[i]=0;
  }
  display.clearDisplay();
  display.display();
  return;
}

if (count<UboundArr) 
{
 Smeter[count]=rssi;
 count ++;
}
 else
{
 for (int i=1;i<UboundArr;i++)
 {
  Smeter[i-1]=Smeter[i];
 }
  Smeter[UboundArr-1]=rssi;
}


display.clearDisplay();//Clear Buffer

for ( i=0;i<count ;i++)
 {
  if (i > UboundArr/2)
  {
  //Lower
  display.drawLine(i-UboundArr/2 ,display.height()-1,i-UboundArr/2,display.height()-1 - Smeter[i], BLACK);
  }
  else
  {
  //Upper
  display.drawLine(i,display.height()/2,i,display.height()/2 -Smeter[i],BLACK);
  }
 }

display.display();//Show Now
}


void setup() {
  // put your setup code here, to run once:
 Serial.begin(9600);

  display.begin();
  // init done

  // you can change the contrast around to adapt the display
  // for the best viewing!
  display.setContrast(50);
  display.clearDisplay();
  display.setCursor(0,12);
  display.setTextSize(1);
  display.println(F("((C))PA3BNX"));
  display.setTextSize(2);
  display.println(F("FT817")); 
  display.println(F("S-Meter"));
  display.display();
  delay(2000);
}

void loop() {

 // put your main code here, to run repeatedly:

Demo();


delay(t);

 

}
Bijlagen
5110 + Arduino-nano<br />met demo SmeterHistory
5110 + Arduino-nano
met demo SmeterHistory
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: S-Meter History Arduino

#6 Bericht door Dopp »

Hallo Allemaal,

Nog steeds druk bezig met de S meter History..

Er komt ook een buzzer aan die hoger piept als sterkte groter word

en natuurlijk een schakelbare weergave met analoge S meter
getekend op de nokia 5110 display.

En een max 232 voor naar de FT817 met cat62 kabel...

Binnenkort nieuwe foto en arduino sketch.
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: S-Meter History Arduino

#7 Bericht door Dopp »

Hallo Allemaal,

Nog een plaatje van arduino ft817 steek bordje

Nu met druk knopjes en de max232 met male<>male gender

Ook een piezo buzzer ook een piezo buzzer aangeloten
voor audible S meter uit horen met de stamtonen
440-1769 Hz dacht ik..


Zit nog steeds te knutselen met de ft817 routines aan cat 62
Bijlagen
FT817 cat62 kabel<br />foto van de db9 stekker<br /><br />max232 met 4 x 100nF en 5V regulator
FT817 cat62 kabel
foto van de db9 stekker

max232 met 4 x 100nF en 5V regulator
FT817 History <br />Arduino + Nokia5110
FT817 History
Arduino + Nokia5110
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

TomNL
Berichten: 491
Lid geworden op: 06 feb 2013, 10:22

Re: S-Meter History Arduino

#8 Bericht door TomNL »

Vanwaar de overstap naar het andere display? Ik vermoed 3.3V voor het oude vs 5V voor het Nokia display?

De reden dat ik het vraag is dat ik ook zo'n probleem had, en geen level shifter op voorraad had, maar wel een Arduino pro mini. En die werken zowel op 3.3V (8MHz, maar dat is genoeg voor je projectje lijkt mij) als 5V met de bekende 16MHz draaien. Verder hebben ze dezelfde Atmega328 als de Nano.

EA5JEX
Berichten: 1471
Lid geworden op: 14 nov 2007, 18:56
Roepletters: pa5cw
Locatie: Pedralba Valencia Spanje

Re: S-Meter History Arduino

#9 Bericht door EA5JEX »

Ken je dit met een ubitx en nextion display?
http://www.hamskey.com/2018/08/ubitx-fi ... .html#more

Kees

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: S-Meter History Arduino

#10 Bericht door Dopp »

Hallo Allemaal,

Tsja omgeschakeld naar de Nokia LCD 5110 omdat ie cheap is
en goed afleesbaar en ja werkt op 3.3V van de Arduino nano


Het belangrijkste is de audio buzzer voor S meter
en de history balken....

Dus niet voor frequentie, mode etc.....

Dus dingen die niet op de FT817 zitten...

Zit nu nog steeds te stoeien met de FT817 cat routines in lezen en
S meter uit lezen ...



Misschien maak ik ook nog de discriminator uitlezing erop
zodat je in FM kunt zien of je naast de frequentie van de vos staat.

Primair bedoeld dus voor Vossen-jagen op VHF/UHF ...

Leuk is natuurlijk ook om er een ad8307 aan te hangen aan een adc pootje zodat je een veldsterkte
meter hebt...
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: S-Meter History Arduino

#11 Bericht door Dopp »

Hallo Allemaal,

Nog steeds niet alles werkende

Maar alvast de ino File


Ik krijg de rs232 met max232 maar steeds niet werkend met de FT817

De rest echter wel...

RX receive van de FT817

Het is een software RX probleemde juiste stream

Er komt wel data binnen op de software serial poort maar niet alle 5 bytes...


Nog maar een poosje stoeien met de sketch denk ik.
Bijlagen
Nokia5110-ino.txt
(8.38 KiB) 272 keer gedownload
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: S-Meter History Arduino

#12 Bericht door Dopp »

Hallo Allemaal Rhenen 7-5-2023


Eindelijk weer gestoeid met de FT817 S-meter-history met een arduino nano.
En heb alles werkend nu !

Voeding 5v via powerbank 18650 van de Action via USB.(Blauw op foto)

Zie ook de sketch.

Via een orginele cat62 kabel (DB9) voor de FT817 de S-meter uitlezen.

Alles wordt weergeven op een nokia 5110 PCD8544 Display.
Piezo buzzer (Moet op pen 11 van de Arduino nano)
Buzzer geeft in toonladder waardes S-meter in geluid.
Arduino en Nokia display op steekbordje.
Alles zit verder gemonteerd op een stukje hardboard.

De buttons gewoon gesoldeerd op print met serie r 330 ohm naar massa. (A2,A3 en A4 Arduino)

De max232 op een gaatjes board met db9 male en ledjes pwr RX, TX, DTR en RTS
en draadjes naar de arduino D2 en D3 (denk aan 3.3v arduino en 5v max232 aanpassing (D2 en D3 Arduino)

AD8307 circuit Veldsterkte meter
Op foto zie je een potmeter tijdelijk om te simuleren de ad8307
opm: de ad8307 blikkie zit momenteel in Foxcopter 1 (Roterende antenne met ruiten wisser motor en polair display op PC)
Denk er nog over om een simpele liniaire HF detector met opampje oid te maken en die op A0 aan te sluiten.
(Veldsterkte meter monitor)


Menu met 3 buttons
-------------------
Blauw Menu met keuze FT817, AD8307 of Demo
Rood History of Analoge meter
Groen Buzzer aan of uit

Als je de arduino boot of reset dan schakelt hij de FT817 aan.

Verder zo weinig mogelijk functies er op gemaakt.

Het is vast ook handig ook voor vossenjagen.

Groeten Allemaal

Code: Selecteer alles

/*
 * ===============================
 *((C))PA3BNX FT817 Smeter + History + Buzzer + AD8307 + Demo
 * with Nokia LCD5110 Display
 * 06-07-2018
 * 10-07-2018
 * 22-07-2018
 * MayBe build in also a tone sensivity piezo buzzer 23-07-2018
 * 30-07-2018
 * 02-08-2018
 * 17-08-2018
 * AD8307 Fieldstrength to analog Pin 
 * Use white keys note for strength buzzer
 * ToDo beeps adjacent to indicate strength ? 
 * 15-11-2021 New Voter and Loop etc
 * 12-12-2021 
 * 15-02-2022
 * 31-05-2022 ''OnOff FT817 
 * 10-06-2022
 * 26-04-2023 FT817-cat lib getFT817bytes() 
 * 27-04-2023
 * 02-05-2023
 * 03-05-2023
 * 07-05-2023 Cat62 <>FT817 works now with max232 chip
 */

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <SoftwareSerial.h>

const byte cPinAD8307=A0;//Pin AD8307 analog
const byte cPinVote1=A1;//Blue Btn  Choise FT817 AD8307 and Demo
const byte cPinVote2=A2;//Red  Btn  Choise Meter or History 
const byte cPinVote3=A3;//Green Btn Choise Buzzer on off

//FT817 cmd's used
#define CAT_NULL_DATA    0x00  //00
#define CAT_ON           0x0F  //15
#define CAT_OFF          0x8F  //143
#define CAT_RX_DATA_CMD  0xE7  //231


const byte cPinBuzzer=11;//pin  interfere with  3 or 11 on a nano ? Connect buzzer here

const String SmeterConvFT817[]={"S","S1","S2","S3","S4","S5","S6","S7","S8","S9","S9+10","S9+20","S9+30","S9+40","S9+50","S9+60"};//Display Value
const unsigned int ToneFreq[]={50,440,494,523,587,659,698,784,880,988,1047,1175,1319,1397,1568,1760}; //Buzzer
const unsigned int RigBaud=4800;

//Cat Control FT817
//I use a Max232 and a Cat62 cable
SoftwareSerial mySerial(3, 2,false); // 2,3 RX, TX


// Software SPI (slower updates, more flexible pin options):
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)

//Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3); //Org
Adafruit_PCD8544 display = Adafruit_PCD8544(8, 7, 6, 5, 4); //new 14-11-2021

//int config = SERIAL_8N2;
//My FT817 uses 4800 8N2

//Bytes
byte TxRxArr[5]; //FT817 TxRxBytes 
const byte cEmpty=255; //Vote Empty 

//Int
const int t = 1500; //Main delay only for VoterChanged()


void DisplayMessage(byte FtAdDemo,bool bHistory, bool bBuzz)
{
  display.clearDisplay();
  display.setCursor(0,0);
  display.setTextSize(1);

  //Input Mode  
    switch (FtAdDemo)
  {
  case 0:
   display.println(F("FT817 cat"));
   display.println(RigBaud);
   break;
  case 1:
   display.println(F("AD8307"));
   break;
  case 2:
   display.println(F("Demo"));
   break;
  default:
   display.println(F("FT817 cat"));
   display.println(RigBaud);
   break;
  } 
  

  //History 
  if (bHistory==true)
  {
   display.println(F("History"));
  }
  else
  {
   display.println(F("Meter"));
  }

  //Buzzer
  if (bBuzz==true)
  {
  display.println(F("Buzzer on"));
  }
  else
  {
   display.println(F("Buzzer off"));
  } 
  display.display();
 }

void Buzzer(int rssi,bool bOnOf)
{
  //tone(pin, frequency, duration) 
  //PWM only pin 3 and 11 on uno/nano
  if (bOnOf==false || rssi==cEmpty)
  {
   noTone(cPinBuzzer);
  }
  else
  {
   tone(cPinBuzzer,ToneFreq[rssi]);//Now white key tones 
  }
}

void cmdToFT817(byte cmd)
{
 memset(TxRxArr,0,5); //Clear and set
 TxRxArr[4]=cmd;
 mySerial.write(TxRxArr,5);
}

void getFT817Bytes(byte count) //26-04-2023
{
  unsigned long startTime = millis();
  while (mySerial.available() < 1 && millis() < startTime + 2000) { ; }
  
  memset(TxRxArr,0,5);
  
  for (byte i=0; i<count; i++)
  {
    TxRxArr[i] = mySerial.read();
    delay(5);         
    // needs a delay in here, otherwise the byte sequence read is incorrect
  }
}

void SmeterHistoryFT817(byte rssi,bool OnlyUpdate)
{
//ToDo try to draw Analogue RSSI meter 
const int UboundArr=168;
static byte SmeterHistory[UboundArr];
static int count=0;
int i;

if (rssi==cEmpty){
  count = 0 ;
  for (i=0 ; i < UboundArr-i ; i++)
  {
    SmeterHistory[i]=0;
  }
  display.clearDisplay();
  display.display();
  return;
}

if (count<UboundArr) 
{
 SmeterHistory[count]=rssi;
 count ++;
}
 else
{
 for (int i=1;i<UboundArr;i++)
 {
  SmeterHistory[i-1]=SmeterHistory[i];
 }
  SmeterHistory[UboundArr-1]=rssi;
}

if (OnlyUpdate==true){return;}


display.clearDisplay();//Clear Buffer


for ( i=0;i<count ;i++)
 {
  if (i > UboundArr/2)
  {
  //Lower
  display.drawLine(i-UboundArr/2 ,display.height()-1,i-UboundArr/2,display.height()-1 - SmeterHistory[i], BLACK);
  }
  else
  {
  //Upper
  display.drawLine(i,display.height()/2,i,display.height()/2 -SmeterHistory[i],BLACK);
  }
 }

display.display();//Show Now
}

void ClassicMeter(int rssi)
{
  //20-07-2018 Not Ready Yet 20-07-2018 Ok
  //Draw Ref lines bar
  //Draw Hand
  //Display value in numbers

  //rssi varies between 0 and 15 or cEmpty ?
  //dm must be between 0 and 100 ?
  
  int i;
  int y;
  int x;
  int dm;
  
  int s;
  int ss;
 
  //FT817 just Smeter just 0 to 15
  //So modify rssi

   if (rssi != cEmpty)
   { 
    dm = map(rssi,0,15,0,100);
   }
  else
  {
   dm=0;
  }
   
  display.clearDisplay();
  
  //Scale
  y=5;
  for(i=0;i<display.width() +1;i += 10)
  {
    display.drawLine(i,0,i,y+8,BLACK);
  } 
  
  display.drawLine(0,0,i-10,0,BLACK); 
  
  for (i=5;i<display.width()+1;i +=10)
  {
    display.drawLine(i,0,i,y,BLACK);
  } 

  //Hand 
  s=16;//Ofset from top screen
  x=-5;
  ss= int((float(display.width()/float(100))) * float(dm));
  display.drawCircle(display.width()/2,display.height()+x,3,BLACK);
  display.drawLine(display.width()/2,display.height()+x,ss,s,BLACK);

  //Numbers
  display.setTextSize(1);
  
  if (dm > 50)
   {
    display.setCursor(10,30);
   }
  else
   {
    display.setCursor(45,30);
   }
   
  if (dm > 100)
   {
    display.print("OL("); 
   }
  else
   {
   //display.println(d);
   if (rssi !=cEmpty)
    {
    display.println(SmeterConvFT817[rssi]);
    }
   else
    {
    display.println(SmeterConvFT817[0]); 
    }
  }
  
  //Show now
  display.display(); 
}


byte ExtractFT817Smeter()
{
  //Read RX Status
  //x,x,x.x,f7  (247)
  //76543210
  //3210=S-meter data
  //7=Squelch
   
   return TxRxArr[0] & 0b00001111;
 
  }//Last ExtractFT817Smeter


byte ExtractAD8307Smeter()
{
 //11-09-2018
 int x;
 x=analogRead(cPinAD8307);
 return byte(map(x,0,1023,0,15));
}

byte ExtractDemo()
{
  return random(0,15);
}

void BlinkLed13()
 {
  //Blink LED 13
  static bool bBlink;
  bBlink =! bBlink;
  digitalWrite(LED_BUILTIN,bBlink);
 }


byte VoterChanged(bool delayed)
 {
   byte x=cEmpty;
   long Start;
   int a;
   int b;
   int c;

   if (delayed==true)
   {
    delay(t);
   }

  Start=millis()+t;
  
  while(Start > millis()) 
   {
   //Toggle push buttons
    
    a=digitalRead(cPinVote1);
    b=digitalRead(cPinVote2);
    c=digitalRead(cPinVote3);
    
    if (a==0 || b==0 || c==0)
    {
     x=0;
     if (a==0 ) {x = 1;}
     if (b==0 ) {x = x + 2;}
     if (c==0 ) {x = x + 4;}
    }
    
    if (x != cEmpty)
    {
     break;
    }
   }
  
   return x;
  
 }

int RotateBlueBtn()
{
 //Must return 0,1,or 2   Ft817 AD8307 or Demo
 static byte x;

 x=x+1;
 
 if (x > 2)
 {
  x=0; 
 }
 return x;
}

void setup() {
  // put your setup code here, to run once:
     
  //Serial.begin(4800); //Not to fast hi Not Needed 
  mySerial.begin(RigBaud); //Cat62 FT817 port
  
  //By default, the last intialized port is listening
  //when you want to listen on a port, explicitly select it
  //mySerial.listen();
   
  pinMode(cPinVote1,INPUT_PULLUP); //Blue
  pinMode(cPinVote2,INPUT_PULLUP); //Red
  pinMode(cPinVote3,INPUT_PULLUP); //Green
  pinMode(cPinBuzzer,OUTPUT);
  pinMode(LED_BUILTIN,OUTPUT);
  
  // you can change the contrast around to adapt the display
  // for the best viewing!
  display.begin();
  display.setContrast(50);
  display.clearDisplay();
  display.setCursor(0,0);
  display.setTextSize(1);
  display.println(F("((C))PA3BNX"));
  display.setCursor(0,10);
  display.setTextSize(2);
  display.println(F("FT817")); 
  display.println(F("S-Meter"));
  display.display();
  delay(1000);

  //Switch FT817 On
  cmdToFT817(CAT_NULL_DATA); //Must be done first
  delay(100);
  cmdToFT817(CAT_ON);
 
}

void loop() {

 // put your main code here, to run repeatedly:

//Bool
static bool bBuzz;         //Buzzer on off
static bool bHistoryMeter; //Display history or meter

//Byte
static byte FtAdDemo=0;    //0,1,2  0=FT817, 1=AD8307 and 2=Demo 
byte Smeter; //0 to 15
byte Vote; //Witch key was last pressed  Can be cEmpty 0, 1,2,4
byte x;
      
      //Get keys pressed and take action
      //Voter
      Vote=VoterChanged(false); //NotDelayed
          
      again:
      
      //Messages Menu
     switch (Vote)
     {
      case cEmpty:
       x=cEmpty;
       //Nothing
       break;
      case 0:
       x=cEmpty;
       break;
      case 1:
       //FT817, AD8307, Demo 
       FtAdDemo=RotateBlueBtn();
       DisplayMessage(FtAdDemo,bHistoryMeter,bBuzz);
       x=VoterChanged(true);
       break;
      case 2:
       //History
       bHistoryMeter =! bHistoryMeter; //Toggel
       DisplayMessage(FtAdDemo,bHistoryMeter,bBuzz);
       x=VoterChanged(true); //Delayed
       if (x!=cEmpty) {goto again;} 
       break;
      case 4:
       //Buzzer
       bBuzz =! bBuzz; //Toggel
       if (bBuzz==false)
       {
        Buzzer(0,bBuzz);//Sound Off
       }
       DisplayMessage(FtAdDemo,bHistoryMeter, bBuzz);
       x=VoterChanged(true); //Delayed
       break;
      } 

      //--------------------------
      if (x != cEmpty )//RotateBlueBtn Pressed or other red/green btn action while DisplayMessage is showed? 
      {
       Vote=x;
       x=cEmpty;
       goto again;
      } 

     // Do the things  Try get Smeter datafrom FT817, AD8307 or Demo
    switch(FtAdDemo)
     {
      case 0:
        cmdToFT817(CAT_RX_DATA_CMD);  //Send cmd to FT817
        getFT817Bytes(5);             //Wait for answer ft817 
        Smeter=ExtractFT817Smeter();  //return cEmpty if nothing
       break;
      case 1:
       Smeter=ExtractAD8307Smeter();
       break;
      case 2:
       Smeter=ExtractDemo();
       break ;
      }
 
   //Display
   if (bHistoryMeter==true)
    {
     SmeterHistoryFT817(Smeter,false);
    }
      else
    {
     ClassicMeter(Smeter); 
    }
   
   //Buzzer
   if (bBuzz==true) {Buzzer(Smeter,bBuzz);}
      
   //HartBeat onboard Led   
   BlinkLed13();
  

}//Last bracket Loop
Bijlagen
SmeterH.JPG
SmeterA.JPG
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: S-Meter History Arduino

#13 Bericht door Dopp »

21-07-2023

Hallo Allemaal

Weer wat te prutsen en programmeren
Soort super veldsterkte indicator !!

Nog weer een paar dingetjes gedaan met de FT817 History Smeter

opm: RSSI=Radio Signal Strength Indicator

Bedoeling is om een frequentie te monitoren gedurende bv 2 minuten
bijvoorbeeld met een vossenjacht.

Als je een auto jacht doet kun je ook via de piezo buzzer luisteren
naar de toonhoogte die de RSSI vertegenwoordigd.

Je kunt kiezen uit:

1: Classic RSSI meter met peakBug (Circeltje dat de peak RSSI aangeeft)
2: History RSSI diagrams 2x 84 verticale lijnen die opschuiven indien
allen daar zijn na 2 minuten
3: En (aan/uit) Audio toon van piezo buzzer

Het heeft 3 input modes:
1; FT817 cat62
2; AD8307 of ander RF detectie circuit aan A0 van Arduino Nano
3; Demo (Random input waarden)


1x Arduino Nano
1x Nokia 5110 Display
3x Druk knoppen
1x Piezo Buzzer

Cat62 cable Yaesu met db9 female
IC max232 op gaatjes printje voor RS232 nivo omzetting en db9 male chaissis

Probeert de FT817 aan te zetten
Detect of er een FT817 aanwezig is
Indien niet aanwezig 3x piepje

Leest VFO frequentie uit op display
Je kunt veranderen door uit de lijst een andere frequentie te kiezen

SRC als txt file hieronder.
Bijlagen
FT817-HistoryMeterSRC.txt
(17.22 KiB) 42 keer gedownload
S-meterNew.png
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Plaats reactie