Ви не увійшли.
Сторінки 1
Давайте я вам бесплатно отправлю ethernet shield для опытов?
Очень странно стало вести себя, после включения первая задержка где-то 3 минуты, потом 10 секунд пауза и снова включилось на долго но я уже не стал засекать время.
Проверил. Да действительно работает.
Судя по всему, когда выполняется delay(), весь остальной код просто останавливается и ждет возврата из функции, которая вызвала delay(). Чтобы blinker() работал, как ожидается, вся программа должна быть переписана в виде обработчиков асинхронных прерываний, тогда delay() может быть прерван в любой момент.
Вместо этого предлагается управлять светодиодом, синхронизировав его с часами, которые идут независимо от delay(). Таким образом каждый раз loop() будет иметь возможность оценить значение таймера и принять решение, как переключить светодиод. Например, если таймер меньше значения X, то светодиод зажечь. Если больше - погасить. Подробнее:
https://www.arduino.cc/en/Tutorial/Buil … thoutDelay
Для воспроизведения более сложной последовательности можно запомнить время начала этой последовательности, а затем зажигать или гасить светодиод по прошествии определенного времени относительно начала. При этом сам код переключения светодиода должен выполняться при каждом цикле loop():
Извините, никогда не писал для Ардуино, но идею, надеюсь, передать удалось.
Я много чего понимаю, но написать сом не в состоянии.
пробуйте так
С ума сойти, вы проделали такую титаническую работу. Но к сожалению задержки не работают, реле включается и выключается без задержек.
UW5EGA пише:Все равно не понимаю как это все написать. Нужен букварь.
Странно, сервер подняли, кнопочки к нему прикрутили, а элементарные if-ы написать не можете?
Так это украдено на просторах интернета из разных статей.
delay(180000) большая пауза, смотрите, пример BlinkWithoutDelay
Смотрел. В самом начале на него ссылка есть.
Все равно не понимаю как это все написать. Нужен букварь.
А вы можете показать хотя бы на небольшом примере?
Однократно. После окончания последовательности должен остановится и повторно запущен только по кнопке "on".
Єдина проблема стоїть у неможливості виконання аварийного зупинення, поки не відпрацюють всі затримки. Навіщо там кнопка "OFF" якщо вона все одно не працює? А мені потрібно щоб функціонувало.
Добрий день. Малу по малу вивчаю ардуіно і зіткнувся з проблемою. Ось так зараз виглядає мій код, оснований на схрещенні прикладів з мережі. Все працює начебто, але при виконанні затримок втрачається зв'язок з контролером через Delay. Тобто неможливо зупинити виконання циклу кнопкою на вебсторінці. Мені порадили приклад за посиланням, але я не можу його адаптувати під себе, не вистачає кеби зібрати все до купи.
http://arduino.ru/tutorials/BlinkWithoutDelay
#include <SPI.h>
#include <Ethernet.h>
boolean newInfo = 0;
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
IPAddress ip(192,168,4,70);
byte gateway[] = { 192, 168, 4, 1 };
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(80);
void setup()
{
pinMode(8, OUTPUT);
digitalWrite(8,HIGH);
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
}
void blinker()
{
digitalWrite(8, LOW);
delay(8000);
digitalWrite(8, HIGH);
delay(5000);
digitalWrite(8, LOW);
delay(8000);
digitalWrite(8, HIGH);
delay(10000);
digitalWrite(8, LOW);
delay(180000);
digitalWrite(8, HIGH);
}
void loop()
{
EthernetClient client = server.available();
if(client){
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if(newInfo && c == ' '){
newInfo = 0;
}
if(c == '$'){
newInfo = 1;
}
if(newInfo == 1){
Serial.println(c);
if(c == '1'){
Serial.println("ON");
digitalWrite(8, LOW);
blinker();
}
if(c == '2'){
Serial.println("OFF");
digitalWrite(8, HIGH);
}
}
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 30");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("<title>Alarm</title>");
client.print("<H1>Block 1</H1>");
client.print("<a href=\"/$1\"><button>On</button></a>");
client.print("<a href=\"/$2\"><button>Off</button></a>");
client.println("<br />");
client.println("</html>");
break;
}
}
}
delay(1);
client.stop();
}
}
Сторінки 1