дисплей lcd 16x светодиоды 2 реле кнопка концевик

Grigoriy35342355

✩✩✩✩✩✩✩
17 Апр 2023
4
0
Рекомендуется оформить сообщение в соответствии с правилами раздела
Здравствуйте. Я придумал проект в котором надо чтобы включалось реле по 1 нажатию кнопки
на дисплее в данный момент должен быть написан текст..., и загореться светодиод. Когда сработает концевик реле должно выключится и на дисплее должен появиться текст. По 2 ному нажатию на эту кнопку должно включится реле, на дисплее должен появиться текст, загореться двойной светодиод. По тройному нажатию на кнопку должно выключится реле и появиться текст. Дисплей lcd 16x
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,964
632
44
И? Вы хотите чтобы все сделали за вас? Тут это так не работает.
 

Grigoriy35342355

✩✩✩✩✩✩✩
17 Апр 2023
4
0
Я очень начинающий. Помогите пожалуйста мне 13 лет все проекты делаю сам. но тут прям не знаю как

Спасибо заранее!!!

еще перед тем как нажмешь первый раз на кнопку 1 раз на дисплее должен быть текст
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,262
1,300
Москва
Начни со схемы, как все это должно подключаться. Это основа.
Подключи 1 кнопку и научись ей манипулировать в программе, получать клики с нее, посмотри библиотеку кнопок Гайвера.
Подключи 2-ую кнопку и добейся что бы обе кнопки работали без заикания.
Отладку от результата работы выводи в монитор порта.
Подключи светодиоды. Поуправляй ими (можно отдельно от кнопок)
Подключи концевики - по сути те же кнопки.
Подключи дисплей, выведи информацию отладочную.
В конце, когда все будет работать можно и реле подключать.
Останется только побороть зависания от работы реле (если будут. а они очень даже могут быть)
Все, проект готов.
 
  • Лойс +1
Реакции: Wan-Derer

Grigoriy35342355

✩✩✩✩✩✩✩
17 Апр 2023
4
0
@Старик Похабыч,
Все понятно, но не совсем понятно как сделать на одной кнопке чтобы можно было одинарный
двойной
и тройной клик зафиксировать и передать в программу

И как сделать переход текста по различным кликам

как это соединить понял
но как программно написать нет
 

Grigoriy35342355

✩✩✩✩✩✩✩
17 Апр 2023
4
0
Оформи код соответствующим тэгом
Вот набросал, но выдает ошибку
'relayPin' was not declared in this scope
в конце void loop()
lastButten = currentButten; // Переприсваеваем прошлое состояние кнопки
digitalWrite (relayPin, relayOn); // Включаем или выключаем реле (смотря что пришло после инверсии)
delay (2); // Ждем 2 милисек.

digitalWrite (relayPin, relayOn); // Включаем или выключаем реле (смотря что пришло после инверсии) если конкретно то тут
Подскажите пожалуйста в чем дело

//----------------------------menu-------------------------------------

#include <LiquidCrystal.h>

// RS, E, DB4, DB5, DB6, DB7
LiquidCrystal lcd(4, 5, 10, 11, 12, 13);

#define BUTTON_PIN 10 // пин кнопки

// тут хранится текущее нажатие (от 0 до 5)
int clicks;
boolean buttonWasUp = true;

void setup()
{
lcd.begin(16, 2);
// initialize the LED pin as an output:
// initialize the pushbutton pin as an input:
pinMode(BUTTON_PIN, INPUT_PULLUP);

// начальное сообщение
lcd.setCursor(0, 0);
lcd.print("Здравствуйте наж"); // текст на экране
// устанавливаем курсор в колонку 0, строку 1. То есть на
// самом деле это вторая строка, т.к. нумерация начинается с нуля
lcd.setCursor(0, 1);
// печатаем вторую строку
lcd.print("мите кнопку 1раз");

{
// инициализируем пин, подключенный к реле, как выход
pinMode(relayPin, OUTPUT);
// инициализируем пин, подключенный к кнопке, как вход
pinMode(buttonPin, INPUT);
}
}

void loop()
{
// счетчик нажатий,
// каждый раз при нажатии к переменной прибавляется + 1, до 5 раз
if (buttonWasUp && !digitalRead(BUTTON_PIN))
{
delay(10);
if (!digitalRead(BUTTON_PIN))
clicks = (clicks + 1) % 3;
}

// если один раз нажали, то выводим первый текст
if (clicks == 1)
{
lcd.setCursor(0, 0);
lcd.print("Наполнение..."); // текст на экране №1
lcd.setCursor(0, 1);
lcd.print("Ожидайте");
}
// если второй раз нажали, следующий текст, и т.д.
if (clicks == 2)
{
lcd.setCursor(0, 1); // текст на экране №2
lcd.print("Приятного мытья!");
}

if (clicks == 3)
{
lcd.setCursor(0, 0);
lcd.print("С легким паром!");
lcd.setCursor(0, 1);
lcd.print("Выньте изрозетки");
}

{
currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW
if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
{
relayOn = !relayOn; // инвертируем значение
}
lastButten = currentButten; // Переприсваеваем прошлое состояние кнопки
digitalWrite (relayPin, relayOn); // Включаем или выключаем реле (смотря что пришло после инверсии)
delay (2); // Ждем 2 милисек.
}
}

//--------------------------------реле-------------------------
const int buttonPin = 2; // номер входа, подключенный к кнопке
const int relayPin = 3; // номер выхода светодиода
/* переменные */
boolean lastButten = LOW; // предыдущее состояние кнопки
boolean currentButten = LOW; // текущее состояние кнопки
boolean relayOn = false; // текущее состояние свтодиода

boolean debvance (boolean last) //убираем дребизг
{
boolean current = digitalRead (buttonPin); // считываем данные с кнопки
if (last != current) // Если текущее состояние отличететься от предыдущего
{
delay (5); // Ждем 5 милисек.
current = digitalRead (buttonPin); // Присваеваем текущее состояние кнопки
return current;
}
}
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
525
86
C++:
#include <LiquidCrystal.h>

// RS, E, DB4, DB5, DB6, DB7
LiquidCrystal lcd(4, 5, 10, 11, 12, 13);

#define BUTTON_PIN 10 // пин кнопки

// тут хранится текущее нажатие (от 0 до 5)
int clicks;
boolean buttonWasUp = true;

void setup()
{
lcd.begin(16, 2);
// initialize the LED pin as an output:
// initialize the pushbutton pin as an input:
pinMode(BUTTON_PIN, INPUT_PULLUP);

// начальное сообщение
lcd.setCursor(0, 0);
lcd.print("Здравствуйте наж"); // текст на экране
// устанавливаем курсор в колонку 0, строку 1. То есть на
// самом деле это вторая строка, т.к. нумерация начинается с нуля
lcd.setCursor(0, 1);
// печатаем вторую строку
lcd.print("мите кнопку 1раз");

{
// инициализируем пин, подключенный к реле, как выход
pinMode(relayPin, OUTPUT);
// инициализируем пин, подключенный к кнопке, как вход
pinMode(buttonPin, INPUT);
}
}

void loop()
{
// счетчик нажатий,
// каждый раз при нажатии к переменной прибавляется + 1, до 5 раз
if (buttonWasUp && !digitalRead(BUTTON_PIN))
{
delay(10);
if (!digitalRead(BUTTON_PIN))
clicks = (clicks + 1) % 3;
}

// если один раз нажали, то выводим первый текст
if (clicks == 1)
{
lcd.setCursor(0, 0);
lcd.print("Наполнение..."); // текст на экране №1
lcd.setCursor(0, 1);
lcd.print("Ожидайте");
}
// если второй раз нажали, следующий текст, и т.д.
if (clicks == 2)
{
lcd.setCursor(0, 1); // текст на экране №2
lcd.print("Приятного мытья!");
}

if (clicks == 3)
{
lcd.setCursor(0, 0);
lcd.print("С легким паром!");
lcd.setCursor(0, 1);
lcd.print("Выньте изрозетки");
}

{
currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW
if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
{
relayOn = !relayOn; // инвертируем значение
}
lastButten = currentButten; // Переприсваеваем прошлое состояние кнопки
digitalWrite (relayPin, relayOn); // Включаем или выключаем реле (смотря что пришло после инверсии)
delay (2); // Ждем 2 милисек.
}
}

//--------------------------------реле-------------------------
const int buttonPin = 2; // номер входа, подключенный к кнопке
const int relayPin = 3; // номер выхода светодиода
/* переменные */
boolean lastButten = LOW; // предыдущее состояние кнопки
boolean currentButten = LOW; // текущее состояние кнопки
boolean relayOn = false; // текущее состояние свтодиода

boolean debvance (boolean last) //убираем дребизг
{
boolean current = digitalRead (buttonPin); // считываем данные с кнопки
if (last != current) // Если текущее состояние отличететься от предыдущего
{
delay (5); // Ждем 5 милисек.
current = digitalRead (buttonPin); // Присваеваем текущее состояние кнопки
return current;
}
}
Для начала хотя бы так. Учитывая, что вам 13 лет и денег на разработчика нет, почитайте немного, что вам посоветовали, а потом уже и проекты будете разрабатывать. Может перед нами будущий программист, дело молодое. Кнопка такая </> называется код.
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,262
1,300
Москва
@bort707, :D
@Grigoriy35342355, Ну тебе компилятор все верно написал. Что бы использовать пин не по номеру, а по имени 1) где то надо это имя описать (посмотри как описан пин кнопки) и 2) указать как этот пин будет использоваться , на ввод или на вывод (посмотри как сделано у пина кнопки)
 
Изменено: