#1 2020-04-03 18:18:22

dober
Участник
Зарегистрирован: 2020-04-03
Сообщений: 2

Помогите новичку с кодом

Приветствую!
Прошу сильно не пинать, я совсем новичок, неделю как сел за ардуино.  Пытаюсь запрограммировать ардуино как контроллер для протечки, при этом чтобы он был совмещен с Home assistant. Столкнулся с одной вещью. которая просто мне взрывает мозг.
Есть часть кода (функция). По идее условия для выполнения kom == 1 или kom == 2 не выполняются, но при этом события внутри условия происходят. И на мониторе порта вижу сообщения

komanda otkrit
0
komanda zakrit
0

Если kom=0 внутри условия, что подтверждается монитором порта.? почему выполняется событие внутри блока if??

void otkrit_komanda() {

  if (kom == 1); {
    digitalWrite(4, 0);
    delay(3000);
    digitalWrite(4, 1);

    Serial.println("komanda otkrit");
    Serial.println(kom);
  }
  if (kom == 2); {
    digitalWrite(5, 0);
    delay(3000);
    digitalWrite(5, 1);

    Serial.println("komanda zakrit");
    Serial.println(kom);
  }
  if (voda == 0) {
    kom = 0;
  }
}

#2 2020-04-03 18:31:25

Kino
Участник
Зарегистрирован: 2019-02-28
Сообщений: 38

Re: Помогите новичку с кодом

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

#3 2020-04-03 18:33:11

г0сть
Гость

Re: Помогите новичку с кодом

; убери

#4 2020-04-03 18:38:03

dober
Участник
Зарегистрирован: 2020-04-03
Сообщений: 2

Re: Помогите новичку с кодом

yikes так и знал. что какая-то тупость. Глаз к коду не привык, не вижу очевидных вещей.
Благодарю!!!!

#5 2020-04-04 22:03:39

Alex45
Участник
Зарегистрирован: 2020-03-30
Сообщений: 6

Re: Помогите новичку с кодом

Помогите с написанием кода для сим модуля. Собрал электро пастуха на ардуино но он иногда зависает хочу поставить ещё одно ардуино с сим модулем чтобы он мог мне сообщить о зависания и я мог бы сделать перезагрузку пастуха по смс.

#6 2020-04-04 22:15:40

ard125
Участник
Зарегистрирован: 2019-01-30
Сообщений: 63

Re: Помогите новичку с кодом

Alex45 пишет:

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

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

#7 2020-04-05 00:46:21

Alex45
Участник
Зарегистрирован: 2020-03-30
Сообщений: 6

Re: Помогите новичку с кодом

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

#8 2020-04-05 07:36:26

Watchdog
Гость

Re: Помогите новичку с кодом

Alex45 пишет:

Помогите с написанием кода для сим модуля. Собрал электро пастуха на ардуино но он иногда зависает хочу поставить ещё одно ардуино с сим модулем чтобы он мог мне сообщить о зависания и я мог бы сделать перезагрузку пастуха по смс.

Это такая проволока котрая животных током бъёт? А зачем там Ардуино?

#9 2020-04-05 11:20:16

ard125
Участник
Зарегистрирован: 2019-01-30
Сообщений: 63

Re: Помогите новичку с кодом

Alex45 пишет:

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

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

Редактировался ard125 (2020-04-05 11:21:21)

#10 2020-04-07 22:04:12

Alex45
Участник
Зарегистрирован: 2020-03-30
Сообщений: 6

Re: Помогите новичку с кодом

01
//     Electric fency. Umka 2016
02
//     <a href="http://u-m.biz" title="http://u-m.biz" rel="nofollow">http://u-m.biz</a>
03

04

05
#include <avr/wdt.h>
06
#define outPin 3                          // выход на коммутатор
07
#define pausePin A1                       // пин резистора регулировки паузы
08
#define counterPin A3                     // пин резистора регулировки пакета искр
09
volatile unsigned long waitAlarm = 30000; // таймер аварии по высокому напряжению
10
unsigned long now;
11

12
void setup() {
13
  //Serial.begin(9600);
14
  pinMode(outPin, OUTPUT);                // назначаем пин выхода выходом smile
15
  pinMode(2, INPUT_PULLUP);
16
  pinMode(13, OUTPUT);
17
  wdt_enable (WDTO_8S);                   // заводим сторожевой таймер на 8 сек.
18
  attachInterrupt(0, resetAlarm, FALLING);// цепляем прерывание для сброса аварии по искре
19
}
20

21
void loop() {
22
  int pause = analogRead(pausePin) * 3;   // задаем резистором паузу 0 - 3 сек.
23
  int counter = analogRead(counterPin);
24
  counter = map(counter, 0, 1024, 1, 30); // задаем количество искр в каждом пакете
25
  now = millis();
26
  if (now < waitAlarm && millis() % pause < 2) {
27
    for (int count = 0 ; count < counter ; count++){ // в цикле повторяем для каждой искры
28
      digitalWrite(outPin, HIGH);         // циклично дрыгаем ногами выхода и светодиода на 13 пине.
29
      digitalWrite(13, HIGH);
30
      delay(5);
31
      digitalWrite(outPin, LOW);
32
      digitalWrite(13, LOW);
33
      delay(5);
34
      //Serial.print(now);
35
      //Serial.print("  ");
36
      //Serial.println(waitAlarm);
37
    }
38
  }
39
  else if (now > waitAlarm && millis() % 10000 < 2) {
40
    analogWrite(13, 120);                // при утечке искры зажигаем светодиод и
41
    digitalWrite(outPin, HIGH);          // раз в 10 секунд выдаем проверочную искру.
42
    delay(5);
43
    digitalWrite(outPin, LOW);
44
    //Serial.println("alarm");
45
  }
46
  wdt_reset();                           // сбрасываем сторожевой таймер.
47
}
48

49
void resetAlarm() {                      // сбрасываем аварийный счетчик по датчику искры
50
  waitAlarm = now + 30000;
51
  delay(5);
52
}

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела