Не работает код поогите пожалуйста (автополив).

vo0ov
vo0ov аватар
Offline
Зарегистрирован: 04.01.2021

ругается

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а код где?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Ведь просили не пихать ошибки картинкой? на оранжевом фоне справа есть надпись "Копировать..." Значит сможешь скопировать текстом? Ты нарочно тупишь, или в честь Рождества принял уже горячительного?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Походу парень реально зафлудить форум решил ))

vo0ov
vo0ov аватар
Offline
Зарегистрирован: 04.01.2021

ua6em пишет:

а код где?



#define PERIOD 3   // период работы в секундах (пример: 60*60*24*3 = 259200 - три дня!)
#define WORK 30         // время работы в секундах
#define MOS 6           // пин мосфета

uint32_t mainTimer, myTimer;
boolean state = false;

#include <avr/wdt.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#define adc_disable() (ADCSRA &= ~(1<<ADEN)) // disable ADC (before power-off)
#define adc_enable()  (ADCSRA |=  (1<<ADEN)) // re-enable ADC


void setup() {
  // все пины как входы, экономия энергии
  for (byte i = 0; i < 6; i++) {
    pinMode(i, INPUT);
  }
  adc_disable();          // отключить АЦП (экономия энергии)

  wdt_reset();            // инициализация ватчдога
  wdt_enable(WDTO_1S);    // разрешаем ватчдог
  // 15MS, 30MS, 60MS, 120MS, 250MS, 500MS, 1S, 2S, 4S, 8S

  WDTCR |= _BV(WDIE);     // разрешаем прерывания по ватчдогу. Иначе будет резет. СТРОЧКА ПОДЧЁКИВАЕТСЯ

  sei();                  // разрешаем прерывания
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // максимальный сон
}

void loop() {
  mainTimer++;

  if (!state) {                           // если помпа не включена
    if ((long)mainTimer - myTimer > PERIOD) {   // таймер периода
      myTimer = mainTimer;                // сброс таймера
      state = true;                       // флаг на запуск
      pinMode(MOS, OUTPUT);               // пин как выход
      digitalWrite(MOS, HIGH);            // врубить
    }
  } else {                                // если помпа включена
    if ((long)mainTimer - myTimer > WORK) {     // таймер времени работы
      myTimer = mainTimer;                // сброс
      state = false;                      // флаг на выкл
      digitalWrite(MOS, LOW);             // вырубить
      pinMode(MOS, INPUT);                // пин как вход (экономия энергии)
    }
  }

  sleep_enable();   // разрешаем сон
  sleep_cpu();      // спать!
}

ISR (WDT_vect) {
  WDTCR |= _BV(WDIE); // разрешаем прерывания по ватчдогу. Иначе будет реcет. СТРОЧКА ПОДЧЁКИВАЕТСЯ
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Код для Attiny85 а Вы для какой платы его компилируете?

vo0ov
vo0ov аватар
Offline
Зарегистрирован: 04.01.2021

ua6em пишет:

Код для Attiny85 а Вы для какой платы его компилируете?

UNO

vo0ov
vo0ov аватар
Offline
Зарегистрирован: 04.01.2021

v258 пишет:

Походу парень реально зафлудить форум решил ))

Что такое "зафлудить"

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

vo0ov пишет:

ua6em пишет:

Код для Attiny85 а Вы для какой платы его компилируете?

UNO

вот более универсальный код, буквально пару строк поправить:
 

#if defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny167__)
#define WDTCSR WDTCR
#endif

#define PERIOD 3   // период работы в секундах (пример: 60*60*24*3 = 259200 - три дня!)
#define WORK 30         // время работы в секундах
#define MOS 6           // пин мосфета

uint32_t mainTimer, myTimer;
boolean state = false;

#include <avr/wdt.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#define adc_disable() (ADCSRA &= ~(1<<ADEN)) // disable ADC (before power-off)
#define adc_enable()  (ADCSRA |=  (1<<ADEN)) // re-enable ADC


void setup() {
  // все пины как входы, экономия энергии
  for (byte i = 0; i < 6; i++) {
    pinMode(i, INPUT);
  }
  adc_disable();          // отключить АЦП (экономия энергии)

  wdt_reset();            // инициализация ватчдога
  wdt_enable(WDTO_1S);    // разрешаем ватчдог
  // 15MS, 30MS, 60MS, 120MS, 250MS, 500MS, 1S, 2S, 4S, 8S

  WDTCSR |= _BV(WDIE);     // разрешаем прерывания по ватчдогу. Иначе будет резет. СТРОЧКА ПОДЧЁКИВАЕТСЯ

  sei();                  // разрешаем прерывания
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // максимальный сон
}

void loop() {
  mainTimer++;

  if (!state) {                           // если помпа не включена
    if ((long)mainTimer - myTimer > PERIOD) {   // таймер периода
      myTimer = mainTimer;                // сброс таймера
      state = true;                       // флаг на запуск
      pinMode(MOS, OUTPUT);               // пин как выход
      digitalWrite(MOS, HIGH);            // врубить
    }
  } else {                                // если помпа включена
    if ((long)mainTimer - myTimer > WORK) {     // таймер времени работы
      myTimer = mainTimer;                // сброс
      state = false;                      // флаг на выкл
      digitalWrite(MOS, LOW);             // вырубить
      pinMode(MOS, INPUT);                // пин как вход (экономия энергии)
    }
  }

  sleep_enable();   // разрешаем сон
  sleep_cpu();      // спать!
}

ISR (WDT_vect) {
WDTCSR |= _BV(WDIE); // разрешаем прерывания по ватчдогу. Иначе будет реcет. СТРОЧКА ПОДЧЁКИВАЕТСЯ
}

 

vo0ov
vo0ov аватар
Offline
Зарегистрирован: 04.01.2021

ua6em пишет:

vo0ov пишет:

ua6em пишет:

Код для Attiny85 а Вы для какой платы его компилируете?

UNO

вот более универсальный код, буквально пару строк поправить:
 

#if defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny167__)
#define WDTCSR WDTCR
#endif

#define PERIOD 3   // период работы в секундах (пример: 60*60*24*3 = 259200 - три дня!)
#define WORK 30         // время работы в секундах
#define MOS 6           // пин мосфета

uint32_t mainTimer, myTimer;
boolean state = false;

#include <avr/wdt.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#define adc_disable() (ADCSRA &= ~(1<<ADEN)) // disable ADC (before power-off)
#define adc_enable()  (ADCSRA |=  (1<<ADEN)) // re-enable ADC


void setup() {
  // все пины как входы, экономия энергии
  for (byte i = 0; i < 6; i++) {
    pinMode(i, INPUT);
  }
  adc_disable();          // отключить АЦП (экономия энергии)

  wdt_reset();            // инициализация ватчдога
  wdt_enable(WDTO_1S);    // разрешаем ватчдог
  // 15MS, 30MS, 60MS, 120MS, 250MS, 500MS, 1S, 2S, 4S, 8S

  WDTCSR |= _BV(WDIE);     // разрешаем прерывания по ватчдогу. Иначе будет резет. СТРОЧКА ПОДЧЁКИВАЕТСЯ

  sei();                  // разрешаем прерывания
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // максимальный сон
}

void loop() {
  mainTimer++;

  if (!state) {                           // если помпа не включена
    if ((long)mainTimer - myTimer > PERIOD) {   // таймер периода
      myTimer = mainTimer;                // сброс таймера
      state = true;                       // флаг на запуск
      pinMode(MOS, OUTPUT);               // пин как выход
      digitalWrite(MOS, HIGH);            // врубить
    }
  } else {                                // если помпа включена
    if ((long)mainTimer - myTimer > WORK) {     // таймер времени работы
      myTimer = mainTimer;                // сброс
      state = false;                      // флаг на выкл
      digitalWrite(MOS, LOW);             // вырубить
      pinMode(MOS, INPUT);                // пин как вход (экономия энергии)
    }
  }

  sleep_enable();   // разрешаем сон
  sleep_cpu();      // спать!
}

ISR (WDT_vect) {
WDTCSR |= _BV(WDIE); // разрешаем прерывания по ватчдогу. Иначе будет реcет. СТРОЧКА ПОДЧЁКИВАЕТСЯ
}

 

проверяю

Green
Offline
Зарегистрирован: 01.10.2015

)) Период считается не днями, а мс. Неуж то скопировать даже трудно.
Извиняюсь, секундами.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Green пишет:

)) Период считается не днями, а мс. Неуж то скопировать даже трудно.
Извиняюсь, секундами.

код там рабочий )))

Green
Offline
Зарегистрирован: 01.10.2015

30 секунд помпа, 3 секунды период. Конечно рабочий, только не выключается.) 30/3 точнее.