Привествую.
Ардуиной занимался лет 6-7 назад, дальше мигалок и простого управления моторчиками дело не зашло…естественно всё наглухо забыл. Но тут товарищ подкинул задачу, имеется 4 двери, на них 4 геркона(возможно они и не понадобятся) и 4 электрозамка. Есть 4 кнопки. Нужно, чтобы при нажатии кнопки открывался только один замок, а остальные в это время оставались закрытыми(остальные кнопки не должны быть активными). Есть ардуино уно и релейный шилд.
Попытался сам склепать скетч, но наглухо всё забыл. Получается по первой кнопке в скетче всё работает как надо, а при нажатии второй и последующих все предыдущие остаются активными.
Скетч пока подгрузить не смогу - комп на котором его делал на работе.
Вот только выдумывать не надо. Ты не “попытался сам”, а разместил заказ на Гайверфоруме, где уже дня три-четыре ведешь переговоры. Ну так и продолжал бы там же… а строить из себя новичка не надо.
Ну “заказчики”… за 300 руб удавится готовы.
Да на гайверфоруме тоже размещал заказ. Просто на туда написал, нужно в помощь, а я в заказ написал.
так от нас что хочешь? Помощи - выкладывай скетч
Ничего не понял. 4 замка, 4 кнопки, ну и … ардуина-то зачем? Каждая кнопка подаёт 12В (или сколько там замку надо) на свою дверь. Бинго! Нет?
Вечно вы находите оптимальное решение, а ардуину куда приткнуть чтобы бабосиков заработать?
Я так понял, основное - чтобы при срабатывании одного любого канала остальные блокировались.
В условии - невозможность открыть другие двери, пока активен замок на любой из них.
ардуина и шилд мои личные…отдаю бесплатно!!! как раз таки в полном отсутствии бюджета проблема. Есть вариант этой схемы на транзисторе(чтоб герконы не палить ) и рэс 22(позволяют блокировать как раз таки три другие цепи, при работе одной основной) . Но в наличии есть либо ардуина, либо сигнал 20м(этот вариант тоже отпал, тоже нет блокировки, до момента сработки геркона)
Оказываю помощь: излагаю алгоритм работы.
- опрашиваются кнопки,
- если какая-либо нажата, открывается соответствующая дверь и программа останавливается (while(1);).
int regim=1;
int flag=0;
int button1 = 2;
int led1 = 8;
int button2 = 3;
int led2 = 9;
int button3 = 4;
int led3 = 10;
int button4 = 5;
int led4 = 11;
void setup() {
pinMode(led1, OUTPUT);
pinMode(button1, INPUT);
pinMode(led2, OUTPUT);
pinMode(button2, INPUT);
pinMode(led3, OUTPUT);
pinMode(button3, INPUT);
pinMode(led3, OUTPUT);
pinMode(button3, INPUT);
}
void loop(){
if(digitalRead(2)==HIGH&&flag==0)//1 кн
{
regim=1;
flag=1;
if(digitalRead(3)==HIGH&&flag==0)//2кн
{
regim=2;
flag=1;
if(digitalRead(4)==HIGH&&flag==0)//3кн
{
regim=3;
flag=1;
if(digitalRead(5)==HIGH&&flag==0)//4кн
{
regim=4;
flag=1;
}
if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата
//и переменная flag равна - 1 ,то ...
{
flag=0;
}
if(regim==1)//первый режим
{
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
}
if(regim==2)//второй режим
{
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
}
if(regim==3)//третий режим
{
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
}
if(regim==4)
{
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
}
}
``` симулятор ругается, что нет скобки конца кода...сейчас все 4 кнопки и реле(светодиоды пока) прописал
int regim=1;
int flag=0;
int button1 = 2;
int led1 = 8;
int button2 = 3;
int led2 = 9;
int button3 = 4;
int led3 = 10;
int button4 = 5;
int led4 = 11;
void setup() {
pinMode(led1, OUTPUT);
pinMode(button1, INPUT);
pinMode(led2, OUTPUT);
pinMode(button2, INPUT);
pinMode(led3, OUTPUT);
pinMode(button3, INPUT);
pinMode(led3, OUTPUT);
pinMode(button3, INPUT);
}
void loop(){
if(digitalRead(2)==HIGH&&flag==0)//1 кн
{
regim=1;
flag=1;
if(digitalRead(3)==HIGH&&flag==0)//2кн
regim=2;
flag=1;
if(digitalRead(4)==HIGH&&flag==0)//3кн
regim=3;
flag=1;
if(digitalRead(5)==HIGH&&flag==0)//4кн
regim=4;
flag=1;
if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата
//и переменная flag равна - 1 ,то ...
flag=0;
}
if(regim==1)//первый режим
{
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
}
if(regim==2)//второй режим
{
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
}
if(regim==3)//третий режим
{
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
}
if(regim==4)
{
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
}
}
а если вот так закончить скетч?
if (regim == 4)
{
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
}
}
}
}
}
Тема перенесена в песочницу
int regim=1;
int flag=0;
int button1 = 2;
int led1 = 8;
int button2 = 3;
int led2 = 9;
int button3 = 4;
int led3 = 10;
int button4 = 5;
int led4 = 11;
void setup() {
pinMode(led1, OUTPUT);
pinMode(button1, INPUT);
pinMode(led2, OUTPUT);
pinMode(button2, INPUT);
pinMode(led3, OUTPUT);
pinMode(button3, INPUT);
pinMode(led3, OUTPUT);
pinMode(button3, INPUT);
}
void loop(){
if(digitalRead(2)==HIGH&&flag==0)//1 кн
{
regim=1;
flag=1;
if(digitalRead(3)==HIGH&&flag==0)//2кн
regim=2;
flag=1;
if(digitalRead(4)==HIGH&&flag==0)//3кн
regim=3;
flag=1;
if(digitalRead(5)==HIGH&&flag==0)//4кн
regim=4;
flag=1;
if(digitalRead(1)==LOW&&flag==1)
if(digitalRead(2)==LOW&&flag==1)
if(digitalRead(3)==LOW&&flag==1)
if(digitalRead(4)==LOW&&flag==1)//если кнопка НЕ нажата
//и переменная flag равна - 1 ,то ...
flag=0;
}
if(regim==1)//первый режим
{
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
}
if(regim==2)//второй режим
{
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
}
if(regim==3)//третий режим
{
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
}
if(regim==4)
{
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
}
}Код грузится в ардуино...но вообще не работает=(
Скажи честно, зачем ты объявляешь переменные в начале скетча, но потом их нигде не используешь?
И зачем писать значения во входы?
Кроме кнопок нужны еще датчики открытия двери, a то можно будет кнопку отпустить, а дверь оставить приоткрытой
еще бы, бредятина написана
Держите, проверяйте
byte button[] = {2, 3, 4, 5};
byte led[] = {8, 9, 10, 11};
void setup() {
for (byte i = 0; i < 4; i++) {
pinMode(led[i], OUTPUT);
pinMode(button[i], INPUT);
}
}
void loop() {
byte result[4] = {0};
byte summ = 0;
for (byte i = 0; i < 4; i++) {
result[i] = digitalRead(button[i]);
summ += result[i];
}
if (summ == 1) {
for (byte i = 0; i < 4; i++) digitalWrite(led[i], button[i]);
}
else {
for (byte i = 0; i < 4; i++) digitalWrite(led[i], LOW);
}
delay(1000);
}
симулятор выдаёт сработку всех выходов по одной кнопке и отключение по другой