Infotex Мир Хобби
Hard&Soft => Радиолюбителю => Arduino UNO => Тема начата: Love777888 от 31 Июля 2018, 23:28:14
-
Приветствую, давно тут не был, в общем нужна помощь! Надумал себе сделать коммутатор, поставил треугольник на 20м, блок реле на три антенны, провел витую пару вниз с 10 го на второй этаж, обжал ее под LAN штеккер, купил даже корпус от старого но компактного роутера. Ну это все отступление, в общем дошла очередь до логики, нашел скетч (http://www.r9j.ru/news/19/466/) перевел его под три антенны, вроде работает, но светодиоды мне не очень нравиться, хотелось бы по I2C высвечивать на экране 16Х2 название включенной антенны, можно и бегущей строкой(если не трудно).
вот что я так сказать обрезал с того сайта:
//Порты для выходов переключаемых антенн
int ant1 = A2;
int ant2 = A1;
int ant3 = A0;
//Порты для кнопок
int bt1 = 2;
int bt2 = 3;
int bt3 = 4;
int NumButton; //Номер нажатой кнопки
void setup () {
// Назначаем порты на вход
pinMode (bt1,INPUT);
pinMode (bt2,INPUT);
pinMode (bt3,INPUT);
// Назначаем порты на выход
pinMode (ant1,OUTPUT);
pinMode (ant2,OUTPUT);
pinMode (ant3,OUTPUT);
}
void SetButton () //Определяем номер нажатой кнопки
{
if (digitalRead (bt1) == HIGH) {NumButton = 1;}
if (digitalRead (bt2) == HIGH) {NumButton = 2;}
if (digitalRead (bt3) == HIGH) {NumButton = 3;}
}
void loop ()
{
SetButton ();
switch (NumButton) { //Выбираем что и где нужно установить в зависимости от номера нажатой кнопки
case 1: {digitalWrite (ant1, HIGH); //Устанавливаем «1» выход антенны 1, остальные сбрасываем в «0»
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
break;
}
case 2: {digitalWrite (ant2, HIGH); //Устанавливаем «1» выход антенны 2, остальные сбрасываем в «0»
digitalWrite (ant1, LOW);
digitalWrite (ant3, LOW);
break;
}
case 3: {digitalWrite (ant3, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant1, LOW);
break;
}
}
}
-
// Пины для дисплея A4 A5
#include <LiquidCrystal_I2C.h>
//Порты для выходов переключаемых антенн
int ant1 = A2;
int ant2 = A1;
int ant3 = A0;
//Порты для кнопок
int bt1 = 2;
int bt2 = 3;
int bt3 = 4;
int NumButton; //Номер нажатой кнопки
LiquidCrystal_I2C lcd(0x21,16,2); // Адрес дисплея 0x21 !!!!!
void setup () {
// Назначаем порты на вход
pinMode (bt1,INPUT);
pinMode (bt2,INPUT);
pinMode (bt3,INPUT);
// Назначаем порты на выход
pinMode (ant1,OUTPUT);
pinMode (ant2,OUTPUT);
pinMode (ant3,OUTPUT);
lcd.init();
lcd.backlight();// Включаем подсветку дисплея
lcd.setCursor(0, 0); lcd.print("Antenna Switch");
}
void SetButton () //Определяем номер нажатой кнопки
{
if (digitalRead (bt1) == HIGH) {NumButton = 1;}
if (digitalRead (bt2) == HIGH) {NumButton = 2;}
if (digitalRead (bt3) == HIGH) {NumButton = 3;}
}
void loop ()
{
SetButton ();
switch (NumButton) { //Выбираем что и где нужно установить в зависимости от номера нажатой кнопки
case 1: {digitalWrite (ant1, HIGH); //Устанавливаем «1» выход антенны 1, остальные сбрасываем в «0»
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Antenna 1");
break;
}
case 2: {digitalWrite (ant2, HIGH); //Устанавливаем «1» выход антенны 2, остальные сбрасываем в «0»
digitalWrite (ant1, LOW);
digitalWrite (ant3, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Antenna 2");
break;
}
case 3: {digitalWrite (ant3, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant1, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Antenna 3");
break;
}
}
}
Можно так попробовать. Скролл можно посмотреть в примерах библиотеки дисплея.
-
Ухты! Спасибо, буду пробовать!
-
// Пины для дисплея A4 A5
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
//Порты для выходов переключаемых антенн
int ant1 = A2;
int ant2 = A1;
int ant3 = A0;
//Порты для кнопок
int bt1 = 2;
int bt2 = 3;
int bt3 = 4;
int NumButton; //Номер нажатой кнопки
LiquidCrystal_PCF8574 lcd(0x3F); // Адрес дисплея читать сканером !!!!!
void setup () {
// Назначаем порты на вход
pinMode (bt1,INPUT);
pinMode (bt2,INPUT);
pinMode (bt3,INPUT);
// Назначаем порты на выход
pinMode (ant1,OUTPUT);
pinMode (ant2,OUTPUT);
pinMode (ant3,OUTPUT);
lcd.begin(16, 2);
lcd.setBacklight(255);// Включаем подсветку дисплея
lcd.setCursor(1, 0); lcd.print("Antenna Switch");
}
void SetButton () //Определяем номер нажатой кнопки
{
if (digitalRead (bt1) == HIGH) {NumButton = 1;}
if (digitalRead (bt2) == HIGH) {NumButton = 2;}
if (digitalRead (bt3) == HIGH) {NumButton = 3;}
}
void loop ()
{
SetButton ();
switch (NumButton) { //Выбираем что и где нужно установить в зависимости от номера нажатой кнопки
case 1: {digitalWrite (ant1, HIGH); //Устанавливаем «1» выход антенны 1, остальные сбрасываем в «0»
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
//lcd.clear();
lcd.setCursor(0, 1);
lcd.print(" CI-BI-10M ");
break;
}
case 2: {digitalWrite (ant2, HIGH); //Устанавливаем «1» выход антенны 2, остальные сбрасываем в «0»
digitalWrite (ant1, LOW);
digitalWrite (ant3, LOW);
//lcd.clear();
lcd.setCursor(0, 1);
lcd.print(" TRIANGLE-20 ");
break;
}
case 3: {digitalWrite (ant3, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant1, LOW);
lcd.setCursor(1, 0);
lcd.setCursor(0, 1);
lcd.print(" DIPOL 40-M ");
delay(1000);
break;
}
}
}
Вот что получилось библиотеку брал LiquidCrystal_PCF8574, сканером узнал свой адрес.
Еще одна просьба нужно чтобы дисплей гас через секунд 5, т.е нажал кнопку высветилось си би прошло 5 сек потух дисплей, нажал опять например на эту же антенну опять горит дисплей 5 сек, или же нажал на ант треугольник то же горит 5 сек, затем гаснет.
lcd.clear(); невероятно паразитная хрень, из за нее у меня мерцал экран.
Еще забыл при включении чтобы включена была одна антенна например си би, можно просто забыть нажать на клавишу выбора антенны и вкл передачу, как то так
-
/ Пины для дисплея A4 A5
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
//Порты для выходов переключаемых антенн
int ant1 = A2;
int ant2 = A1;
int ant3 = A0;
//Порты для кнопок
int bt1 = 2;
int bt2 = 3;
int bt3 = 4;
int NumButton; //Номер нажатой кнопки
LiquidCrystal_PCF8574 lcd(0x3F); // Адрес дисплея читать сканером !!!!!
void setup () {
// Назначаем порты на вход
pinMode (bt1,INPUT);
pinMode (bt2,INPUT);
pinMode (bt3,INPUT);
// Назначаем порты на выход
pinMode (ant1,OUTPUT);
pinMode (ant2,OUTPUT);
pinMode (ant3,OUTPUT);
digitalWrite (ant1, HIGH);
lcd.begin(16, 2);
lcd.setBacklight(255);// Включаем подсветку дисплея
lcd.setCursor(1, 0); lcd.print("Antenna Switch");
lcd.setCursor(0, 1);
lcd.print(" CI-BI-10M ");
}
void SetButton () //Определяем номер нажатой кнопки
{
if (digitalRead (bt1) == HIGH) {NumButton = 1;}
if (digitalRead (bt2) == HIGH) {NumButton = 2;}
if (digitalRead (bt3) == HIGH) {NumButton = 3;}
}
void loop ()
{
SetButton ();
switch (NumButton) { //Выбираем что и где нужно установить в зависимости от номера нажатой кнопки
case 1: {digitalWrite (ant1, HIGH); //Устанавливаем «1» выход антенны 1, остальные сбрасываем в «0»
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
//lcd.clear();
lcd.setCursor(0, 1);
lcd.print(" CI-BI-10M ");
break;
}
case 2: {digitalWrite (ant2, HIGH); //Устанавливаем «1» выход антенны 2, остальные сбрасываем в «0»
digitalWrite (ant1, LOW);
digitalWrite (ant3, LOW);
//lcd.clear();
lcd.setCursor(0, 1);
lcd.print(" TRIANGLE-20 ");
break;
}
case 3: {digitalWrite (ant3, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant1, LOW);
lcd.setCursor(1, 0);
lcd.setCursor(0, 1);
lcd.print(" DIPOL 40-M ");
delay(1000);
break;
}
}
}
C включением при старте нужной антенны разобрался, немогу разобраться с подсветкой, нехочу чтоб светилось постоянно. Прошу помочь ввиду недостатка знаний.
-
Выключить дисплей можно командой lcd.setBacklight(0) число в скобках уровень подсветки.
-
Приветствую, про эту комманду я знаю, я не совсем пойму что нужно сделать, как писать сам синтаксис. Порядок такой:
Вкл и запуск ардуино на дисплее надпись и соотв антенна включена, подсветка погорела 5 сек и погасла,
далее я включаю следущ антенну подсветка загорелась и погасла через 5 сек, след антенна горит 5 сек. Тоесть при нажатии кнопки выбора антенны подсветка горит 5 сек и тухнет.
-
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
//Порты для выходов переключаемых антенн
int ant1 = A2;
int ant2 = A1;
int ant3 = A0;
//Порты для кнопок
int bt1 = 2;
int bt2 = 3;
int bt3 = 4;
int bt4 = 5;
int NumButton; //Номер нажатой кнопки
LiquidCrystal_PCF8574 lcd(0x3F); // Адрес дисплея читать сканером !!!!!
void setup () {
// Назначаем порты на вход
pinMode (bt1,INPUT);
pinMode (bt2,INPUT);
pinMode (bt3,INPUT);
// Назначаем порты на выход
pinMode (ant1,OUTPUT);
pinMode (ant2,OUTPUT);
pinMode (ant3,OUTPUT);
digitalWrite (ant1, HIGH);//включаем нужную антенну при старте ардуино
lcd.begin(16, 2); //старт дисплея его инициализация
lcd.setBacklight(255);// Включаем подсветку дисплея
lcd.setCursor(1, 0); lcd.print("Antenna Switch");//верхняя надпись при старте ардуино
lcd.setCursor(0, 1);// нижняя надпись при старте
lcd.print(" CI-BI-10M ");//содержимое при старте второй строки
}
void SetButton () //Определяем номер нажатой кнопки
{
if (digitalRead (bt1) == HIGH) {NumButton = 1;}
if (digitalRead (bt2) == HIGH) {NumButton = 2;}
if (digitalRead (bt3) == HIGH) {NumButton = 3;}
if (digitalRead (bt4) == HIGH) {NumButton = 4;}
}
void loop ()
{
SetButton ();
switch (NumButton) { //Выбираем что и где нужно установить в зависимости от номера нажатой кнопки
case 1: {digitalWrite (ant1, HIGH); //Устанавливаем «1» выход антенны 1, остальные сбрасываем в «0»
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
lcd.setBacklight(255);
lcd.setCursor(0, 1);
lcd.print(" CI-BI-10M ");
break;
}
case 2: {digitalWrite (ant2, HIGH); //Устанавливаем «1» выход антенны 2, остальные сбрасываем в «0»
digitalWrite (ant1, LOW);
digitalWrite (ant3, LOW);
lcd.setBacklight(255);
lcd.setCursor(0, 1);
lcd.print(" TRIANGLE-20 ");
break;
}
case 3: {digitalWrite (ant3, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant1, LOW);
lcd.setBacklight(255);
lcd.setCursor(1, 0);
lcd.setCursor(0, 1);
lcd.print(" DIPOL 40-M ");
delay(1000);
break;
}
case 4:
digitalWrite (ant2, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant3, LOW);
lcd.setCursor(1, 0);
lcd.setCursor(0, 1);
lcd.print(" ALL ANT GROUND ");
delay(5000);
lcd.setBacklight(0);
break;
}
}
Добавил в скетч отключение всех антенн с последующим отключением подсветки, когда нажимаешь-подключаешь заново одну из трех антенн, подсветка заново стартует.
-
Я думаю решим проблему :-) щас времени ноль((( семья... работа... на сайт уже времени нет(((
-
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
//Порты для выходов переключаемых антенн
int ant1 = A2;
int ant2 = A1;
int ant3 = A0;
//Порты для кнопок
int bt1 = 2;
int bt2 = 3;
int bt3 = 4;
int bt4 = 5;
int NumButton; //Номер нажатой кнопки
LiquidCrystal_PCF8574 lcd(0x3F); // Адрес дисплея читать сканером !!!!!
void setup () {
// Назначаем порты на вход
pinMode (bt1,INPUT);
pinMode (bt2,INPUT);
pinMode (bt3,INPUT);
// Назначаем порты на выход
pinMode (ant1,OUTPUT);
pinMode (ant2,OUTPUT);
pinMode (ant3,OUTPUT);
digitalWrite (ant1, HIGH);//включаем нужную антенну при старте ардуино
lcd.begin(16, 2); //старт дисплея его инициализация
lcd.setBacklight(255);// Включаем подсветку дисплея
lcd.setCursor(1, 0); lcd.print("Antenna Switch");//верхняя надпись при старте ардуино
lcd.setCursor(0, 1);// нижняя надпись при старте
lcd.print(" CI-BI-10M ");//содержимое при старте второй строки
}
void SetButton () //Определяем номер нажатой кнопки
{
if (digitalRead (bt1) == HIGH) {NumButton = 1;}
if (digitalRead (bt2) == HIGH) {NumButton = 2;}
if (digitalRead (bt3) == HIGH) {NumButton = 3;}
if (digitalRead (bt4) == HIGH) {NumButton = 4;}
}
void loop ()
{
SetButton ();
switch (NumButton) { //Выбираем что и где нужно установить в зависимости от номера нажатой кнопки
case 1: {digitalWrite (ant1, HIGH); //Устанавливаем «1» выход антенны 1, остальные сбрасываем в «0»
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
lcd.setBacklight(255);
lcd.display();
lcd.setCursor(1, 0); lcd.print("Antenna Switch");
lcd.setCursor(0, 1);
lcd.print(" CI-BI-10M ");
break;
}
case 2: {digitalWrite (ant2, HIGH); //Устанавливаем «1» выход антенны 2, остальные сбрасываем в «0»
digitalWrite (ant1, LOW);
digitalWrite (ant3, LOW);
lcd.setBacklight(255);
lcd.display();
lcd.setCursor(1, 0); lcd.print("Antenna Switch");
lcd.setCursor(0, 1);
lcd.print(" TRIANGLE-20 ");
break;
}
case 3: {digitalWrite (ant3, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant1, LOW);
lcd.setBacklight(255);
lcd.display();
lcd.setCursor(1, 0); lcd.print("Antenna Switch");
lcd.setCursor(0, 1);
lcd.print(" DIPOL 40-M ");
//delay(1000);
break;
}
case 4:
digitalWrite (ant2, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant3, LOW);
lcd.setCursor(0, 1);
lcd.print(" ALL ANT GROUND ");
delay(1000);
lcd.setBacklight(0);
lcd.noDisplay();
break;
}
}
Сейчас все корректно, а именно когда антенны на земле то экран не горит, но символы высвечивались, теперь все тип топ.