Управление шлагбаумом
- Войдите на сайт для отправки комментариев
Ср, 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 секунд, а так получается, что она срабатывает при каждом нажатии на кнопку
Да вот и думаю , что наверное надо попросить может вас подкорректировать скетч не безвомездно, ну и на том спасибо, что подсказали с кнопкой, буду значит пытаться искать сам выход...
наверное надо попросить может вас подкорректировать скетч не безвомездно
Нет, я не корректирую скетчи небезвозмездно. Запостите в "Ищу исполнителя", там найдётся тот, кто это сделает.