так это пример работы . вот и хочу свой дисплей + ардуино уно совместить со скетчем этой темы , но у меня не получается .
так это пример работы . вот и хочу свой дисплей + ардуино уно совместить со скетчем этой темы , но у меня не получается .
R9US, не поделитесь печатной платой ?
делал для себя, номиналы не проставлял, ну думаю что разберетесь......
к ардуинке2.rar
Привет!
Именно этот проект на ардуине - пока что не подключал, где-то живёт надежда, что удастся подключить к этому прожекту дисплеи на 2,8....3,2".
А вот блок ra3ybw нормально подключился для измерения анодного тока и напряжения.
поэтому, как мне кажется, на ардуино тоже должно поехать...!
набросал прожект индикатора лампового УМ на Arduino nano 3 и LCD 2004
входы :
А0 = напряжение анода,
А1 = ток анода,
А2 = напряжение экранной сетки,
А3 = ток экранной сетки,
А4 = прямая волна от НО,
А5 = отраженная волна от НО,
сейчас вывод информации имеет такой вид :
тестовый скетч :
thermometerRoom2004_2.rar
to Integral
Сергей, подскажите,
- как сделать SWR дробью ?
- как сделать в нижней строке линейку-градусник мощности ?
.
Последний раз редактировалось tomcat; 12.02.2019 в 10:25.
SWR можно разбить математически и воткнуть точку при выводе на lcd между сотнями и десятками/единицами (в коде ниже).
Градусник в зависимости от требуемой красивости. Например вот так "в лоб":
Код:#include <LiquidCrystal.h> //пин ацп градусника #define PMETER_PIN A0 //уровни ацп каждого кубика градусника #define PMETER_1 80 #define PMETER_2 120 #define PMETER_3 160 #define PMETER_4 200 #define PMETER_5 240 #define PMETER_6 280 #define PMETER_7 320 #define PMETER_8 360 #define PMETER_9 400 #define PMETER_10 440 #define PMETER_11 480 #define PMETER_12 520 //спецсимволы для lcd byte lcd_sym_01[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111 }; byte lcd_sym_02[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111 }; byte lcd_sym_03[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111 }; byte lcd_sym_04[8] = { 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; byte lcd_sym_05[8] = { 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; byte lcd_sym_06[8] = { 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; byte lcd_sym_07[8] = { 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; LiquidCrystal lcd(4, 5, 10, 11, 12, 13); String pmtr; String xpmtr; uint16_t xpmeter; uint16_t swr = 160; void setup() { lcd.begin(16, 2); //инициализируем lcd спецсимволами initMeter(); //выводим целую и дробную часть SWR lcd.setCursor(0,0); lcd.print("SWR:"); lcd.print(swr / 100); //целая часть lcd.print("."); lcd.print(swr - (swr/100)*100); //дробная часть } void loop() { //выводим градусник непрерывно printMeter(analogRead(PMETER_PIN)); delay(50); } void initMeter() { //спецсимволы в память lcd lcd.createChar(1, lcd_sym_01); lcd.createChar(2, lcd_sym_02); lcd.createChar(3, lcd_sym_03); lcd.createChar(4, lcd_sym_04); lcd.createChar(5, lcd_sym_05); lcd.createChar(6, lcd_sym_06); lcd.createChar(7, lcd_sym_07); } void printMeter(uint16_t pmeter) { if (xpmeter != pmeter) { //если текущее значение ацп равно предыдущему - не обрабатываем pmtr = "PWR:"; if (pmeter > PMETER_12) { pmtr += "\02\02\03\03\04\04\05\05\06\06\07\07"; } else if (pmeter > PMETER_11) { pmtr += "\02\02\03\03\04\04\05\05\06\06\07"; } else if (pmeter > PMETER_10) { pmtr += "\02\02\03\03\04\04\05\05\06\06"; } else if (pmeter > PMETER_9) { pmtr += "\02\02\03\03\04\04\05\05\06"; } else if (pmeter > PMETER_8) { pmtr += "\02\02\03\03\04\04\05\05"; } else if (pmeter > PMETER_7) { pmtr += "\02\02\03\03\04\04\05"; } else if (pmeter > PMETER_6) { pmtr += "\02\02\03\03\04\04"; } else if (pmeter > PMETER_5) { pmtr += "\02\02\03\03\04"; } else if (pmeter > PMETER_4) { pmtr += "\02\02\03\03"; } else if (pmeter > PMETER_3) { pmtr += "\02\02\03"; } else if (pmeter > PMETER_2) { pmtr += "\02\02"; } else if (pmeter > PMETER_1) { pmtr += "\02"; } else { }; while (pmtr.length() < 16) { pmtr += " "; }; if (xpmtr != pmtr) { //если новая строка равна предыдущей - не печатаем (надо для устранения мерцания) lcd.setCursor(0,1); lcd.print(pmtr); xpmtr = pmtr; } xpmeter = pmeter; } }
Никак не соображу. Имеется такая команда
deley(180000);
digitalWrite(9,HIGH) ;
Т.е. после включения появляется 1 на pin9 с задержкой 180000
Как сделать 1 на pin9 в любой момент по импульсу на каком-нибудь входе (задать любой).
Что-бы задержка осталась, но если мне надо, я по импульсу включаю pin9 не дожидаясь пока эта задержка отработает.
Именно по импульсу!
Либо через прерывания либо не использовать delay.
Второе делается примерно так
loop() {
//какой то код без delay ...
if (<условие на событие старта отсчета 180 сек>) { pin9_millis = millis(); pin9_event = 1; }
if (((millis() - pin9_millis > 180000)&&(pin9_event == 1))||(<условие на событие по импульсу>)) { digitalWrite(9,HIGH) ; pin9_event = 0; }
//какой то код без delay ...
}
Т.е. если начали писать без delay - никаких delay уже нигде быть не должно, все управляется таймером и триггерами событий / флагами состояний. Можно почитать про конечные автоматы.
Тут коротко про delay и millis:
https://arduinomaster.ru/program/arduino-delay-millis/
Спасибо от exUA4ABS
Спасибо! С таймерами никогда не имел дело. Будем учиться.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)