Ви не увійшли.
Друзья, помогите доделать скетч, так как я в программировании "ардуин" чуть менее чем 0, методом тыка пытался поменять под себя скетч из соседних тем, но не получается. Значит есть 2 кнопки без фиксации типа "микрик" и 2 реле, к каждому input кнопки подтянул по резистору 1кОм с плюса, чтобы сделать там высокий уровень по умолчанию, а микриком замыкаю их на Ground, это правильно я сделал? Просто без подтяжки резистором на плюс или минус у входа очень высокая чувствительность и он меняет свое состояние даже при при приближении руки к проводу, с резюками такого уже не происходит.
Итак, хочу возить картошку и цемент на Lamborghini, так как лень паять такой функционал из транзисторов-триггеров.
Суть работы скетча. Дефолтное состояние - relay1, LOW и relay2, LOW. Вариант событий 1 - При замыкании кнопки 1 на минус (Button1 LOW) должно стать relay1, HIGH, при отпускании кнопки так и должно оставаться relay1, HIGH. Вариант событий 2 - При нажатии второй кнопки (Button2 LOW) высокие уровни должны становиться на обеих выходах (relay1, HIGH и relay2, HIGH), а при отпускании этой кнопки (возвращение её на высокий уровень) реле должны вернуться в дефолтное состояние, то есть relay1, LOW и relay2, LOW. Вот и всё. Вот мой скетч, но подозреваю, что он полностью неправильный
int button1 = 10; // кнопка1
int button2 = 11; // кнопка2
int relay1 = 12; // реле1
int relay2 = 13; // реле2
int state;
void setup() {
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
state = 0;
}
void loop()
{
switch ( state )
{
default:
case 0:
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
state = 1;
break;
case 1:
if (digitalRead(button1) == LOW)
{
digitalWrite(relay1, HIGH);
state = 2;
}
break;
case 2:
if (digitalRead(button2) == LOW)
{
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
state = 0;
}
break;
}
}
Остання редакція martinways (2020-09-25 11:19:39)
Неактивний
Резисторы поставить 10 кОм или можно использовать внутреннюю подтяжку. Для этого просто заменить INPUT на INPUT_PULLUP. По поводу кода - зачем там switch-case? ИМХО достаточно простого if-else.
Резисторы поставить 10 кОм или можно использовать внутреннюю подтяжку. Для этого просто заменить INPUT на INPUT_PULLUP. По поводу кода - зачем там switch-case? ИМХО достаточно простого if-else.
Дружище, а можете помочь переписать код? Если нужна оплата напишите сколько, я просто вообще не в курсе принципов и синтаксиса, буду тыкать наугад целую вечность. Надо еще защиту от дребезга встроить.
Остання редакція martinways (2020-09-25 14:34:36)
Неактивний
#define button1 10 // кнопка1
#define button2 11 // кнопка2
#define relay1 12 // реле1
#define relay2 13 // реле2
int state;
void setup() {
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
state = 0;
}
void loop() {
switch (state) {
case 0:
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
if (digitalRead(button1) == LOW) {
state = 1;
break;
}
if (digitalRead(button2) == LOW) {
state = 2;
break;
}
break;
case 1:
digitalWrite(relay1, HIGH);
digitalWrite(relay2, LOW);
if (digitalRead(button2) == LOW) {
state = 2;
break;
}
break;
case 2:
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
if (digitalRead(button2) == HIGH) {
state = 0;
break;
}
break;
}
}
Внешние резисторы подтяжки не нужны - использованы встроенные.
Защита от дребезга - конденсатор от 100нФ между входом и землей.
В привате отвечу, куда слать шоколадку)
Остання редакція Honey (2020-09-26 12:50:05)
Неактивний
Налетели пчелы на мед. Уже никто никаких шоколадок не получит. ТС-у на смежном форуме еще вчера все расписали.