#1 Re: Програмування Arduino » Потрібна допомога » 2020-11-10 12:54:16

Давайте я вам бесплатно отправлю ethernet shield для опытов?
Очень странно стало вести себя, после включения первая задержка где-то 3 минуты, потом 10 секунд пауза и снова включилось на долго но я уже не стал засекать время.

#3 Re: Програмування Arduino » Потрібна допомога » 2020-11-10 10:46:39

Mishka пише:

Судя по всему, когда выполняется delay(), весь остальной код просто останавливается и ждет возврата из функции, которая вызвала delay(). Чтобы blinker() работал, как ожидается, вся программа должна быть переписана в виде обработчиков асинхронных прерываний, тогда delay() может быть прерван в любой момент.

Вместо этого предлагается управлять светодиодом, синхронизировав его с часами, которые идут независимо от delay(). Таким образом каждый раз loop() будет иметь возможность оценить значение таймера и принять решение, как переключить светодиод. Например, если таймер меньше значения X, то светодиод зажечь. Если больше - погасить. Подробнее:

https://www.arduino.cc/en/Tutorial/Buil … thoutDelay

Для воспроизведения более сложной последовательности можно запомнить время начала этой последовательности, а затем зажигать или гасить светодиод по прошествии определенного времени относительно начала. При этом сам код переключения светодиода должен выполняться при каждом цикле loop():
Извините, никогда не писал для Ардуино, но идею, надеюсь, передать удалось.

Я много чего понимаю, но написать сом не в состоянии.

#4 Re: Програмування Arduino » Потрібна допомога » 2020-11-10 10:45:25

ard125 пише:

пробуйте так

С ума сойти, вы проделали такую титаническую работу. Но к сожалению задержки не работают, реле включается и выключается без задержек.

#5 Re: Програмування Arduino » Потрібна допомога » 2020-11-02 11:30:23

г0сть пише:
UW5EGA пише:

Все равно не понимаю как это все написать. Нужен букварь.

Странно, сервер подняли, кнопочки к нему прикрутили, а элементарные if-ы написать не можете?

Так это украдено на просторах интернета из разных статей.

#6 Re: Програмування Arduino » Потрібна допомога » 2020-11-02 11:28:57

Iris пише:

delay(180000) большая пауза, смотрите, пример BlinkWithoutDelay

Смотрел. В самом начале на него ссылка есть.

#7 Re: Програмування Arduino » Потрібна допомога » 2020-10-30 17:51:26

Все равно не понимаю как это все написать. Нужен букварь.

#8 Re: Програмування Arduino » Потрібна допомога » 2020-10-30 14:05:14

А вы можете показать хотя бы на небольшом примере?

#9 Re: Програмування Arduino » Потрібна допомога » 2020-10-30 10:54:32

Однократно. После окончания последовательности должен остановится и повторно запущен только по кнопке "on".

#10 Re: Програмування Arduino » Потрібна допомога » 2020-10-29 15:23:11

Єдина проблема стоїть у неможливості виконання аварийного зупинення, поки не відпрацюють всі затримки. Навіщо там кнопка "OFF" якщо вона все одно не працює? А мені потрібно щоб функціонувало.

#11 Програмування Arduino » Потрібна допомога » 2020-10-29 10:19:29

UW5EGA
відповідей: 21

Добрий день. Малу по малу вивчаю ардуіно і зіткнувся з проблемою. Ось так зараз виглядає мій код, оснований на схрещенні прикладів з мережі. Все працює начебто, але при виконанні затримок втрачається зв'язок з контролером через 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();
}
}

Підвал форуму