Автор Тема: Arduino Band Decoder  (Прочитано 15429 раз)

US7IGN

  • Hero Member
  • *****
  • Сообщений: 1955
    • Просмотр профиля
    • US7IGN
Re: Arduino Band Decoder
« Ответ #45 : Ноября 17, 2018, 05:33:48 pm »
Осталось к нему сделать столько антенн =)

US7IGN

  • Hero Member
  • *****
  • Сообщений: 1955
    • Просмотр профиля
    • US7IGN
Re: Arduino Band Decoder
« Ответ #46 : Апреля 08, 2019, 08:23:30 pm »
Не прошло и 120 дней как изделие готово =)

US7IGN

  • Hero Member
  • *****
  • Сообщений: 1955
    • Просмотр профиля
    • US7IGN
Re: Arduino Band Decoder
« Ответ #47 : Апреля 21, 2020, 12:13:53 am »
еще один бенддекодер для ICOM https://forums.qrz.com/index.php?threads/icom-arduino-band-voltage-decoder.702126/

Modded from http://www.5b4wn.com/main/a1921.html

Using an ULN2803A Darlington array for relay driving. 2 spare Darlington pairs will key amp (160M & 30M)

Here's the sketch.

Ed

//icom band decoder
//Marios Nicolaou 5B4WN (c) 2009 7 24
//Use the code at your OWN risk
//GPL licence
//Modified by Ed Grafton WA4SIX
//Mod is to directly select pin, instead of BCD




int icomBandPin = 5; // select the input pin for the potentiometer
//int realVoltage = 8; // variable to store the value coming from the sensor Volts
int sensedVoltage=0;
int H=5;
int G=6;
int F=7;
int E=8;
int D=9;
int C=10;
int B=11;
int A=12;
float calculatedVoltage=0;
int band=0;
int counter =0;
int previousValue=0;
void setup() {
Serial.begin(9600);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(H, OUTPUT);
}
void loop() {
// read the value from the sensor:
sensedVoltage = analogRead(icomBandPin);


//get 5 consecutive values
// counter++;

if (counter==5) {

calculatedVoltage = float(sensedVoltage)*5/1024;

Serial.print (sensedVoltage);
Serial.print (" - ");
Serial.print (calculatedVoltage);
Serial.print (" - ");
band=getBand(calculatedVoltage);

Serial.println(band, DEC);
delay (20);

} else {
if (abs(previousValue-sensedVoltage)>10) {
//means change or spurious number
previousValue=sensedVoltage;
} else {
counter++;
previousValue=sensedVoltage;
}


}

}

int getBand(float voltage) {
int band=0;
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(H, LOW);

if (voltage>4.20 && voltage<4.68) {
band=160;
digitalWrite(A, HIGH);
} else if (voltage>3.50 && voltage<4.20) {
band=80;
digitalWrite(B, HIGH);
} else if (voltage>=2.95 && voltage<3.50) {
band=40;

digitalWrite(C, HIGH);

} else if(voltage>=2.30 && voltage<2.95) {
band=20;

digitalWrite(D, HIGH);

} else if (voltage>=1.70 && voltage<2.30) {
band=15;

digitalWrite(E, HIGH);

} else if (voltage>=1.2 && voltage<1.7) {
band=10;

digitalWrite(F, HIGH);

} else if (voltage>=0.75 && voltage<1.2) {
band=6;

digitalWrite(G, HIGH);
} else if (voltage <0.75) {
band=30;
digitalWrite(H, HIGH);

}
return band;

}

lopez

  • Sr. Member
  • ****
  • Сообщений: 254
  • UR5RBP
    • Просмотр профиля
Re: Arduino Band Decoder
« Ответ #48 : Апреля 21, 2020, 06:43:02 am »
WBR, UR5RBP, 73

bybra

  • Global Moderator
  • Hero Member
  • *****
  • Сообщений: 619
    • Просмотр профиля
Re: Arduino Band Decoder
« Ответ #49 : Апреля 21, 2020, 10:14:30 pm »

SA7BOA

  • Full Member
  • ***
  • Сообщений: 119
    • Просмотр профиля
Re: Arduino Band Decoder
« Ответ #50 : Апреля 21, 2020, 11:36:00 pm »
Отличный аппарат!
не хватает светофильтра на табло для лучшей читабельности

lopez

  • Sr. Member
  • ****
  • Сообщений: 254
  • UR5RBP
    • Просмотр профиля
Re: Arduino Band Decoder
« Ответ #51 : Апреля 22, 2020, 07:22:55 am »
Чому?
Код дуже кострубатий. Навіщо робити глобальні змінні типу int для номерів виводів? Це жере ресурси. Можна спокійно їх визначити #define A 12... Навіщо робити безкінечні плутані вкладені одне в одне if-else-if, коли є гарний і наочний механізм switch-case? Ну і структурування коду може бути кращим.. Там взагалі його немає..
WBR, UR5RBP, 73

SA7BOA

  • Full Member
  • ***
  • Сообщений: 119
    • Просмотр профиля
Re: Arduino Band Decoder
« Ответ #52 : Апреля 22, 2020, 11:35:34 am »
Це жере ресурси. Можна спокійно їх визначити #define A 12...

мають дуже хочеться в ефір, нема коли займатися оптимізацією  ;)
кому треба - той зробить як йому зручно.

bybra

  • Global Moderator
  • Hero Member
  • *****
  • Сообщений: 619
    • Просмотр профиля
Re: Arduino Band Decoder
« Ответ #53 : Апреля 22, 2020, 01:44:40 pm »
switch-case? Ну і структурування коду може бути кращим.. Там взагалі його немає..

а что можно вот так писать в case:

case (voltage>=0.75 && voltage<1.2):

?

lopez

  • Sr. Member
  • ****
  • Сообщений: 254
  • UR5RBP
    • Просмотр профиля
Re: Arduino Band Decoder
« Ответ #54 : Апреля 22, 2020, 01:59:44 pm »
switch-case? Ну і структурування коду може бути кращим.. Там взагалі його немає..

а что можно вот так писать в case:

case (voltage>=0.75 && voltage<1.2):

?
Ну, теоретично, можливо й так, не перевіряв. Але зазвичай для аналогових речей є маппінг: http://arduino-diy.com/arduino-vyrazheniye-switch
WBR, UR5RBP, 73

bybra

  • Global Moderator
  • Hero Member
  • *****
  • Сообщений: 619
    • Просмотр профиля
Re: Arduino Band Decoder
« Ответ #55 : Апреля 22, 2020, 05:38:39 pm »
switch-case? Ну і структурування коду може бути кращим.. Там взагалі його немає..

а что можно вот так писать в case:

case (voltage>=0.75 && voltage<1.2):

?
Ну, теоретично, можливо й так, не перевіряв. Але зазвичай для аналогових речей є маппінг: http://arduino-diy.com/arduino-vyrazheniye-switch

там интервалы разные
от 0,45 до 0,7В
так что может не попасть

lopez

  • Sr. Member
  • ****
  • Сообщений: 254
  • UR5RBP
    • Просмотр профиля
Re: Arduino Band Decoder
« Ответ #56 : Апреля 22, 2020, 06:19:55 pm »
switch-case? Ну і структурування коду може бути кращим.. Там взагалі його немає..

а что можно вот так писать в case:

case (voltage>=0.75 && voltage<1.2):

?
Ну, теоретично, можливо й так, не перевіряв. Але зазвичай для аналогових речей є маппінг: http://arduino-diy.com/arduino-vyrazheniye-switch

там интервалы разные
от 0,45 до 0,7В
так что может не попасть
Я так розумію, там крок 0.5.. То помножити на 2 - буде крок 1.
WBR, UR5RBP, 73