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

UW5EGA пише:
ard125 пише:

пробуйте так

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

У меня нет пока eternet-модуля, поэтому проверить полностью код не могу, возможно где-то есть ошибка. Но от обычной кнопки в простеньком коде у меня все работает.

unsigned long previousMillis = 0;
unsigned long currentMillis;
boolean flag1, flag2, flag3, flag4, flag5;

bool flag_btn1, flag_btn2 = false;

bool state = false;
bool ledstate;
unsigned long t1 = 8000;
unsigned long t2 = 5000;
unsigned long t3 = 10000;
unsigned long t4 = 18000;

void setup() {
  pinMode(5, INPUT_PULLUP);
  pinMode(8, OUTPUT);
  digitalWrite(8, HIGH);
  Serial.begin(9600);
}


void blinker() {
   
  ledstate = digitalRead(8);

  if (!flag1 && (millis() - previousMillis >= t1)) {
    digitalWrite(8, !ledstate);
    flag1 = 1;
    flag2 = 0;
    previousMillis = millis();
  }

  if (!flag2 && (millis() - previousMillis >= t2)) {
    digitalWrite(8, !ledstate);
    flag2 = 1;
    flag3 = 0;
    previousMillis = millis();
  }

  if (!flag3 && (millis() - previousMillis >= t1)) {
    digitalWrite(8, !ledstate);
    flag3 = 1;
    flag4 = 0;
    previousMillis = millis();
  }

  if (!flag4 && (millis() - previousMillis >= t3)) {
    digitalWrite(8, !ledstate);
    flag4 = 1;
    flag5 = 0;
    previousMillis = millis();
  }

  if (!flag5 && (millis() - previousMillis >= t4)) {
    digitalWrite(8, !ledstate);
    flag5 = 1; state = false;
    previousMillis = millis(); Serial.println("Stop ");
  }
}


void loop() {

  if (digitalRead(5) == LOW && !flag_btn1) {
    Serial.println("Start "); 
    state = true;
    flag_btn1 = 1;
    flag1 = 0; previousMillis = millis();digitalWrite(8, LOW);
    }

  if (state == true) {
       blinker();
  }

   if (digitalRead(5) && flag_btn1) flag_btn1 = 0;

  if (!state) {
    flag1 = 1;
    flag2 = 1;
    flag3 = 1;
    flag4 = 1;
    flag5 = 1;
  }
}

кнопка подключена к 5 пину. Замыкается на землю.

#52 Re: Програмування Arduino » Потрібна допомога » 2020-11-04 01:46:30

пробуйте так

#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);

unsigned long previousMillis = 0;
unsigned long currentMillis;
boolean flag1, flag2, flag3, flag4, flag5;
bool state = false;
bool ledstate;
unsigned long t1 = 8000;
unsigned long t2 = 5000;
unsigned long t3 = 10000;
unsigned long t4 = 18000;

void setup()
{
  pinMode(8, OUTPUT);
  digitalWrite(8, HIGH);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
}

void blinker() {
  ledstate=digitalRead(8);
  if (!flag1 && (millis() - previousMillis >= t1)) {
    digitalWrite(8, !ledstate);
    flag1 = 1;
    flag2 = 0;
    previousMillis = millis();
  }

  if (!flag2 && (millis() - previousMillis >= t2)) {
    digitalWrite(8, !ledstate);
    flag2 = 1;
    flag3 = 0;
    previousMillis = millis();
  }

  if (!flag3 && (millis() - previousMillis >= t1)) {
    digitalWrite(8, !ledstate);
    flag3 = 1;
    flag4 = 0;
    previousMillis = millis();
  }

  if (!flag4 && (millis() - previousMillis >= t3)) {
    digitalWrite(8, !ledstate);
    flag4 = 1;
    flag5 = 0;
    previousMillis = millis();
  }

  if (!flag5 && (millis() - previousMillis >= t4)) {
    digitalWrite(8, !ledstate);
    flag5 = 1;
    previousMillis = millis();
  }
}


void loop()
{
  state = digitalRead(8);
  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') {
            state = true;
            flag1 = 0;
            digitalWrite(8, LOW);
            previousMillis = millis();
            Serial.println("ON");
            }

          if (c == '2') {
            Serial.println("OFF");
            digitalWrite(8, HIGH);
            state = false;
          }
        }
        
if (state == true) {
       blinker();
  }

if (!state) {
    flag1 = 1;
    flag2 = 1;
    flag3 = 1;
    flag4 = 1;
    flag5 = 1;
  }  

        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();
  }
}

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

UW5EGA пише:

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

if((flag==1)&&(millis-prevmillis>=period) {дальше по тексту}

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

Если в общих чертах ,то вводите дополнительную переменную (флаг), устанавливаете ее в какое-то значение и дальше:
если (флаг разрешен) то if currentmillis-prevmillis>=interval выполняете то что вам нужно

#55 Re: Програмування Arduino » Потрібна допомога » 2020-10-30 11:43:42

ну так применяете 5 раз (или сколько у вас там интервалов) BlinkWithoutDelay плюс флаги отработки каждого интервала.

#56 Re: Програмування Arduino » Потрібна допомога » 2020-10-29 18:31:33

Ваш blinker() должен отрабатывать интервалы циклично или однократно?

#58 Re: Програмування Arduino » Проблемы с компилятором wavgat pro mini и BMP280 » 2020-07-15 22:29:11

Ну а теперь посмотрите на текст ошибки и подумайте чего еще не хватает

#59 Re: Програмування Arduino » Проблемы с компилятором wavgat pro mini и BMP280 » 2020-07-15 21:56:10

Carabas212 пише:

Библиотека стоит. ставил через саму ардуину(имею в виду через управление библиотеками)

Какую именно ставили?

#60 Re: Програмування Arduino » Проблемы с компилятором wavgat pro mini и BMP280 » 2020-07-15 21:38:51

Carabas212 пише:

программа взята с сайта для проверки датчика BMP280.

А библиотеку установили?

error: Adafruit_Sensor.h: No such file or directory

кагбэ намек

#61 Re: Проекти » Пишу простые скетчи на заказ по приемлемой цене » 2020-06-15 20:18:22

Oleg85 пише:

Нужен скетч, кто возьмётся плочу 50евро

Такой подойдет ?

void setup() {
 
}

void loop() {
 
}

Если да - так и быть, отдам за 49 евро

#62 Re: Апаратні питання » Плата MP3 плеер с SDкартой и вывод внешних кнопок » 2020-06-08 14:04:28

Тут уже надо брать ослика и смотреть что происходит на входе АЦП в момент переключений

#63 Re: Апаратні питання » Плата MP3 плеер с SDкартой и вывод внешних кнопок » 2020-06-08 11:19:11

Александр1974 пише:

Парадокс в том, что если отпаять внешние кнопки от имеющихся, то самостоятельная жизнь продолжается.

т.е. на плате остаются только заводские кнопки? Может они слишком нежные и при пайке повреждаются?

#64 Re: Апаратні питання » Плата MP3 плеер с SDкартой и вывод внешних кнопок » 2020-06-07 23:45:08

Александр1974 пише:

... внешние кнопки ...

А что за кнопки? Может у кнопок утечка? Попробуйте оставить припаянными только провода без кнопок и посмотрите что будет происходить

#65 Re: Програмування Arduino » ТОВАРИЩИ ПОМОГИТЕ написать скетч по управлению тремя реле » 2020-05-26 12:34:10

Jack пише:

Вот именно эти моменты и напрягают. Нет желания давать ТЗ человеку, который потом будет кишки мотать, а так-же платить за "воздух" желания особого нет.
Ну да ладно, что нибудь да придумаем. smile

А что тут думать. В таких случаях озвучивайте сколько вы сами согласны потратить. А там уже с тем кто согласится на эту сумму обсудите все тонкости как задания так и цены.

#66 Re: Програмування Arduino » Your Dht11 went oflfine » 2020-04-28 22:52:15

Вариантов два
1)как уже неоднократно говорилось - написать нормальный код без delay
2)в Blynk-е тупо отключить оповещения, ну и заодно разобраться почему в программе используется датчик ds18b20, а Blynk матерится на dht11

#68 Re: Програмування Arduino » прошу помощи » 2020-04-19 20:50:21

Чем дальше в лес, тем толще партизаны? Ну хоть немного сами то уже поднапрягитесь ...

#69 Re: Програмування Arduino » прошу помощи » 2020-04-17 15:02:27

Пробуйте

int flag=0;
...
setup() {
...
}

...

loop(){
...
if (digitalRead (btauto) == HIGH && flag == 0) {flag=1; setauto = !setauto;}

if (digitalRead (btauto) == LOW && flag==1) {flag=0; }
...
}

#70 Re: Програмування Arduino » прошу помощи » 2020-04-09 21:44:52

renoshnik пише:

Для другой платы (у меня "ПроМини") нужны изменения как в моем варианте.

Не знаю как там будет работать (код просмотрел по диагонали), но для ПроМини и Леонардо тоже компилируется без каких либо изменений меня компилится тоже нормально.

+380505304388 пише:

и еще некоторые удаления

Показывайте что вы там наудаляли

#71 Re: Програмування Arduino » прошу помощи » 2020-04-09 21:36:33

не знаю что вы там делали, но у меня нормально компилируется после замены на <=

// Антенный переключатель 1х8 v.1.01
// © Игорь Уватенков (R9JD)
// Скетч написан под Arduino Pro Micro
// Возможно использование на других версиий МК с назначением соответствующих портов входа/выхода

int ant1 = A3; //Порты выходов переключаемых антенн
int ant2 = A2;
int ant3 = A1;
int ant4 = A0;
int ant5 = 15;
int ant6 = 14;
int ant7 = 16;
int ant8 = 10;

int dataD = 2; //Порты BAND DATA
int dataC = 3;
int dataB = 4;
int dataA = 5;

int btn = 9; //Порт кнопок
int btauto = 7; //Порт установки режимов Авто/Ручной
int dataIcom = 8; //Порт чтения диапазонного напряжения ICOM
int ledauto = 6; //Порт индикации
boolean setauto = true; //Режим авто
int NumButton = 1; //Номер нажатой кнопки
int Trcvr = 1; //Применяемое оборудование (1-Yaesu, 0-Icom)
int Band; // диапазон

union InBandData {
struct {
unsigned dt0: 1;
unsigned dt1: 1;
unsigned dt2: 1;
unsigned dt3: 1;
} bits ;
uint8_t value;
};
InBandData BD; // Переменная для хранения состояния кода диапазона

void setup () {
// Назначаем порты на вход
pinMode (dataA,INPUT);
pinMode (dataB,INPUT);
pinMode (dataC,INPUT);
pinMode (dataD,INPUT);
pinMode (btauto,INPUT);
// Назначаем порты на выход
pinMode (ant1,OUTPUT);
pinMode (ant2,OUTPUT);
pinMode (ant3,OUTPUT);
pinMode (ant4,OUTPUT);
pinMode (ant5,OUTPUT);
pinMode (ant6,OUTPUT);
pinMode (ant7,OUTPUT);
pinMode (ant8,OUTPUT);
pinMode (ledauto,OUTPUT);
}

void SetButton () //Определяем номер нажатой кнопки
{
if (analogRead (btn) >= 900 && analogRead (btn) <= 910) {NumButton = 1;}
if (analogRead (btn) >= 877 && analogRead (btn) <= 887) {NumButton = 2;}
if (analogRead (btn) >= 853 && analogRead (btn) <= 863) {NumButton = 3;}
if (analogRead (btn) >= 816 && analogRead (btn) <= 826) {NumButton = 4;}
if (analogRead (btn) >= 761 && analogRead (btn) <= 771) {NumButton = 5;}
if (analogRead (btn) >= 670 && analogRead (btn) <= 680) {NumButton = 6;}
if (analogRead (btn) >= 490 && analogRead (btn) <= 500) {NumButton = 7;}
if (analogRead (btn) <= 20) {NumButton = 8;}
}

void SetAntenna (int val)
{
switch (val) { //Выбираем порты которые нужно установить в зависимости от нажатой кнопки
case 1: {digitalWrite (ant1, HIGH); //Устанавливаем «1» выход антенны 1, остальные сбрасываем в «0»
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 2: {digitalWrite (ant2, HIGH); //Устанавливаем «1» выход антенны 2, остальные сбрасываем в «0»
digitalWrite (ant1, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 3: {digitalWrite (ant3, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 4: {digitalWrite (ant4, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 5: {digitalWrite (ant5, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 6: {digitalWrite (ant6, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 7: {digitalWrite (ant7, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant8, LOW);
break;
}
case 8: {digitalWrite (ant8, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant1, LOW);
break;
}
}
}

uint8_t BinBandData () //Считываем двоичный код Band Data Yaesu
{
BD.value = 0;
if (digitalRead (dataA) == HIGH) {BD.bits.dt0=1;} else {BD.bits.dt0=0;};
if (digitalRead (dataB) == HIGH) {BD.bits.dt1=1;} else {BD.bits.dt1=0;};
if (digitalRead (dataC) == HIGH) {BD.bits.dt2=1;} else {BD.bits.dt2=0;};
if (digitalRead (dataD) == HIGH) {BD.bits.dt3=1;} else {BD.bits.dt3=0;};
switch (BD.value){
case 1: Band = 160; break;
case 2: Band = 80; break;
case 3: Band = 40; break;
case 4: Band = 30; break;
case 5: Band = 20; break;
case 6: Band = 17; break;
case 7: Band = 15; break;
case 8: Band = 12; break;
case 9: Band = 10; break;
case 10: Band = 6; break;
}
}

void BandIcom () //Считываем уровень диапазонного напряжения Icom
{
if (analogRead (dataIcom) >= 910 && analogRead (dataIcom) <= 1023) {Band = 160;}
if (analogRead (dataIcom) >= 783 && analogRead (dataIcom) <= 837) {Band = 80;}
if (analogRead (dataIcom) >= 635 && analogRead (dataIcom) <= 711) {Band = 40;}
if (analogRead (dataIcom) >= 511 && analogRead (dataIcom) <= 574) {Band = 20;}
if (analogRead (dataIcom) >= 369 && analogRead (dataIcom) <= 437) {Band = 15;}
if (analogRead (dataIcom) >= 228 && analogRead (dataIcom) <= 294) {Band = 10;}
if (analogRead (dataIcom) >= 0 && analogRead (dataIcom) <= 127) {Band = 30;}
}

void loop ()
{

if (digitalRead (btauto) == HIGH && setauto == false) {setauto = true;}

if (digitalRead (btauto) == HIGH && setauto == true) {setauto = false;}

if (setauto == false) //Если ручной режим
{
digitalWrite (ledauto, LOW); //Тушим светодиод режима Авто
SetButton (); //Получаем номер кнопки
}
else //Если авторежим включаем каналы
{
digitalWrite (ledauto, HIGH); //Включаем светодиод режима Авто
if (Trcvr == 1){BinBandData ();} //Декодируем диапазон
else{BandIcom ();}
//Ниже, в блоке условий, нужно указать какая антенна будет включена в авторежиме,
//в зависимости от декодированного диапазона присвоить, NumButton номер нажатой кнопки.
//По номеру кнопки программа включит нужный канал,
//номер кнопки соответствует номеру канала (антенны)
if (Band == 160) {NumButton = 1;} //КВ диапазоны
if (Band == 80) {NumButton = 2;}
if (Band == 40) {NumButton = 3;}
if (Band == 20) {NumButton = 4;}
if (Band == 15) {NumButton = 5;}
if (Band == 10) {NumButton = 6;}
if (Band == 30) {NumButton = 7;} //WARC диапазоны
if (Band == 12) {NumButton = 8;}
//if (Band == 17) {NumButton = 7;}
//if (Band == 6) {NumButton = 8;}
}
SetAntenna (NumButton);

delay  (300); //Мониторим три раза в секунду, можете поставить свое время (в милисекундах)
}

#72 Re: Програмування Arduino » прошу помощи » 2020-04-09 20:56:48

+380505304388 пише:

заменил на <=   теперь в другом месте ошибка:

Скопируйте и выложите сюда исправленный код так как вам указали выше.

#74 Re: Програмування Arduino » Помогите новичку с кодом » 2020-04-05 11:20:16

Alex45 пише:

В основном он и работает но иногда не срабатывает.

Ну выкладывайте схему и код пастуха и для sim-модуля что там увас есть. А вообще лучше создайте свою отдельную тему.
И, да, согласен с Watchdog - зачем там ардуина?

#75 Re: Програмування Arduino » Помогите новичку с кодом » 2020-04-04 22:15:40

Alex45 пише:

сделать перезагрузку пастуха по смс.

А сторожевой пес на "пастухе" не помогает?

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