Сообщество - Arduino & Pi
Добавить пост

Arduino & Pi

1 424 поста 20 629 подписчиков

Популярные теги в сообществе:

Прошу помощи, баг цифрового микшерного пульта

Доборго времени суток, люди добрые да разумные. Имею цифровой микшерный пульт Studiomaster Digilive 16. Пульт управляется встроенным планшетом на андроиде и ПО DIGILIVE. Поэтому я и пишу сюда. В общем, в пульте есть мелкая, но очень заковыристая проблемка. Добавляешь или убавляешь громкость на любом из фейдеров любого канала, входа, выхода, не важно. Если делать это достаточно интенсивно, все без проблем, команда обрабатывается процессором без проблем, без задержек. Но если двигать тем же фейдером очень медленно, то система игнорирует эту команду! Можно очень медленно увести фейдер от, допустим, 60 процентного положения до нулевого, а на дисплее будет показывать 60 процентов и звук с цап будет идти на 60 проц. Но если дернуть фейдер хоть на небольшую величину, но главное достаточно резко, то проц среагирует и рывком приведет громкость к тому положению, в котором сейчас фейдер есть. Это меня жутко высаживает на мероприятиях, когда фоновую музыку нужно очень плавно и незаметно приглушить или увести, приходится эпилептически дергать ручкой туда-сюда мелкими рывочками. Самое веселое, писал об этом ажно на завод изготовитель, на сайт Studiomaster.com, там меня сначала игнорили, затем некий Jack написал мне ( конечно все через переводчик), что сделает запрос инженеру на завод в китае. В итоге пришло письмо, что ничего сделать не можем, ваша модель консоли устарела, покупайте более позднюю консоль. Вот так вота. Затем я искал программистов на авито, один мне ответил, что за такое не возьмется, еще двое вообще ничего не ответили. Создал пост на Киберфоруме, ответов ноль:https://www.cyberforum.ru/audio-soft/thread3150308.html А пульт то хороший, функций умотаться, продавать жалко, хочется исправить проблемку. Есть тут спецы? Прошивка есть в свободном доступе в интернете, есть она и у меня, все предоставлю. Пульт умеет создавать лог последних действий, можно, если я правильно понимаю, выявить в теле программы обработку движения резистора фейдера, поменять там какие нибудь тайминги. Я не программист, может, неправильно выражаюсь, сильно не пинайте.

Проблема с подключением по ssh к raspberry pi 3 b

Привет!
Я новичок в этом деле, нужна Ваша помощь. Также новичок на Пикабу и не знаю, длинный мой пост или нет, по сему заранее перед вами извиняюсь.


Собираюсь сделать настенный терминал управления умным домом с home assistant. В наличии есть:
1) Cама плата Raspberry pi 3 b

2) Сенсорный дисплей, диагональ 10.1, разрешение 1024х600

3) Картридер

4) Sd карточка на 32gb и соответственно переходник

За неимением оригинального блока питания для одноплатника использую бп - внешний аккумулятор Moonfish на 20Вт.

Опираюсь по этому гайду:

YouTube17:56

Касаемо проблемы:

С помощью imager устанавливаю на карту памяти Raspberry Pi OS Lite 64-BIT. Далее колхозно для теста собираю плату с дисплеем, подключая свистки беспроводных мыши и клавиатуры, вместе с питанием от бп. Одноплатник привычно запускается до рабочего стола. Захожу уже на Пк в командную строку и по гайдам идет этам подключения по ssh. Необходимо достучаться через host name или по ip. С именем хоста по не понятной мне причине результат отрицательный, по ip предлагает ввести пароль.

Тут как раз я и задаюсь вопросом "Где же зарыта собака?". При вводе пароля (символы не отображаются, судя по инфе из интернетов, ради безопасности) консоль выдает отказ в доступе.

Возвращаясь к этапу "установка ОС на сд карту". При установке всплывает окно с переходом в настройки, где можно прописать имя хоста с паролем, ssid и пароль для него, так же проставить галочку у ssh. Все это заполнил, галочку поставил.

При вводе пароля в командной строке Пк мне отказывают в доступе. Ищу ответ на форумах, но внятного решения так и не нашел. Как быть? Заранее спасибо всем за комменты и конструктивную критику.

Показать полностью

Arduino nano и аппаратный UART

Горожу радиоприемник для человека с плохим зрением. Nano+RDA5807. В качестве индикатора использую VGA монитор. Не буду вдаваться в подробности. Нужен еще один аппаратный UART c TTL уровнями для связи двух Нан.
Вопрос1: Бывают ли платки с например интерфейсом I2C и выходом-входом UART? Посоветуете?
Вопрос2: Если отключить от платы USB разъем, ее ножки TX и RX можно спокойно использовать? Или там как-то надо отключить USB преобразователь CH340?

Про Arduino Nano Atmega328PB знаю, но не вижу где там пины от второго UARTa. Голый чип же использовать у меня руки-крюки.

I2C использовать не предлагать: с VGAx оно дрыгает картинку и при стирании начинает вести себя неадекватно, явно лезет в непойми какую память

softwareSerial уже задействован, два работать будут только по очереди

Upd

Решение:

Вариант1. Переключатель, отключающий USB и соединяющий аппаратныt UART двух Нано между собой.

Вариант2. Вот такой преобразователь I2C-UART https://aliexpress.ru/item/1005004556856100.html?sku_id=1200..., но с ним так же придется делать отключение USB на ведомой плате.

Вариант3. Еще одна Нано с софтом I2C-UART , но с ним так же придется делать отключение USB на ведомой плате.

Всем спасибо!

Помогите, люди добрые

Всем ЗдрасссЬте. Очень надеюсь на вашу помощь. Сам я электрик в третьем поколении, но, пока что, для меня тема ардуино это тёмный лес. Как говорится - "я аналоговый человек в цифровом мире". Захотел я сделать бегущее освещение в коридоре. Всё купил, а скетч написать толку не хватает. Для знающих это будет не сложно. Суть такая. Есть лента на 300 диодов 2812b. Нужно, чтобы при подаче питания, они зажигались бегущей дорожкой с 1го до 150го и одновременно со 151го до 300го. Белым светом полной яркости. Я хочу их разделить на две полосы, чтобы при включении они загорались на встречу друг другу.
Если кто-то напишет скетч так, чтобы я просто скопировал его и вставил в окно, я буду очень сильно благодарен. Можно наверное и файлом, только я пока не знаю как его загрузить. Заранее спасибо, и сильно не пинайте, я только учусь.... Всем бобра...

Oppo Watch X:Анонс 29 февраля

Oppo Watch X:Анонс 29 февраля Гаджеты, Android, Смартфон, Мобильные телефоны, Электроника, Изобретения, Длиннопост

Oppo анонсирует свои следующие флагманские умные часы на Wear OS, которые поступят в продажу 29 февраля в Малайзии. Oppo Watch X, похоже, почти идентичны недавно анонсированным OnePlus Watch 2, который выйдет тремя днями ранее, 26 февраля .


Oppo Watch X и OnePlus Watch 2

Oppo Watch X имеют тот же дизайн, что и OnePlus Watch 2, и мы можем предположить те же характеристики. Они должны включать 1,43-дюймовый OLED-дисплей с разрешением 466 x 466 пикселей, чип Snapdragon W5 Gen 1 и Google Wear OS 4. Oppo Watch X будут предлагаться в цветах Platinum Black и Mars Brown.

Oppo Watch X:Анонс 29 февраля Гаджеты, Android, Смартфон, Мобильные телефоны, Электроника, Изобретения, Длиннопост


Сертификаты Oppo Watch X MIIT и 3C

Что касается связанных новостей, Oppo Watch X (OWW231) получили сертификаты MIIT и 3C, которые подтверждают возможность подключения 4G LTE через eSIM и поддержку зарядки 10 Вт. По слухам, умные часы будут оснащены аккумулятором емкостью 500 мАч.

источник

Помогите пожалуйста написать скетч

Здравствуйте. Достался по случаю предпусковой подогреватель Webasto termo top c, с физически убитой платой контроллера, прям сломана в нескольких местах от удара, восстановлению не подлежит. Так вот на просторах интернета была найдена схема контроллера на Ардуино для этого котла, также есть скетч к этой плате. Но если со схемой я ещё разберусь сам, подберу детали и спаяю. То вот скетч под мои задачи прошу вас помочь переработать, так как я в этом ни в зуб ногой. Задача стоит следующим образом. Исключить из скетча вывод информации на LCD экран, т.к. это не требуется. Так же надо удалить из программы все что связано с датчиком пламени, у меня в котле его нет. Работу котла контролировать по температуре Если это важно то планирую использовать Ардуино нано. Прошу комрады помощи.

Помогите пожалуйста написать скетч Arduino, Скетч, Программирование, Электроника, Длиннопост

#include <glcd.h>
#include <glcd_Buildinfo.h>
#include <glcd_Config.h>


//MEGA
#include <glcd.h>
#include <config/ks0108.h> // library header
#include <fonts/Arial14.h> // font definition for 14 point Arial font.
#include <fonts/SystemFont5x7.h> // system font
#include <bitmaps/ArduinoIcon.h> // bitmap

// Выходы
int Pin_CandelGlow = 3; // Свеча накала
int Pin_WaterPump = 9; // Водяной насос
int Pin_GasPump = 6; //Дозацыя горючего //10,15,20,25,30,35,40,45,50,100// Количество доз топлива, просто дозацыя.
int Pin_AirPump = 10; //Подача воздуха по ШИМ

// Входы
int Pin_StartStop = 12; // Цыфровой вход Включить или выключить установку
int Pin_VoltageMonitoring = 0; // Постоянное наблюдение за напряжением питания
int Pin_FlameMonitoring = 1; // Наблюдение состаяния пламени
int Pin_Temperatura = 2; // Аналоговае измерение температуры котла-жидкости

float VoltAnalog, Voltage, X, T_heater; // измерение напрежение источника питания

long t_1 = 0; // переменная для хранения времении работы программы в милис
long t_2 = 0; // переменная для хранения времении работы программы в милис

String inData; // переменыя читающая данные текста (текстовые команды)

int Flame, air, val, low, i, b, t, g, p, l;

boolean pauzada = false;
boolean stopp = false;
boolean pauzadaOff = false;

void setup()
{
pinMode(Pin_StartStop, INPUT);
pinMode(Pin_CandelGlow, OUTPUT);
pinMode(Pin_GasPump, OUTPUT);
pinMode(Pin_WaterPump, OUTPUT);
pinMode(Pin_AirPump, OUTPUT);

Serial.begin(9600);

delay(500);
//GLCD.Init() ; //инциализовать для рисования зажиганием пикселей (обычный вывод)
GLCD.Init(NON_INVERTED); // тоже самое
//GLCD.Init(INVERTED); // инциализовать для рисования выключением пикселей (инверсный вывод)
GLCD.ClearScreen(); // погасить все пиксели (если режим NORMAL , если INVERTED - зажечь)
GLCD.ClearScreen(WHITE); // тоже самое
//GLCD.ClearScreen( BLACK); // зажечь все пиксели
GLCD.SetFontColor( BLACK); // печатаем "цветом" BLACK

//*****ТЕКСТОВЫЕ*КОМАНДЫ*****
// test
// tempr
// airon
// airoff
// wateron
// wateroff
// gason -> 5,10,15,20,25,30,35,40,45,50
// glowon сам выллючется
// flame
// start
// stop

}

void test() // кластер тестирования всех мехонизмов и сенсоров
{

digitalWrite(Pin_CandelGlow, HIGH);
Serial.println("Pin_CandelGlow: On Off");
delay(5000);
digitalWrite(Pin_CandelGlow, LOW);
delay(1000);

digitalWrite(Pin_WaterPump, HIGH);
Serial.println("Pin_WaterPump: On Off");
delay(5000);
digitalWrite(Pin_WaterPump, LOW);
delay(1000);

digitalWrite(Pin_GasPump, HIGH);
Serial.println("Pin_GasPump: On Off");
delay(500);
digitalWrite(Pin_GasPump, LOW);
delay(1000);

digitalWrite(Pin_AirPump, HIGH);
Serial.println("Pin_AirPump: On Off");
delay(5000);
digitalWrite(Pin_AirPump, LOW);
delay(1000);
Serial.println(" ");

///Voltage///
volt();

///Flame///
flame();

///StartStop///

if (digitalRead(Pin_StartStop) == HIGH)
{
Serial.println("Pin_StartStop: HIGH");
}
if (digitalRead(Pin_StartStop) == LOW)
{
Serial.println("Pin_StartStop: LOW");
}
Serial.println(" ");
delay(1000);

///Temperatura///

Temperatura();
Serial.print("T_heater: ");
Serial.print(T_heater);
Serial.println(" ");
delay(1000);
}

void ReadTextComands() // читает текст
{
inData = "";
if (Serial.available() > 0)
{
int h = Serial.available();
// if you are getting escape -characters try h--; here

for (int i = 0; i < h; i++)
{
inData += (char)Serial.read();
}
// if you are getting escape -characters try Serial.read(); here
}
//print it out
Serial.println(inData);
delay(10);
}

void flame() // состояния пламени
{
Flame = analogRead(Pin_FlameMonitoring);
Flame = map(Flame, 320, 890, 0, 100);

}


// показания температуры с плавающей запятой
float floatMap(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
void Temperatura() // температурa
{
int ValueTempratura = analogRead(Pin_Temperatura); // считывает показания сенсоро
T_heater = floatMap(ValueTempratura, 544, 365, 22, 52); // показания термосенсора переводит в температуру /// коректировка температуры
T_heater = constrain(T_heater, -30, 120); // граничет показания температуры от -30 до +150
/*
Serial.print("ValueTempratura: ");/// коректировка температуры
Serial.print(ValueTempratura); /// коректировка температуры
Serial.print(" T: "); /// коректировка температуры
Serial.println((T_heater), 2);
*/
}

void volt()
{
int Pin0_AnalogValue = analogRead(Pin_VoltageMonitoring);
VoltAnalog = 0.0046 * Pin0_AnalogValue;
int R1 = 29500; //30000 Om 29700
int R2 = 7430; //7500 Om 7470

X = (R2 / ((R1 + R2) * VoltAnalog)) * 100;
Voltage = (123.775 / X) * (-1); //131.25 menjatj ot 100 i vihe 132.25

// Serial.print("Voltage: ");
// Serial.print((float)(Voltage), 2);
}

void pauza() // этап паузы котла
{
delay(50);
Serial.println("Pauza");
GLCD.GotoXY(1,3);
GLCD.Puts("Pauza");

while (1)
{
flame();
delay(50);
Serial.println(Flame);
GLCD.GotoXY(1,13); //Переместить «курсор» в указанные координаты
GLCD.Puts("Flame: ");
GLCD. print(Flame,DEC);

digitalWrite(Pin_WaterPump, HIGH);

digitalWrite(Pin_CandelGlow, LOW);
digitalWrite(Pin_GasPump, LOW);
digitalWrite(Pin_AirPump, 80);
if (Flame <= 15)
{
digitalWrite(Pin_AirPump, LOW);
digitalWrite(Pin_WaterPump, LOW);

Serial.println("Pauza On");
digitalWrite(Pin_AirPump, LOW);
digitalWrite(Pin_WaterPump, HIGH);
digitalWrite(Pin_CandelGlow, LOW);
digitalWrite(Pin_GasPump, LOW);

pauzada = true;
break;
}
}
}

void stopproces() // остановкa котла
{
delay(10);
Serial.println("Stoping");
GLCD.GotoXY(1,3);
GLCD.Puts("Stoping");

while (1)
{
flame();
delay(500);
Serial.println(Flame);
GLCD.GotoXY(1,13); //Переместить «курсор» в указанные координаты
GLCD.Puts("Flame: ");
GLCD. print(Flame,DEC);

digitalWrite(Pin_WaterPump, HIGH);

digitalWrite(Pin_CandelGlow, LOW);
digitalWrite(Pin_GasPump, LOW);
analogWrite(Pin_AirPump, 80);
if (Flame <= 15)
{
digitalWrite(Pin_AirPump, LOW);
digitalWrite(Pin_WaterPump, LOW);

for ( i = 0; i < 3 ; i++ ) // 3 коротких продува, окончательное завершение процеса
{
digitalWrite(Pin_AirPump, HIGH);
delay(1500);
digitalWrite(Pin_AirPump, LOW);
delay(1500);
}

digitalWrite(Pin_AirPump, LOW);
digitalWrite(Pin_WaterPump, LOW);
digitalWrite(Pin_CandelGlow, LOW);
digitalWrite(Pin_GasPump, LOW);
pauzadaOff = false;
pauzada = false;

Serial.println("Proces Off");
GLCD.GotoXY(1,23); //Переместить «курсор» в указанные координаты
GLCD.Puts("Proces Off");
delay(5000);
GLCD.ClearScreen(WHITE);
break;
}
}
}

void loop()
{
GLCD.SelectFont(System5x7,BLACK);

Temperatura();
volt();

GLCD.GotoXY(85,3); //Переместить «курсор» в указанные координаты
GLCD.Puts("T:");
GLCD. print((float)(T_heater)); //печатает вещественное число с двумя знаками после запятой.
GLCD.GotoXY(85,13); //Переместить «курсор» в указанные координаты
GLCD.Puts("V:");
GLCD. println((float)(Voltage));
Serial.print("T: ");
Serial.println(T_heater);
Serial.print("V: ");
Serial.println(Voltage);

/////////////////////////////////////////////
delay(2000);
ReadTextComands();

GLCD.GotoXY(1,23);

GLCD.print(inData);
Serial.print(inData);

/////////////////////////////////////////////

///Test///

if (String(inData) == "test") // начать тестирование систем
{
Serial.println("TestRun");
test();
}

///temperatura///

if (String(inData) == "tempr")
{
Temperatura();
Serial.print("T_heater: ");
Serial.println(T_heater);
}

///Air///

if (String(inData) == "airon") // включить или выключить подачу воздуха (только при полной остоновке котла)
{
Serial.println("AirOn");
digitalWrite(Pin_AirPump, HIGH);

t_1 = millis();
while ((t <= 300) || (String(inData) == "airoff")) // выключить после 5 минут работы или принудительно выключить
{
ReadTextComands();

t_2 = millis();
if (t_2 < 0)
{
(t_2)*(-1);
}
long t = (t_2 - t_1) / 1000;
delay(2000);

if ((String(inData) == "airoff") || (t >= 300))
{
Serial.println("AirOff");
digitalWrite(Pin_AirPump, LOW);
break;
}
}
}

///WaterPump///

if (String(inData) == "wateron") // включить или выключить церкулецыонный насос (только при полной остоновке котла)
{
Serial.println("WaterOn");
digitalWrite(Pin_WaterPump, HIGH);

t_1 = millis();
while ((t <= 600) || (String(inData) == "wateroff")) // выключить после 10 минут работы или принудительно выключить
{
ReadTextComands();

t_2 = millis();
if (t_2 < 0)
{
(t_2)*(-1);
}

long t = (t_2 - t_1) / 1000;
delay(500);

if ((String(inData) == "wateroff") || (t >= 600))
{
Serial.println("WaterOff");
digitalWrite(Pin_WaterPump, LOW);
break;
}
}
}

///GasOn///

if (String(inData) == "gason") // подача топлива (только при полной остоновке котла)
{
Serial.println("Enter the number of Gas doses!?");
Serial.println("5,10,15,20,25,30,35,40,45,50");

t_1 = millis();
while (1) // ждём получения команды на количество доз топлива
{
delay(100);

int val = Serial.parseInt();
if ((val == 5) || (val == 10) || (val == 15) || (val == 20) || (val == 25) || (val == 30) || (val == 35) || (val == 40) || (val == 45) || (val == 50)) //Дозацыя по команде от компютера
{
Serial.println(" ");
Serial.print("GasPumping: ");
Serial.println(val);

for (i = 0; i < val; i++) //энное раз прыскaет топливом
{
digitalWrite(Pin_GasPump, HIGH);
delay(150);
digitalWrite(Pin_GasPump, LOW);
delay(250);
}
break;
}
t_2 = millis();
if (t_2 < 0)
{
(t_2)*(-1);
}

long t = (t_2 - t_1) / 1000;

if (t > 60) // до 1 мин
{
break;
}
// ждём нужную команду до 1 мин..... на левак не реогирует
Serial.println(".");
}
}

///GlowOn///

if (String(inData) == "glowon") //включить свечу накала на 7 секунд
{
digitalWrite(Pin_CandelGlow, HIGH);
Serial.println("Pin_CandelGlow: On");
delay(7500);
digitalWrite(Pin_CandelGlow, LOW);
Serial.println("Pin_CandelGlow: Off");
}

if (String(inData) == "flame")
{
for( i=0; i<50; i++ )
{
flame();
Serial.print("Flame:");
Serial.println(Flame);
Serial.println(i);
delay(1000);
}
i=0;
}

if (T_heater >= 85) //вслучае перегрева опевещает и ждёт пока остынет при этом недаст запустится повторно
{
GLCD.ClearScreen(WHITE);
GLCD.SelectFont(System5x7,BLACK);
delay(1000);
while (1)
{
Temperatura();
delay(500);
Serial.print("DANGEROUUS CONDITION ");
Serial.println("VERY HOT, DONT START");
Serial.print(" Temperatura: ");
Serial.println(T_heater);
GLCD.GotoXY(1,13); //Переместить «курсор» в указанные координаты
GLCD.Puts("VERY HOT");
GLCD.GotoXY(1,23); //Переместить «курсор» в указанные координаты
GLCD.Puts("DANGEROUUS CONDITION");
GLCD.GotoXY(1,33); //Переместить «курсор» в указанные координаты
GLCD.Puts("Temperatura: ");
GLCD. print((float)(T_heater)); //печатает вещественное число с двумя знаками после запятой.

if (T_heater <= 70)
{
GLCD.ClearScreen(WHITE);
GLCD.SelectFont(System5x7,BLACK);
break;
}
}
}
///********ПАУЗА*ЖДЁТ*СВАЕГО*МОМЕНТА*СТAТЬ*НЕ*ПАУЗOЙ*********///
//?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
if (pauzada == true)
{
while (1)
{
Temperatura();
delay(500);
ReadTextComands(); // отослать команду если надо всё выключить
delay(500);

Serial.print("Temperatura: ");
Serial.println(T_heater);
GLCD.GotoXY(1,23); //Переместить «курсор» в указанные координаты
GLCD.Puts("Temperatura: ");
GLCD. print((float)(T_heater)); //печатает вещественное число с двумя знаками после запятой.

if ( T_heater <= 55 )
{
pauzadaOff = true;
break;
}

if ((String(inData) == "stop") || (digitalRead(Pin_StartStop) == HIGH)|| (b == 4))
{
GLCD.ClearScreen(WHITE);
GLCD.SelectFont(System5x7,BLACK);
stopproces();
break;
}
}
}

///****************************** ЗАПУСК УСТАНОВКИ ******************************///

if ((String(inData) == "start") || (digitalRead(Pin_StartStop) == HIGH) || (pauzadaOff == true))
{
if (T_heater >= 70) //вслучае перегрева опевещает и ждёт пока остынет при этом недаст запустится повторно так как тут в цыкле застрянет
{
Temperatura();
Serial.print("DANGEROUUS CONDITION ");
Serial.println("VERY HOT, DONT START");
Serial.print("Temperatura: ");
Serial.println(T_heater);
return;
}

Serial.flush();
Serial.println("StartHeating");

GLCD.ClearScreen(WHITE);
GLCD.SelectFont(System5x7,BLACK); //указать щрифт и ево робочий режим
GLCD.GotoXY(1,3); //Переместить «курсор» в указанные координаты
GLCD.Puts("StartHeating"); //STARTING,WORKING,FINISHED,ERROR

analogWrite(Pin_AirPump, 50); //вkлючон воздушный вентилятор
delay(5000);
digitalWrite(Pin_CandelGlow, HIGH);
delay(7500);
digitalWrite(Pin_CandelGlow, LOW);
delay(7500);

for ( b = 0; b < 4; b++ ) // 4 раза запускает печь
{
lable:
digitalWrite(Pin_CandelGlow, HIGH);
delay(9000);

Serial.println("Gas pumping:");
GLCD.GotoXY(1,13); //Переместить «курсор» в указанные координаты
GLCD.Puts("Gas pumping");

for ( i = 0; i < 10; i++) // 10 раз прыскнет топливом
{
digitalWrite(Pin_GasPump, HIGH);
delay(100);
digitalWrite(Pin_GasPump, LOW);
delay(300);
}
digitalWrite(Pin_CandelGlow, LOW); //выключить свечу накала

flame();
Serial.print("Flame: ");
Serial.println(Flame);
GLCD.GotoXY(1,23); //Переместить «курсор» в указанные координаты
GLCD.Puts("Flame: ");
GLCD. print(Flame,DEC);

///****************************** РАБОТА УСТАНОВКИ ******************************///

if (Flame >= 20 && i == 10 ) //если фото сенсор фиксирует пламя, то программа проходит далее
{
digitalWrite(Pin_CandelGlow, LOW); //выключить свечу накала ewo raz
analogWrite(Pin_AirPump, 50); //вkлючон воздушный вентилятор
digitalWrite(Pin_WaterPump, HIGH); //вклить воденой насос
delay(100);
digitalWrite(Pin_GasPump, HIGH);
delay(100);
digitalWrite(Pin_GasPump, LOW);

for ( l = 50; l > 0; l--) // начало разгона установки в плавном режиме
{
digitalWrite(Pin_GasPump, HIGH);
delay(100);
digitalWrite(Pin_GasPump, LOW);
delay(450);

flame();
Serial.print(l);
Serial.print(" Flame: ");
Serial.println(Flame);

GLCD.GotoXY(1,23); //Переместить «курсор» в указанные координаты
GLCD.Puts("Flame: ");
GLCD. print(Flame,DEC);
GLCD.Puts(" i: ");
GLCD. print(l);

if (Flame <= 20)
{
goto lable;
break;
}
}
GLCD.ClearScreen(WHITE); // Очистить экран
GLCD.SelectFont(System5x7,BLACK); //указать щрифт и ево робочий режим

while ((Flame >= 20) && (T_heater <= 82)) // зайдёт в цыкл если есть плымя и температура ниже 80
{
ReadTextComands();
flame();
Temperatura();
volt();

digitalWrite(Pin_WaterPump, HIGH); //вкюлить воденой насос

///*** режимы работы изменяющиеся от температуры***///

if (T_heater <= 30)
{
air = map(T_heater, 5, 30, 50, 80); //меняем подачу воздуха в зависемости от температуры
air = constrain(air, 50, 80);
t = map(T_heater, 5, 30, 450, 300); //меняем время выключенного состояния топливного дозатора в зависемости от температуры
t = constrain(t, 300, 450);

Serial.print("T<=30 ");
GLCD.GotoXY(1,13); //Переместить «курсор» в указанные координаты
GLCD.EraseTextLine(eraseFULL_LINE);
GLCD.Puts("T<=30");
}
if ((30 <= T_heater) && ( T_heater <= 60))
{
air = map(T_heater, 30, 60, 80, 120);
air = constrain(air, 80, 120);
t = 300;

Serial.print("30<=T<=60 ");
GLCD.GotoXY(1,13); //Переместить «курсор» в указанные координаты
GLCD.EraseTextLine(eraseFULL_LINE);
GLCD.Puts("30<=T<=60");
}
if ( (60 <= T_heater) && (T_heater <= 80) )
{
air = map(T_heater, 60, 80, 120 , 80);
air = constrain(air, 80, 120);
t = map(T_heater, 60, 80, 300, 600);
t = constrain(t, 300, 600);

Serial.print("60<=T<=80 ");
GLCD.GotoXY(1,13); //Переместить «курсор» в указанные координаты
GLCD.EraseTextLine(eraseFULL_LINE);
GLCD.Puts("60<=T<=80");
}
analogWrite(Pin_AirPump, air); //работа подачи воздуха


///*************************************************///

Serial.print("F: ");
Serial.print(Flame);
Serial.print(" T: ");
Serial.print(T_heater);
Serial.print(" A: ");
Serial.print(air);
Serial.print(" Low(t): ");
Serial.print(low);
Serial.print(" V: ");
Serial.println(Voltage);

digitalWrite(Pin_GasPump, HIGH);
delay(100);
digitalWrite(Pin_GasPump, LOW);
low = t;
delay(low);

GLCD.GotoXY(1,3);
GLCD.Puts("Heating");
GLCD.GotoXY(50,3); //Переместить «курсор» в указанные координаты
GLCD.Puts("Volt: ");
GLCD. print((float)(Voltage));
GLCD.GotoXY(1,23); //Переместить «курсор» в указанные координаты
GLCD.Puts("Flame: ");
GLCD. print(Flame,DEC);
GLCD.GotoXY(1,33); //Переместить «курсор» в указанные координаты
GLCD.Puts("Temperatura: ");
GLCD. print((float)(T_heater)); //печатает вещественное число с двумя знаками после запятой.
GLCD.GotoXY(1,43); //Переместить «курсор» в указанные координаты
GLCD.Puts("Air: ");
GLCD. print(air,DEC);
GLCD.GotoXY(1,53); //Переместить «курсор» в указанные координаты
GLCD.Puts("Low(t): ");
GLCD. print(t,DEC);

//****************************** ОСТАНОВКА*ПРИНУДИТЕЛЬНАЯ*ПРОПАЛО_ПЛАМЯ*ПАУЗА ******************************//

if ((String(inData) == "stop") || (digitalRead(Pin_StartStop) == HIGH) || (Flame <= 20)) // Нажата кнопка включить выключить или пропало плямя, то полная остановка.
{
GLCD.ClearScreen(WHITE); // Очистить экран
GLCD.SelectFont(System5x7,BLACK); //указать щрифт и ево робочий режим
stopp = true;
break;
}
if (T_heater >= 80)
{
GLCD.ClearScreen(WHITE); // Очистить экран
GLCD.SelectFont(System5x7,BLACK); //указать щрифт и ево робочий режим
pauzada = true;
break;
}
}
if ( stopp == true )
{
stopp = true;
break;
}
if (pauzada == true)
{
pauzada = true;
break;
}
}
if ( stopp == true )
{
stopp = true;
break;
}
if (pauzada == true)
{
pauzada = true;
break;
}
}
if (( b == 4 ) || (stopp == true)) // Остановка запуска если незапустился с 4 раза, завершить работу котла
{
stopproces();
}
if (pauzada == true)
{
pauza();
}
}
}

Схема и скетч взяты отсюда: https://forum.amperka.ru/threads/Самодельный-блок-управления-webasto.7672/

Помогите с поиском

На просторах сети попадалось устройство для считывания сигналов от пультов телевизоров, шлагбаумов в общем много функциональное, белый корпус и желтые вставки экранчик монохромный кажется тоже желтый, хотел тестю подарок сделать а нагуглить не могу уже сил нет , уже последняя страница Гугла на горизонте (

Я тут было дело просил помощи в сборе лампы на ардуино

И хотел бы отметить человека, который отозвался помочь. И сделал это не попросив ни копейки. @SergoM спасибо тебе большое!

Я тут было дело  просил помощи в сборе лампы на ардуино Благодарность, Arduino, Лампа, Длиннопост, Скриншот, Комментарии на Пикабу
Я тут было дело  просил помощи в сборе лампы на ардуино Благодарность, Arduino, Лампа, Длиннопост, Скриншот, Комментарии на Пикабу
Я тут было дело  просил помощи в сборе лампы на ардуино Благодарность, Arduino, Лампа, Длиннопост, Скриншот, Комментарии на Пикабу
Отличная работа, все прочитано!