ARDUINO Контроллер теплицы. Обсуждение проекта

kvk

★✩✩✩✩✩✩
2 Авг 2019
68
10
62
Привет коллеги!
завершил свою версию, часьично модернизировал авторский вариант. У меня копка ручного режима после нажатия переводит мотор линейного привода в ручной режим до следующего нажатия, то есть привод Не возвращается в исходное состояние по таймауту. Нужно, например, для ручного открытия крана в любое время на произвольное время. На самом деле , «беда» исходного варианта в другом - гораздо нужнее 2 линейных привода, чем сервы. У меня полив включается открытием шарового крана. Второй шаровый нужен , например, для заполнения емкости. Заядлые дачники поймут :) (сам я больше «анженер», супруга требует модернизации:)) в указанном направлении. Соленоид- зло:)) в прошлом году как раз реализовывал свою версию. Соленоид (китайский) 12в, выдержал испытание, но 3й раз часок бы не простоял , 100%.... Этим и займусь в зимний период. Будет нелегко впилить 1 драйв дополнительно вместо чего либо... ну и приложу свою версию реализации, платаразведена чуть более универсально и под больший драйвер привода с радиаторами.
Корпуса давно использую от электрощитков, сейчас пошел дальше и взял от ... учетно распределительного!
бп на дин-рейке.
Кому интересно - спрашивайте.
Если кто «впилил» 2й мотор линейного привода - мне очень интересно!!
Добрый день !!! Идея впилить второй привод , вместо серво, тоже поддерживаю, актуально для теплиц. А что за блок питания на дин-рейке, подробнее можно узнать. Я тоже пытаюсь вставить девайс в корпус электрощитков. Пока встроил в пластмассовый бокс .
 

Иван Петров

✩✩✩✩✩✩✩
14 Май 2020
2
0
Народ, подскажите если кто сталкивался. Проблема следующая - контроллер зависает. Похоже что происходеит это после срабатывания реле по RTC таймеру для полива. После зависания соответственно перестают обрабатывать данные и переключать реле... что собственно лишает смысла всю затею. Хелп
 

kvk

★✩✩✩✩✩✩
2 Авг 2019
68
10
62
Народ, подскажите если кто сталкивался. Проблема следующая - контроллер зависает. Похоже что происходеит это после срабатывания реле по RTC таймеру для полива. После зависания соответственно перестают обрабатывать данные и переключать реле... что собственно лишает смысла всю затею. Хелп
Чтобы не зависало, подключи соответствующий режим.
======== СИСТЕМА =======
#define WDT_ENABLE 1 // 1 - включить, 0 - отключить watchdog (только для optiboot)
Используй раздельное питание реле , экранируй "сигнальные" провода, по которым идет управление , поставь фильтрующие емкости в цепях питания, и по возможности, уменьшить длину проводов . Возможно идут наводки по питания и по управлению. Увидеть наводки по питанию, можно осциллографом.
 

Иван Петров

✩✩✩✩✩✩✩
14 Май 2020
2
0
Чтобы не зависало, подключи соответствующий режим.
======== СИСТЕМА =======
#define WDT_ENABLE 1 // 1 - включить, 0 - отключить watchdog (только для optiboot)
Используй раздельное питание реле , экранируй "сигнальные" провода, по которым идет управление , поставь фильтрующие емкости в цепях питания, и по возможности, уменьшить длину проводов . Возможно идут наводки по питания и по управлению. Увидеть наводки по питанию, можно осциллографом.
Большое спасибо, буду пробовать.
раздельное питание реле - имеется ввиду что к каждой релешке нужно вести свое питание? или на блок реле5в подать отдельно?

#define WDT_ENABLE 1 // 1 - включить, 0 - отключить watchdog (только для optiboot)
нужно отключить или включить? (или изменить просто текущее значение на противоположное? )))
 

kvk

★✩✩✩✩✩✩
2 Авг 2019
68
10
62
Большое спасибо, буду пробовать.
раздельное питание реле - имеется ввиду что к каждой релешке нужно вести свое питание? или на блок реле5в подать отдельно?

#define WDT_ENABLE 1 // 1 - включить, 0 - отключить watchdog (только для optiboot)
нужно отключить или включить? (или изменить просто текущее значение на противоположное? )))
Раздельное питание , это когда БЛОК РЕЛЕ (2 или больше релюшек на нем) питается отдельным источником (5v или 12v, в зависимости от того какой блок реле применяется ) , а сам КОНТРОЛЛЕР от другого источника питания 5 V.
Если WDT_ENABLE 1 , режим перезагрузки, в случае "зависания", включен и будет следить за системой , если WDT_ENABLE 0 - отключен
 

dms

✩✩✩✩✩✩✩
9 Мар 2020
9
7
Добрый день !!! Идея впилить второй привод , вместо серво, тоже поддерживаю, актуально для теплиц. А что за блок питания на дин-рейке, подробнее можно узнать. Я тоже пытаюсь вставить девайс в корпус электрощитков. Пока встроил в пластмассовый бокс .
Привет. Блок питания взял на этот раз готовый в ЧипДип, серия MeanWell HDR. Например, https://www.chipdip.ru/product/hdr-30-12. Ток выбирайте по вкусу ) Аналогично и на 5в. Таким образом, их там 2. Тапками не кидайте ) :ROFLMAO:В прошлом году использовал в проекте самодельные. Бывало, что из зарядников выдирал... которые на 5в. Но тут был по времени ограничен. В общем не стеснен, так сказать.... Поэтому мозг ломать не стал.
По поводу щитков, щитов и тд. Есть у электриков золотое правило (сам то я не из них, но мне сказали): какой щит ни бери - все равно МАЛО ;):D
Я в этом раза 3 убедился, поэтому подошел в этом году со всей ответственностью. Сначала показалось, что выбрал нормальный, и тогда я взял.. ЕЩЕ больше. Очень понравилась серия учетно-распределительных щитов! Смотрим IEK, Ekf... Есть у которых передняя часть как бы на петлях. Вообще чума! Но в наличии не было, а уезжать надо было скоро... Поэтому пришлось взять ,что было. Но вошло отлично! Место под "шасси" (текстолит), релейные модули и тд. И БП стоят аккуратно на din рейке.
Аа, писать так писать ) Тем , кто подключает приводы рекомендую обратить внимание на разъемы с Али... 6ти контактные разъемы, оказывается, "сказочная редкость" в наших магазах! Я уж и автомобильные перебрал.... Пока не обратил внимание на товары на Али. Молодцы, братья из Поднебесной... за копейки продают то, что у нас х....н найдешь!
Вот такие - с одной стороны (мама или папа) на привод, второй - на кабель от контроллера. И все прекрасно!

Откровенно говоря, ковырять чужой код - та еще "радость". Я бы автора со всем уважением попросил "мутировать" вариант на версию "2 линейных привода и 1 серва". Может, обратимся ? Мелочи, конечно, под себя правлю , не стесняюсь. Но у меня стиль сильно отличается. Ответьте, кому еще актуальна эта затея ?
Мои потребности: кран полива (капельный открывается на час-два и соленоид очень плохой вариант ), наполнение бочки - аналогично, налив - около 40мин , причем если соленоид будет стоять - выход водопровода будет перекрываться только клапаном. Что вообще неправильно. Таким образом, минимум, 2 привода. А если строить систему автополива - смело скажу, 4 привода надо. И еще мало будет.
Кстати, китайский привод переделывал - менял микрики. Таки сделал Просто - концевики на размыкание. Потребовалось потрошить привод ))
 
Изменено:
  • Лойс +1
Реакции: kvk и petrovjch

kvk

★✩✩✩✩✩✩
2 Авг 2019
68
10
62
Я бы автора со всем уважением попросил "мутировать" вариант на версию "2 линейных привода и 1 серва" ...
А если строить систему автополива - смело скажу, 4 привода надо. И еще мало будет...
Согласен, поддерживаю !!! Два привода и 4 Dallas на места 4-х сенсоров. Хорошо бы еще предусмотреть подключение шаговых двигателей вместо серво. Это для возможности прицензионной регулировки трехходовых кранов, в системе отопления.
 
Изменено:
  • Лойс +1
Реакции: petrovjch

marksimo

✩✩✩✩✩✩✩
16 Авг 2020
5
0
Привет всем!
Собрал данную схему, поигрался на столе, подключил 2 сервопривода, датчик температуры на 1 вход...
При установке канала реле на включение при температуре, например менее 21 градуса, срабатывание происходит на 20, также на сервоприводах устанавливаю мин.21, мах. 28, в итоге срабатывают на 20 и 29, подозреваю, что нужно установить переменную больше, а не больше и равно...А где это поправить можно?
И еще по поводу сервоприводов, до этого опробовал схему отрывания форточки, там система такая, при установке между мин. и мах. задвижка открывается не полностью, а в зависимости от того насколько близка температура к заданным пределам, т.е может приоткрываться больше и больше. Как в этом проекте, очень удобно, дописать бы код или изменить..Вот ссылка:
 

kvk

★✩✩✩✩✩✩
2 Авг 2019
68
10
62
Для версии 1.3.3 в разделе automatics надо найти вот этот код и в нем заменить операторы сравнения , как сделано тут и тогда при установлении min или max значений , будет соотвествовать выставленным значениям .

case 3: // ---------------------- если датчик ----------------------
if (millis() - timerMillis[curChannel] >= channels[curChannel].sensPeriod * 1000L) {
timerMillis[curChannel] = millis();

// больше или равно максимум - включить
if (sensorVals[channels[curChannel].sensor] >= channels[curChannel].thresholdMax)
channelStates[curChannel] = channels[curChannel].direction;

// меньше или равно минимум - выключить
if (sensorVals[channels[curChannel].sensor] <= channels[curChannel].threshold)
channelStates[curChannel] = !channels[curChannel].direction;

По аналогии также сделать и в других версиях.
 

marksimo

✩✩✩✩✩✩✩
16 Авг 2020
5
0
У меня 1.6 почему-то не встает, ошибку компиляции показывает, 1.6.2 встала нормально, потом попробовал 1.3, тоже встала, ее и оставил пока...
Кстати, почему-то автор не предусмотрел прошивку посмотреть на приборе какая установлена, или я не нашел может быть..
Так, что 1.3 буду пока использовать..
В коде не очень разбираюсь, поэтому лучше бы подсказали что изменить, чтобы соблюдалось условие, указано мах 28 градусов, то при наступлении 28 тут же срабатывало реле, как было у меня в flprog настроено, там все четко работало..

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

Кстати не плохо было бы случае зависания или иных сбоев в работе программы, система перезапускалась в течении 1-2 минут..
У меня, кстати, уже были зависания, приходилось передергивать провод питания..
Перешел на последнюю версию 1.6.2
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Кстати не плохо было бы случае зависания или иных сбоев в работе программы, система перезапускалась в течении 1-2 минут..
У меня, кстати, уже были зависания, приходилось передергивать провод питания..
Это очень просто делается:
Примерно так::
#include <avr/sleep.h>
byte WDTb = 0;
void(* resetFunc) (void) = 0;  // фнкция ресета, вызывает прерывание 0

void setup() {
  Serial.begin(9600);
  Serial.println("Starting soon...");
  delay(2000);
  SetWDT();
}


void loop() {
//код иммитирубщий проблему, но не сразу:  
static byte b=0;
if (b==10) while (true)
{
  Serial.println("start problem!");
  }
Serial.println("Work!");
b++;
//конец код иммитирубщий проблему, но не сразу:  

WDTb = 0; // обнуление "сторожа" для подтверждения работы. Если цикл не будет выполняться, то обнуления не будет
}


void  SetWDT()
{
  cli(); // Запрещаем прерывания на время изменения WDE и WDP
  asm("wdr"); // Сбрасываем WDT
  WDTCSR |= (1 << WDCE) | (1 << WDE); // Разрешаем изменение значения предделителя WDT:
  WDTCSR = (1 << WDP2) | (1 << WDP1) | (1 << WDP0) | (1 << WDIE ); // WD 2 сек
  // WDTCSR = (1 << WDP3) | (1 << WDIE ); // WD 4 сек
  sei(); // Разрешаем прерывания
}



ISR(WDT_vect) {
  WDTb++;
  if (WDTb > 2)
      // В цилен loop WDTb всегда 0, до этого сделали 1, если не прошло обнуление, то
      // WDTb будет всегда увеличиваться, после превышения 2х (4 сек в примере) идете перезагрузка.
  {
    asm("wdr"); // Сбрасываем WDT
    Serial.println("Reset..");
    delay(1000);
    resetFunc();
  }
}
 

marksimo

✩✩✩✩✩✩✩
16 Авг 2020
5
0
Красивый код, а что с ним делать? Тут не все программисты..Куда вставить?
Здесь на форуме уже был такой вопрос, вот ответ:
Чтобы не зависало, подключи соответствующий режим.
======== СИСТЕМА =======
#define WDT_ENABLE 1 // 1 - включить, 0 - отключить watchdog (только для optiboot)

Но я не нашел где находится этот код, может версия другая..У меня 1.3
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
ну этот код вставляется, интегрируется в основную программу. Каждый кусок в соотв. раздел. и будет работать всегда.
 

marksimo

✩✩✩✩✩✩✩
16 Авг 2020
5
0
Нашел, в версии 1.6.2 есть такая функция.. Включил..

Сервопривода дергаются в состоянии покоя, наверное не избавиться от этого, один MG90S, другой MG996R, оба дергаются..
 

kvk

★✩✩✩✩✩✩
2 Авг 2019
68
10
62
Для [U]marksimo[/U] - Кстати, почему-то автор не предусмотрел прошивку посмотреть на приборе какая установлена, или я не нашел может быть..

Эту проблему можно решить очень просто . Нужно дописать в резделе redrawScreen в месте кода
void redrawDebug() {
lcd.setCursor(2, 0); lcd.print(F("DEBUG v-1.3.3"));
после DEBUG можно прописать ту версию, какую Вы загрузили в свой контроллер. ( Я прописал версию v-1.3.3)
 
  • Лойс +1
Реакции: marksimo

Nikuha58

✩✩✩✩✩✩✩
31 Авг 2020
1
0
Добрый день. Использую 1.3 версию проекта в теплице. Попытался прошить последней версией, но она не встает - не хватает памяти. Для этой цели прикупил новую плату-китайский клон Thinary nano every. Попытался прошить, не получается. Выдает ошибки. Так как в программировании я на уровне чайник, то разобраться не могу. Может кто подскажет, что переделать. 'EICRA' was not declared in this scope.
C++:
ПРЕДУПРЕЖДЕНИЕ: библиотека EEPROM должна запускаться на архитектурах megaavr и может быть несовместима с вашей платой на архитектуре avr.
In file included from sketch\a1_data.h:84:0,
                 from C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\GyverControl_1.6.2.ino:132:
sketch\encMinim.h: In constructor 'encMinim::encMinim(uint8_t, uint8_t, int8_t, boolean, boolean)':
sketch\encMinim.h:37:77: warning: unused parameter 'type' [-Wunused-parameter]
 encMinim::encMinim(uint8_t clk, uint8_t dt, int8_t sw, boolean dir, boolean type) {
                                                                             ^~~~
In file included from C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/Arduino.h:27:0,
                 from sketch\GyverControl_1.6.2.ino.cpp:1:
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\a2_setup.ino: In function 'void INT0_vect()':
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\a2_setup.ino:58:5: warning: 'INT0_vect' appears to be a misspelled 'signal' handler, missing '__vector' prefix [-Wmisspelled-isr]
 ISR(INT0_vect) {        // External interrupt vectors
     ^
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\a2_setup.ino: In function 'void INT1_vect()':
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\a2_setup.ino:62:5: warning: 'INT1_vect' appears to be a misspelled 'signal' handler, missing '__vector' prefix [-Wmisspelled-isr]
 ISR(INT1_vect) {
     ^
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\a4_func.ino: In function 'void initHardware()':
a4_func:65:3: error: 'EICRA' was not declared in this scope
   EICRA = (EICRA & 0x0C) | 1;  // Setup interrupt type
   ^~~~~
In file included from C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/Interrupts.h:8:0,
                 from C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/ArduinoAPI.h:32,
                 from C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/Arduino.h:23,
                 from sketch\GyverControl_1.6.2.ino.cpp:1:
a4_func:66:10: error: 'EIMSK' was not declared in this scope
   bitSet(EIMSK, INT0);            // Enable external interrupt
          ^
C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/Common.h:79:30: note: in definition of macro 'bitSet'
 #define bitSet(value, bit) ((value) |= (1UL << (bit)))
                              ^~~~~
a4_func:66:17: error: 'INT0' was not declared in this scope
   bitSet(EIMSK, INT0);            // Enable external interrupt
                 ^
C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/Common.h:79:49: note: in definition of macro 'bitSet'
 #define bitSet(value, bit) ((value) |= (1UL << (bit)))
                                                 ^~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\a4_func.ino:66:17: note: suggested alternative: 'PIN0'
   bitSet(EIMSK, INT0);            // Enable external interrupt
                 ^
C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/Common.h:79:49: note: in definition of macro 'bitSet'
 #define bitSet(value, bit) ((value) |= (1UL << (bit)))
                                                 ^~~
a4_func:68:17: error: 'INT1' was not declared in this scope
   bitSet(EIMSK, INT1);
                 ^
C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/Common.h:79:49: note: in definition of macro 'bitSet'
 #define bitSet(value, bit) ((value) |= (1UL << (bit)))
                                                 ^~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\a4_func.ino:68:17: note: suggested alternative: 'PIN1'
   bitSet(EIMSK, INT1);
                 ^
C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/Common.h:79:49: note: in definition of macro 'bitSet'
 #define bitSet(value, bit) ((value) |= (1UL << (bit)))
                                                 ^~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\a4_func.ino: In function 'void applySettings()':
a4_func:105:41: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
   digitalWrite(SERVO_1, channelStates[8]);
                                         ^
a4_func:108:41: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
   digitalWrite(SERVO_0, channelStates[7]);
                                         ^
a4_func:115:67: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
     if (temp.mode < 4) digitalWrite(relayPins[i], channelStates[i]);     // вернуть реле на места
                                                                   ^
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\automatics.ino: In function 'void timersTick()':
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\automatics.ino:81:50: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
           if (millis() - timerMillis[curChannel] >= activeChannel.sensPeriod * 1000L) {
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
automatics:129:58: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
       digitalWrite(relayPins[relay], channelStates[relay]);       // включаем/выключаем все реле типов РЕЛЕ и КЛАПАН
                                                          ^
automatics:139:58: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
       digitalWrite(relayPins[relay], channelStates[relay]);          // применить
                                                          ^
automatics:176:41: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
   digitalWrite(SERVO_0, channelStates[7]);
                                         ^
automatics:192:41: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
   digitalWrite(SERVO_1, channelStates[8]);
                                         ^
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\automatics.ino: In function 'boolean checkDay(byte)':
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\automatics.ino:227:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
        (thisTime > temp.weekOn && thisTime < temp.weekOff) :
         ~~~~~~~~~^~~~~~~~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\automatics.ino:227:44: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
        (thisTime > temp.weekOn && thisTime < temp.weekOff) :
                                   ~~~~~~~~~^~~~~~~~~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\automatics.ino:228:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
        (thisTime > temp.weekOn || thisTime < temp.weekOff))) return true;
         ~~~~~~~~~^~~~~~~~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\automatics.ino:228:44: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
        (thisTime > temp.weekOn || thisTime < temp.weekOff))) return true;
                                   ~~~~~~~~~^~~~~~~~~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\automatics.ino: In function 'void checkDawn(byte)':
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\automatics.ino:255:21: warning: unused parameter 'curChannel' [-Wunused-parameter]
 void checkDawn(byte curChannel) {
                     ^~~~~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\menu.ino: In function 'void incr(uint32_t*, int, int)':
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\menu.ino:11:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (incr < 0 && *val < -incr) *val = 0;
                   ~~~~~^~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\menu.ino:13:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (*val > limit) *val = limit;
       ~~~~~^~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\menu.ino:14:12: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits]
   if (*val < 0) *val = 0;
       ~~~~~^~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\menu.ino: In function 'void chSettingsSett(int)':
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\menu.ino:311:8: warning: unused variable 'curPWMchannel' [-Wunused-variable]
   byte curPWMchannel = channelToPWM[currentChannel];
        ^~~~~~~~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\pid.ino: In function 'void computePID(byte)':
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\pid.ino:35:22: warning: unused parameter 'channel' [-Wunused-parameter]
 void computePID(byte channel) {
                      ^~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\redrawScreen.ino: In function 'void drawPlot(int*)':
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\redrawScreen.ino:39:20: warning: unused parameter 'plot_array' [-Wunused-parameter]
 void drawPlot(int *plot_array) {
                    ^~~~~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\redrawScreen.ino: In function 'void redrawSettings()':
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\redrawScreen.ino:239:8: warning: unused variable 'curPWMchannel' [-Wunused-variable]
   byte curPWMchannel = channelToPWM[currentChannel];
        ^~~~~~~~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\sensors.ino: In function 'void readAllSensors()':
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\sensors.ino:118:33: warning: invalid conversion from 'int' to 'PinStatus' [-fpermissive]
         digitalWrite(SENS_VCC, 1);
                                 ^
In file included from C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/Interrupts.h:8:0,
                 from C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/ArduinoAPI.h:32,
                 from C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/Arduino.h:23,
                 from sketch\GyverControl_1.6.2.ino.cpp:1:
C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/Common.h:106:6: note:   initializing argument 2 of 'void digitalWrite(pin_size_t, PinStatus)'
 void digitalWrite(pin_size_t pinNumber, PinStatus status);
      ^~~~~~~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\sensors.ino:128:33: warning: invalid conversion from 'int' to 'PinStatus' [-fpermissive]
         digitalWrite(SENS_VCC, 0);
                                 ^
In file included from C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/Interrupts.h:8:0,
                 from C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/ArduinoAPI.h:32,
                 from C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/Arduino.h:23,
                 from sketch\GyverControl_1.6.2.ino.cpp:1:
C:\Users\�������\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\cores\arduino/api/Common.h:106:6: note:   initializing argument 2 of 'void digitalWrite(pin_size_t, PinStatus)'
 void digitalWrite(pin_size_t pinNumber, PinStatus status);
      ^~~~~~~~~~~~
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\service.ino: In function 'void serviceTick()':
service:6:54: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
       digitalWrite(relayPins[i], channelStatesServ[i]);
                                                      ^
service:9:49: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
       digitalWrite(SERVO_0, channelStatesServ[7]);
                                                 ^
service:12:49: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
       digitalWrite(SERVO_1, channelStatesServ[8]);
                                                 ^
C:\firmware\GyverControl-master\firmware\GyverControl_1.6.2\service.ino: In function 'void serviceOUT()':
service:67:74: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
     if (loadChannel(i).state) digitalWrite(relayPins[i], channelStates[i]); // вернуть реле на места
                                                                          ^
service:71:41: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
   digitalWrite(SERVO_0, channelStates[7]);
                                         ^
service:74:41: error: cannot convert 'boolean {aka bool}' to 'PinStatus' for argument '2' to 'void digitalWrite(pin_size_t, PinStatus)'
   digitalWrite(SERVO_1, channelStates[8]);
                                         ^
exit status 1
'EICRA' was not declared in this scope
 

kvk

★✩✩✩✩✩✩
2 Авг 2019
68
10
62
А библиотеку под новую версию V-1.6 заменил ?
 

b707_2

★★✩✩✩✩✩
22 Июл 2020
182
51
Может кто подскажет, что переделать. 'EICRA' was not declared in this scope.
Nano Every построена на совсем другом контроллере - атмега4808, так что во всех местах, где у Алекса использован прямой доступ к регистрам типа EICRA - код надо серьезно переписывать. Если вы в программировании чайник, боюсь для вас эта задачка совершенно неподъемная

Кроме того, если я правильно вижу спеки атмеги4808, у нее всего 256 байт ЕЕПРОМ, а это очень мало для сохранения настроек контроллера, код рассчитан на 1024 байт
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Мало того, все кастомные разработки под 328 и аналогичные атмеги сразу попадают под переделку, 4808/4809 имеют свой особенный синтаксис обращения к регистрам.
Поэтому большинство библиотек работать не будут.
 

ua0coo

✩✩✩✩✩✩✩
30 Май 2020
12
9
всем привет! начал реализовать контроллер теплицы- много вопросов.. может кто подскажет.. начну с простых: я привык работать с даласами и возникает вопрос могу ли я использовать только их во всех входах? у меня в теплице будет использоваться в качестве термостата один канал на солнечный коллектор (кому интересно- опишу) мощностью примерно 12 квт.
общая катина по задачам:
1. термостат гелео
2. термостат на привод открывания окон и люков
3. термостат отопления
4. капельный полив по таймеру при условии влажности почвы ниже установленной.
есть инет на даче... хотелось бы видеть все измеренные величины и состояние реле у себя дома на компе.
сегодня в старой теплице есть удаленное управление 8 каналов, контроль 8 каналов и лог темп с не ограниченным количеством датчиков дс18б20
Посоветуйте каким путем пойти
 

Вложения

ua0coo

✩✩✩✩✩✩✩
30 Май 2020
12
9
Посмотреть вложение 14445нПосмотреть вложение 14444Посмотреть вложение 14446Посмотреть вложение 14447
Народ ! кто как борется с ветром? Сегодня был в моем городе ветер с очень сильными порывами, и дверцу у теплицы ушатало, причем даже шток линейного привода погнуло. Может есть идеи как жестко зафиксировать открытую дверь или может установить датчик какой-нибудь ,который бы закрывал теплицу при сильном ветре,но в этом случае пока не пойму алгоритма работы такого сценария. На текущий момент установил защелку которая фиксирует уже открытую дверь, управляется защелка серво движком-сценарий у нее температурный те она срабатывает позже открывания линейного привода и убирает защелку раньше закрывания линейного привода(выставил диапазон температуры с разницей в 2 градуса)

Переделал дизайн
я боролся на даче с дибилами у которых нет брелка от ворот и они воротами (хорошим рычагом) просто гнули шток. решение было найдено в брошурке по геометрии. принцип на рисунке..
 

Вложения

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
@ua0coo, Все это замечательно. но вы бы хоть обрезали рисунок по границе. Сжатие получилось такое, что я лично буквы разбираю не все.
PS . в винде скрин шот делается нажатием Alt+prt scr , и он получается не во весь экран, а по размеру активного окна
 

ua0coo

✩✩✩✩✩✩✩
30 Май 2020
12
9
1599132096350.png
я извиняюсь это не с инета а на скорую руку в кореле... ну так получилось.....
 
  • Лойс +1
Реакции: 4ess и Ehktov