Hard&Soft > Arduino UNO
Антенный коммутатор на ардуино нано
Love777888:
Приветствую, давно тут не был, в общем нужна помощь! Надумал себе сделать коммутатор, поставил треугольник на 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;
}
}
}
Koshak:
--- Цитировать ---// Пины для дисплея 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;
}
}
}
--- Конец цитаты ---
Можно так попробовать. Скролл можно посмотреть в примерах библиотеки дисплея.
Love777888:
Ухты! Спасибо, буду пробовать!
Love777888:
// Пины для дисплея 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(); невероятно паразитная хрень, из за нее у меня мерцал экран.
Еще забыл при включении чтобы включена была одна антенна например си би, можно просто забыть нажать на клавишу выбора антенны и вкл передачу, как то так
Love777888:
/ Пины для дисплея 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 включением при старте нужной антенны разобрался, немогу разобраться с подсветкой, нехочу чтоб светилось постоянно. Прошу помочь ввиду недостатка знаний.
Навигация
Перейти к полной версии