Управление шлагбаумом
- Войдите на сайт для отправки комментариев
Ср, 27/01/2021 - 01:03
Добрый день, взял этот код для своей задачи, задача простая , необходимо открывать шлагбаум по lan сети, есть два andurino uno и ethernet shield , необходимо открывать с проводной кнопки, к сожалению никак не могу понять в чем загвозка, залил эти скетчи в итоге постоянно щелкает реле само по себе , то откроет то закроет, что только не менял ничего не меняется,так же необходимо чтобы реле сработало секунд на 5 и выключилась, помогите пожалуйста, с andurino в первый раз столкнулся.
Андурино с кнопкой
#include <SPI.h> #include <Ethernet.h> #define BUT 2 //пин для кнопки byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress server(192,168,0,10); //IP сервера IPAddress ip(192, 168, 0, 11); //IP этого устройства EthernetClient client; int i=0; uint32_t Time=0; void setup() { pinMode(BUT, INPUT); Serial.begin(9600); Ethernet.begin(mac, ip); delay(1000); Serial.println("connecting..."); if (client.connect(server, 80)) { Serial.println("---------------"); // Создаем HTTP-запрос client.println("GET /utc/now HTTP/1.1"); client.println("Host: <a href="http://192.168.0.10/$1" rel="nofollow">http://192.168.0.10/$1</a>"); client.println("User-Agent: arduino-ethernet"); client.println("Connection: close"); client.println(); } else { // if you didn't get a connection to the server: Serial.println("connection failed"); } Time=millis(); } void loop() { if(!digitalRead(BUT) && millis()-Time>3000) delay(9); if(!digitalRead(BUT) && millis()-Time>3000){ Serial.println("connecting..."); if (client.connect(server, 80)){ Serial.println("---------------"); // Создаем HTTP-запрос client.println("GET /utc/now HTTP/1.1"); if(i){ client.println("Host: <a href="http://192.168.0.10/$1" rel="nofollow">http://192.168.0.10/$1</a>"); i=0; }else{ client.println("Host: <a href="http://192.168.0.10/$2" rel="nofollow">http://192.168.0.10/$2</a>"); i=1; } client.println("User-Agent: arduino-ethernet"); client.println("Connection: close"); client.println(); } else { // if you didn't get a connection to the server: Serial.println("connection failed"); } Time=millis(); } delay(150); if (client.available()) { while(client.available()){ char c = client.read(); Serial.print(c); } } if(millis()-Time<0) //если millis обнулился, то надо обнулить и переменную Time (примерно раз в 50 дней) Time=millis(); // Если соединение прервано, отключаем клиент if (!client.connected()) { // Serial.println(); // Serial.println("---------------"); // Serial.println("disconnecting"); client.stop(); // Останавливаем выполнение программы // while (true); } }
Андурино с реле
#include <SPI.h> #include <Ethernet.h> #define OUT 8 //номер выхода для шлагбаума byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 }; uint16_t k=0; IPAddress ip(192,168,0,10); // IP адрес сервера EthernetServer server(80); void setup() { pinMode(OUT, OUTPUT); //инициализируем 8 пин как выход для шлагбаума digitalWrite(OUT, HIGH); Ethernet.begin(mac, ip); server.begin(); Serial.begin(9600); delay(5); Serial.println("start"); } void loop() { EthernetClient client = server.available(); if(client){ while (client.connected()) { if (client.available()) { char c = client.read(); Serial.print(c); if(c == '$' && k<100){ k=0; c = client.read(); Serial.println(c); if(c == '1'){ Serial.println("ON"); digitalWrite(OUT, HIGH); } if(c == '2'){ Serial.println("OFF"); digitalWrite(OUT, LOW); } client.println("HTTP/1.1 200 OK"); //заголовочная информация client.println("Content-Type: text/html"); client.println("Connection: close"); client.println("Refresh: 30"); //автоматическое обновление каждые 30 сек client.println(); client.println("<!DOCTYPE HTML>"); //HTML тип документа client.println("<html>"); //открытие тега HTML client.print("<title>My web Server</title>"); //название страницы client.print("<H1>My web Server</H1>"); //заголовк на странице client.print("<a href=\"/$1\"><button>Up</button></a>"); //кнопка включить client.print("<a href=\"/$2\"><button>Down</button></a>"); //кнопка выключить client.println("<br />"); client.println("</html>"); //закрываем тег HTML break; //выход }else{ k++; } } } delay(1); client.stop(); } }
Я нихрена не понял.
А можно, то, что у Вас как "ардуино с реле" написать с кнопкой на 10-м пине? А вайфу удалить.
Схему подключения кнопки нарисуйте.
с andurino в первый раз столкнулся.
Начни со светлодиодика.
Здравствуйте, схему прилагаю, как я это вижу , надеюсь не ошибся
https://ibb.co/DYpHjK5
Ошибся. http://arduino.ru/tutorials/button
Здравствуйте, схему прилагаю, как я это вижу , надеюсь не ошибся
https://ibb.co/DYpHjK5
Как я и предполагал
А именно кнопка. Вы её неправильно подключили. Как правильно, изучайте по ссылке, которую Вам дал коллега чуть выше.
я правильно понял, что между контактом gnd и 2 необходимо поставить резисто на 10Ком и замыкать его потом на 5v при нажатии на кнопку ?
На Вашей
наскальной живописисхеме ни хрена не видно, что куда подключено. Правильно-то оно много как. В данном случае разумно кнопку ставить между пином (пусть 2) и Gnd, пин в программе объявить не INPUT, а INPUT_PULLUP. При считывании, если на нём HIGH - значит кнопка отпущена, если LOW - нажата, а резисторов вовсе не нужно.На Вашей
наскальной живописисхеме ни хрена не видно, что куда подключено. Правильно-то оно много как. В данном случае разумно кнопку ставить между пином (пусть 2) и Gnd, пин в программе объявить не INPUT, а INPUT_PULLUP. При считывании, если на нём HIGH - значит кнопка отпущена, если LOW - нажата, а резисторов вовсе не нужно.Простите за схему, дело в том что мне достался эта система по наследству, на объекте , и к сожалению незнаю андурино от слова совсем, а так как там сгорел один контроллер пытаюсь восстановить
там сгорел один контроллер пытаюсь восстановить
Проще тогда сжечь и второй, старым ржавым армейским огнемётом, а потом всё с нуля переделать, забыв про Ардуино.
На Вашей
наскальной живописисхеме ни хрена не видно, что куда подключено. Правильно-то оно много как. В данном случае разумно кнопку ставить между пином (пусть 2) и Gnd, пин в программе объявить не INPUT, а INPUT_PULLUP. При считывании, если на нём HIGH - значит кнопка отпущена, если LOW - нажата, а резисторов вовсе не нужно.Благодарю все получилось, за исключением одного, необходимо чтобы реле срабатывало на 10 секунд, а так получается, что она срабатывает при каждом нажатии на кнопку
там сгорел один контроллер пытаюсь восстановить
Проще тогда сжечь и второй, старым ржавым армейским огнемётом, а потом всё с нуля переделать, забыв про Ардуино.
С удовольствием бы это сделал, но к сожалению это единственное средство, хотел сделать по радио, но из за леса не пробивает ничего (((
необходимо чтобы реле срабатывало на 10 секунд, а так получается, что она срабатывает при каждом нажатии на кнопку
Да вот и думаю , что наверное надо попросить может вас подкорректировать скетч не безвомездно, ну и на том спасибо, что подсказали с кнопкой, буду значит пытаться искать сам выход...
наверное надо попросить может вас подкорректировать скетч не безвомездно
Нет, я не корректирую скетчи небезвозмездно. Запостите в "Ищу исполнителя", там найдётся тот, кто это сделает.