Скетч для холодильника

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

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

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Dimmm пишет:

Клапауций 234 пишет:

Dimmm пишет:

Задача - через 6 часов после включения, включить тэн для оттайки на 15 секунд, при этом исключить включение компрессора и вентилятора, которые включаются при определенной температуре от термодатчика. Обнулить таймер, опять с учетом температуры включать - выключать компрессор с вентилятором, снова через 6 часов включить оттайку, игнорируя компрессор и т.д.

таймер здесь класс титановый велосипед для delay без delay().

остальное - говорил же, как:

if (таймер) {оттайка;}

if (!оттайка) {компрессор; вентиллятор;}

Спасибо! Сейчас попробую.

Но эту Кибериаду я все-таки тоже хочу победить.

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

qwone пишет:

/*
//#1
 компрессор            -> 4(Compr_pin) 1 вкл/0 откл
 вентилятор            -> 5(Fun_pin)   1 вкл/0 откл

DS18B20                   -> 2    (TEMP_WIRE_BUS)
  1 датчик (coolThermometer)
  2 датчик (tenThermometer)

  I2C LCD1602          GND -> GND
                      +5V -> +5V
                      SDA -> A4(SDA)
                      SCL -> A5(SCL)
 //#2
 оттайка               -> 6(Ten_pin)  1 вкл/0 откл
 светодиод оттайки     -> 13(LedTen_pin)  1 вкл/0 откл
*/
//#1
const int Compr_pin = 4; // реле компрессора
const int Fun_pin   = 5; // реле вентилятора
uint8_t Comp; // состояние реле копрессора(вентилятора) 1 вкл/0 откл
const float temp_Compr_OFF = -10; //порог выключения компрессора
const float temp_Compr_ON = -8; // порог включения компрессора

#include <Wire.h>
#include <DallasTemperature.h>
#include <OneWire.h>

#define TEMP_WIRE_BUS 2
OneWire tempWire(TEMP_WIRE_BUS); //объявили переменную датчиков
DallasTemperature TempSensors(&tempWire); //объявили структуру типа Даллас термометр
DeviceAddress coolThermometer = {
  0x28, 0xFF, 0xC0, 0xC6, 0x43, 0x16, 0x04, 0xA8
};
DeviceAddress tenThermometer = {
  0x28, 0xFF, 0x23, 0xFC, 0x43, 0x16, 0x03, 0xEC
};
float tempSensor[2]; // массив куда читается температура c датчиков.
void getTemp() {    // читаем температуру и заполняем массив
  TempSensors.requestTemperatures(); //команда сенсорам заполнить свою память новыми данными
  tempSensor[0] = TempSensors.getTempC(coolThermometer);
  tempSensor[1] = TempSensors.getTempC(tenThermometer);
}

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);// set the LCD address to 0x27 for a 16 chars and 2 line display

void printData() {   /////// вывод инфы на экран
  lcd.setCursor(0, 0);
  lcd.print("Temp1: ");
  lcd.print(tempSensor[0]);  // показываем температуру с датчика 1
  lcd.print("C");
  lcd.setCursor(0, 1);
  lcd.print("Temp2: ");
  lcd.print(tempSensor[1]);  // показываем температуру с датчика 2
  lcd.print("C");
}
//#2
const int Ten_pin   = 6; // реле оттайки
const int LedTen_pin   = 13; // свет оттайки
uint8_t Ten; // состояние реле оттайки 1 вкл/0 откл

void setup() {
  Serial.begin(9600);//инициализируем серийный порт
  //#1
  pinMode(Compr_pin, OUTPUT); // подключить ноги компрессора и вентилятора
  pinMode(Fun_pin, OUTPUT);
  digitalWrite(Compr_pin, Comp = 0); // и выключить их
  digitalWrite(Fun_pin, Comp);

  TempSensors.begin(); //инициализируем сенсоры
  lcd.backlight();
  //#2
  pinMode(Ten_pin, OUTPUT); // подключить ноги отморозки и его индикатора
  pinMode(LedTen_pin, OUTPUT);
  digitalWrite(Ten_pin, Ten = 0); // и выключить их
  digitalWrite(LedTen_pin, Ten);
}
void loop() {
  static uint32_t MILLIS = millis(); // текущее время в миллисекундах
  //#1
  getTemp(); // читаем температуру с датчиков
  printData();//печатаем данные
  if (!Ten && tempSensor[0] > temp_Compr_ON) { // если температура поднялась и нет режима разморозки
    digitalWrite(Compr_pin, Comp = 1); // и включить вентилятор и компрессор
    digitalWrite(Fun_pin, Comp);
  }
  if (tempSensor[0] < temp_Compr_OFF) {
    digitalWrite(Compr_pin, Comp = 0); // и выключить вентилятор и компрессор
    digitalWrite(Fun_pin, Comp);
  }
  //#2 oттайка  раз в 6 часов оттайка 12 сек
  static uint32_t past2 = 0; // последнее время сработки
  static uint32_t past1_2 = 0;  // последнее время начала оттайки
  if (Ten && (MILLIS - past1_2 >= 12000)) { // если прошло время разморозки 12 сек
    digitalWrite(Ten_pin, Ten = 0); // и выключить разморозку
    digitalWrite(LedTen_pin, Ten);
  }
  if (MILLIS - past2 >= 600000) { // если прошло 6 часов
    past2 = MILLIS;
    digitalWrite(Compr_pin, Comp = 0); // и выключить вентилятор и компрессор
    digitalWrite(Fun_pin, Comp);
    digitalWrite(Ten_pin, Ten = 1); // и включить разморозку
    digitalWrite(LedTen_pin, Ten);
    past1_2 = MILLIS;
  }
}

 

после включения сразу же включает на долю секунды реле компрессора и вентилятора, потом включает реле оттайки на постоянную. Реле компрессора и вентилятора при этом выключены. Подождал значительное время, оттайка не выключается. Температура растет (вставил инициализацию lcd   lcd.unit()), компрессор не включается, оттайка не выключается.

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Неа, не работает...

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Все, я его победил. Выложил сюда

http://arduino.ru/forum/proekty/rabochii-kholodilnik-s-nofrost

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Барон пишет:

...темку практически по моей специальности (холодильщик) решил направить в нужное русло...

2 (эта причина, почему нельзя делать оттайку 15 сек)  дело в том, если вы будете включать и выключать компрессор (менее 5 мин. примерно) то он вскоре выйдет из строя. Это делать нельзя! 

Написано немного сумбурно.

Можно чуть более определенно:

- что следует делать,

- чего делать категорически не следует.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

andriano пишет:

- что следует делать,

- чего делать категорически не следует.

- следует включать компрессор максимально реже.

- категорически не следует включать компрессор часто.

*выключать можно как угодно. :D

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Один раз выключить и больше не включать.

Спасибо, все понял.

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

По опыту наблюдений могу сказать, очень много зависит от теплопроводности самого ящика, вернее способность его держать низкую температуру. Чем лучше герметичность - тем реже включается компрессор, от качества заправки системы хладогентом - тем быстрее набирает холод, если можно так сказать. У меня в среднем простой компрессора 28-30 минут, за это время температура поднимается от -11 до - 7,95, потом 4,5 минуты работа, опускается до -10,06 и опять простой около получаса. Нормальный режим работы. Даже примерно суточный расход эл энергии замерил ( по счетчику), холодильник "жрет" 2 kW за сутки. Как то так. Могу сказать определенно, такую схему можно интегрировать в абсолютно любой холодильник. Позже приведу свою систему в порядок и выложу фото.

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Кстати по оттайке - тэн оттайки у меня включается на 60 секунд, за это время нагрев до температуры таяния льда на испарителе, стекание воды. Установил опытным путем. Специально разбирал морозилку и смотрел за процессом. Нагрев испарителя за это время до +5С.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Есть такая специальность, которую просторечье называют "холодильщики". По аналогии к сантехникам, электриками, механикам и прочим. Вот и у них есть своя фишка. Это физика хладогенов. Под давлением он сжижается отдавая тепло наружу, а при испарении ,переходе в газообразное состояние, охлаждает. Не будем лезть в аммиаки. Там свои нюансы.  У каждого хладогена есть своя температура испарения . Так что ниже температуры испарения холодильник не охладит. 

 Но все это пролог.  Хладоген в обычных условиях это газ, и в система в которой он циркулирует не совсем герметична. Так что после покупки и долгого срока работы часть хладогена тю-тю.  Компрессор работает , пока не охладит. Датчик работы так устроен. Но что бы охлаждать хладоген должен сжижаться и испарятся. И чем меньше в системе хладогена, тем больше работает компрессор, и тем больше жрет холодильник энергии. 

 ПС: Домашние холодильники сделаны так, что бы покупатели их не ремонтировали, а покупали новые.

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Мой сломался в тот момент, что новый ну никак не входит в планы. Нашел вот дешманский способ вернуть к жизни. Еще дешевле, конечно, пользоваться балконом (благо температура на улице соответствующая). Так то 8 лет отработал верой и правдой. Наверное позову холодильщика подзаправить систему. Увидит мой "модуль управления", офигеет наверное.

Барон
Offline
Зарегистрирован: 17.11.2016

Аммиачные работают также, а абсорционные по другому. Темпратуру испарения (кипения) можно получить и значительно ниже чем вы думаете, только компрессор или угробите или надо другой. Система герметична, но из-за того что фреон/хладон является текучей жидкостью - один черт через пайку происход утечка, примерно до 5 грам на год с одной точки, и это нормально, все что выше - не нормально. Если вы зальете фреон в чугунную батарею (предварительно загерметизировав отверстия) то через некоторое время весь фреон выйдет через поры чугуна ))

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

На самом деле всю эту электронику (фирменную) можно заменить обычными таймерами и релюхами, и как вариант ардуиной.

Барон
Offline
Зарегистрирован: 17.11.2016

Категорически нельзя выключать и тут же включать компрессор, надо ждать минут 5 хотя бы

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Барон пишет:

Категорически нельзя выключать и тут же включать компрессор, надо ждать минут 5 хотя бы

Согласен. У меня в коде даже места нет такого, чтоб происходило кратковременное вкл/выкл компрессора. Это может произойти если температура морозилки (именно она вкл/выкл компрессор) вдруг поднимется и тут же опуститься, тут же поднимется, но такого не должно вроде случиться.

Барон
Offline
Зарегистрирован: 17.11.2016

Я не силен в коде, я еще не написал ни одного скетча, только жду посылку от наших "друзей",  скажите после отттайки 60 сек, что происходит?

Барон
Offline
Зарегистрирован: 17.11.2016

В морозилке у вас не может быть физически молниностного повышения температуры, там инерция... так что за это можно не волноваться.

И чисто из любопытства, а почему выбрана температура минус10, в морозильной камере можно и по ниже.. 

Барон
Offline
Зарегистрирован: 17.11.2016

Да, и только сейчас дошло - организуйте компрессору защиту от пониженного и повышенного напряжения ))

Сейчас мы супер холодильник соберем )) вобщем еще - на экране выводите режимы работы: в оттайке, подается ли напряжение на вентилятор, на компрессор.  Потом если что будет легче диагностировать.

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Барон пишет:

Я не силен в коде, я еще не написал ни одного скетча, только жду посылку от наших "друзей",  скажите после отттайки 60 сек, что происходит?

После оттайки идет проверка температуры в морозилке и, если она повысилась выше -8С, включается компрессор. По опыту, после оттайки температура в камере примерно -8,3С и еще через минут 5-6 поднимается до -7,9С и включается компрессор.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Барон пишет:

вобщем еще - на экране выводите режимы работы: в оттайке, подается ли напряжение на вентилятор, на компрессор.  Потом если что будет легче диагностировать.

не нужно всего этого - холодильник не должен спамить ега счастливого ползателя служебной инфой.

для диагностики - подключаемый модуль диагностики.

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Барон пишет:

В морозилке у вас не может быть физически молниностного повышения температуры, там инерция... так что за это можно не волноваться.

И чисто из любопытства, а почему выбрана температура минус10, в морозильной камере можно и по ниже.. 

Я сейчас сделал -12С, думаю хватит. Температуру можно менять в любое время, чем и нравится мне вся эта штука. 

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Барон пишет:

Да, и только сейчас дошло - организуйте компрессору защиту от пониженного и повышенного напряжения ))

Сейчас мы супер холодильник соберем )) вобщем еще - на экране выводите режимы работы: в оттайке, подается ли напряжение на вентилятор, на компрессор.  Потом если что будет легче диагностировать.

Защиту для компрессора организовал через хороший сетевой фильтр APC, туда же и дуинка со всем обвесом подключена (оказывается боится помех). На дисплее отображается в обратном отсчете время ( в минутах) до следующего цикла оттайки, при включении компрессора светится FREEZING, после выключения светится WAITING, при включении оттайки DEFROST и в постоянном режиме температура в морозилке.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Dimmm пишет:

Защиту для компрессора организовал через хороший сетевой фильтр APC

не-не! реле напряжения

rele-controlya-napryazheniya.jpg

дабы не спалить комрессор при <180 или >260 вольт в сети

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Точно! Видел такую

Барон
Offline
Зарегистрирован: 17.11.2016

Ну тогда выходим на пром. Уровень ))

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Барон пишет:

Я не силен в коде, я еще не написал ни одного скетча, только жду посылку от наших "друзей",  

Что и для чего заказал?

Барон
Offline
Зарегистрирован: 17.11.2016

Dimmm пишет:

Барон пишет:

Я не силен в коде, я еще не написал ни одного скетча, только жду посылку от наших "друзей",  

Что и для чего заказал?

Как и многие-для супер пупер метеостанции с СО2 )))

Мегу и датчик влажности, датчик СО2 и пяток датчиков температуры )) еще wifi модуль и радиомодуль )) все китайское.

Это пока для "базы" она будет мерять влажность, температуру и СО2 внутри помещения, будет еще один блок (но это потом, если это не спалю), он будет замерять температуру снаружи, и пару точек внутри стены (на половине глубины, на четверти и на поверхности) и если господь скетч сжалится надо мной  - все это будет передаваться на комп. Холодильщик я, по совместительству с кондиционерщиком и вентиляционщиком, и немного отопленец, поэтому тепломассообмен это мое, родное )) буду эксперименты над своим жильем ставить ))

Я с Украины, и нас немного заставляют экономить, поэтому приходится вспоминать что изучал в институте и воплощать в жизнь.

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Понятно. Ну удачи в освоении. и экспериментах.

Барон
Offline
Зарегистрирован: 17.11.2016

Спасибо.

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Поторопился я объявить о победе.... Не все так просто. Все-таки не могу победить таймер. После двух суток нормальной работы, в задуманных режимах, вдруг начал виснуть, причем в одном и том же месте. На экране одна и та же температура от первого и второго датчика 1:-10.06 2:-15.31, таймер остановлен (каждый раз новая цифра) и надпись должно быть "waiting", а на экране "freeting", часть от первого "waiting" и от второго "freezing". Как будто переходил из одного режима в другой и завис. После резета опять нормальная работа, но через какое то время снова (см. выше). Не пойму что такое.

Сейчас загружен это скетч


#include <Wire.h>
#include <DallasTemperature.h>
#include <OneWire.h>

// дисплей 1602
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);// set the LCD address to 0x27 for a 16 chars and 2 line display

// два датчика температуры DS18B20 на пин 2
#define TEMP_WIRE_BUS 2
OneWire tempWire(TEMP_WIRE_BUS); //объявили переменную датчиков
DallasTemperature TempSensors(&tempWire); //объявили структуру типа Даллас термометр
DeviceAddress coolThermometer = {
0x28, 0xFF, 0xC0, 0xC6, 0x43, 0x16, 0x04, 0xA8 };
DeviceAddress tenThermometer = {
0x28, 0xFF, 0x23, 0xFC, 0x43, 0x16, 0x03, 0xEC };
// define variables
float tempSensor[2]; // массив куда читается температура c датчиков. 
byte qty; // количество градусников на шине. 

// счетчик
unsigned long prevMillis = 0; // последний момент времени, когда вкл оттайка


// таймер
long OnTimeTen = 40000; // длительность работы тэна (в миллисекундах)
long OffTimeTen = 18000000; // длительность не работы тэна (в миллисекундах)
//////////////////////////////////////////////////////////////////
//про холодильник
int ReleCompr = 4;  // реле компрессора
int ReleComprState = HIGH;
int ReleFun = 5; // реле вентилятора
// int ReleFunState = HIGH;
int ReleTen = 6; // реле оттайки
int ReleTenState = HIGH;
int LedTen = 13; // свет оттайки
// /////////////////////////////////////////////////////////////////
void getTemp(){ // читаем температуру и заполняем массив
  TempSensors.requestTemperatures(); //команда сенсорам заполнить свою память новыми данными
  tempSensor[0] = TempSensors.getTempC(coolThermometer);
   tempSensor[1] = TempSensors.getTempC(tenThermometer); 
  /*
   for (int i = 0; i < qty; i++) tempSensor[i] = TempSensors.getTempCByIndex(i);//в цикле заполняем массив полученными данными, уже приведенными к градусам Цельсия.
   */
}
// /////////////////////////////////////////////////////////////////
// пороговые значения температуры
float tempC;
float t1 = -12; //порог выключения компрессора
float t2 = -10; // порог включения компрессора
// float t3 = -14;    //порог включения оттайки
// float t4 = -5.0; //порог выключения оттайки
// /////////////////////////////////////////////////////////////////
// работа компрессора
 void printData(){
  /////// вывод инфы на экран
        lcd.setCursor(0, 0);
        lcd.print("1:");
        lcd.print(tempSensor[0]);  // показываем температуру с датчика 1
        
        lcd.setCursor(8, 0);
        lcd.print("2:"); // показываем температуру с датчика 2
        lcd.print(tempSensor[1]);
        
}
// /////////////////////////////////////////////////////////////////

// ////////////////////////////////////////////////////////////////////
void setup() {
  pinMode(ReleCompr, OUTPUT);
  digitalWrite(ReleCompr, ReleComprState);
  pinMode(ReleFun, OUTPUT);
  digitalWrite(ReleFun, ReleComprState);
  pinMode(ReleTen, OUTPUT);
  digitalWrite(ReleTen, ReleTenState);
  pinMode(LedTen, OUTPUT);
    
  TempSensors.begin(); //инициализируем сенсоры
  lcd.init();
  lcd.backlight();
   
   Serial.begin(9600);//инициализируем серийный порт
}
// //////////////////////////////////////////////////////////////////

// /////////////////////////////////////////////////////////////////
void loop() {
    
  getTemp(); // читаем температуру с датчиков
  printData();
  unsigned long currentMillis = millis(); // текущее время в миллисекундах 
lcd.setCursor(0, 1);  
  lcd.print(currentMillis/1000 - prevMillis/1000);
  
  if((ReleComprState==HIGH) && (currentMillis - prevMillis > OffTimeTen))
   {
  ReleTenState=LOW;   
  digitalWrite(ReleTen, ReleTenState);
  digitalWrite(LedTen, HIGH);
  prevMillis = currentMillis; 
  lcd.clear();
  lcd.setCursor(7, 1);
  lcd.print("DEFROST");
}  
 if ((ReleTenState==LOW) && (currentMillis - prevMillis > OnTimeTen)) {
   ReleTenState=HIGH;
  digitalWrite(ReleTen, ReleTenState);
  digitalWrite(LedTen, LOW);
  prevMillis = currentMillis; 
  lcd.clear();
   }
     else  
    {
      if ((ReleTenState==HIGH) && (tempSensor[0] > t2)) {
    ReleComprState = LOW;
    digitalWrite(ReleCompr, ReleComprState);
    digitalWrite(ReleFun, ReleComprState);
    lcd.setCursor(8, 1);
    lcd.print("FREEZING");        }
    
  if (tempSensor[0] < t1) {
    ReleComprState = HIGH;
   digitalWrite(ReleCompr, ReleComprState);
   digitalWrite(ReleFun, ReleComprState);
   lcd.setCursor(8, 1);
   lcd.print("WAITING ");
      }
    } 
 }
        
// /////////////////////////////////////////////////////////////////

Ребят помогите разобраться с таймером, чувствую в этом проблема.

Барон
Offline
Зарегистрирован: 17.11.2016

Напомню я не разбираюсь в скетчах, но я холодильщик ))

у вас 

"

float t2 = -10; // порог включения компрессора
051 // float t3 = -14;    //порог включения оттайки"

вам скорее всего это "float t3 = -14" даром не нужно, вы включаете оттайку по времени, какой ф..г какая там температура? 

 

 

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Барон пишет:

Напомню я не разбираюсь в скетчах, но я холодильщик ))

у вас 

"

float t2 = -10; // порог включения компрессора
051 // float t3 = -14;    //порог включения оттайки"

вам скорее всего это "float t3 = -14" даром не нужно, вы включаете оттайку по времени, какой ф..г какая там температура? 

 

 

Да, там строка 051 не используется, стоит двойной слэш. Это осталось от первоначального варианта скетча.

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Может посоветуете какой-нить программный таймер для атмеги 328, я б его попробовал прикрутить......

Клапауций 234
Offline
Зарегистрирован: 24.10.2016
Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

здесь можно будет реализовать большой интервал? 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Dimmm пишет:

здесь можно будет реализовать большой интервал? 

4294967296 миллисекунд

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Хватит

 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Dimmm пишет:

Хватит

ок. 100$

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

))))

что то не так делаю, попробовал образец скомпилировать, не прошел проверку...

Arduino: 1.7.8 (Windows 8.1), Плата"Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)"
 
In file included from sketch_nov17c.ino:4:0:
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:10:1: error: 'boolean' does not name a type
 
 boolean s;
 
 ^
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:11:1: error: 'boolean' does not name a type
 
 boolean push;
 
 ^
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:12:1: error: 'boolean' does not name a type
 
 boolean push_tick;
 
 ^
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h: In constructor 'noDELAY::noDELAY()':
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:15:20: error: 'millis' was not declared in this scope
 
 previous  = millis();
 
                    ^
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:16:1: error: 's' was not declared in this scope
 
 s         =        0;
 
 ^
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:17:1: error: 'push' was not declared in this scope
 
 push      =        0;
 
 ^
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:18:1: error: 'push_tick' was not declared in this scope
 
 push_tick =        0;
 
 ^
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h: In member function 'void noDELAY::start()':
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:21:38: error: 's' was not declared in this scope
 
 void start()                        {s = 1;}
 
                                      ^
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h: In member function 'void noDELAY::stop()':
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:22:38: error: 's' was not declared in this scope
 
 void  stop()                        {s = 0;}
 
                                      ^
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h: In member function 'void noDELAY::read(long unsigned int)':
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:25:34: error: 'millis' was not declared in this scope
 
 unsigned long current  =  millis();
 
                                  ^
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:26:1: error: 'push_tick' was not declared in this scope
 
 push_tick =     0;
 
 ^
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:27:5: error: 's' was not declared in this scope
 
 if (s                  ==        0) {previous = current;}
 
     ^
 
C:\Users\Dim\Documents\Arduino\libraries\class_noDELAY/class_noDELAY.h:30:1: error: 'push' was not declared in this scope
 
 push      = !push;
 
 ^
 
sketch_nov17c.ino: In function 'void loop()':
 
sketch_nov17c.ino:26:24: error: 'class noDELAY' has no member named 'push'
 
sketch_nov17c.ino:27:24: error: 'class noDELAY' has no member named 'push'
 
Ошибка компиляции.
 
  Это сообщение будет содержать больше информации чем
  "Отображать вывод во время компиляции"
  включено в Файл > Настройки
 
Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Dimmm пишет:

))))

что то не так делаю, попробовал образец скомпилировать, не прошел проверку...

попробовал пример #3 с версией класса #1

Скетч использует 962 байт (15%) памяти устройства. Всего доступно 6 144 байт.
Глобальные переменные используют 31 байт (3%) динамической памяти, оставляя 993 байт для локальных переменных. Максимум: 1 024 байт.

что я не так делаю?

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

блиииииииииин! че то ваще навоз... 

нифига.

именно #3 с версией #1

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

это что за дурь? Arduino: 1.7.8

https://downloads.arduino.cc/arduino-1.6.13-windows.zip

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Прикольно, а с этой версией все нормально компилируется. Не помню где я взял 1.7.8, так еще и просит обновить до 1.7.12!!!

Пивасика набулькался, щас все получится.

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Интересно.... В версии Arduino 1.6.13 не проходит проверку мой скетч, загруженный сейчас в холодильник! А в 1.7.8 проходит!? Не понял...

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

Короче, говорит, что в этой строке 

(ReleTenState==LOW && (currentMillis - prevMillis) > OnTimeTen)

comparison signed and unsigned integer expressions wsign compare  сравнение знаковые и беззнаковые целые выражения

arduino328
Offline
Зарегистрирован: 01.09.2016

Dimmm пишет:

Короче, говорит, что в этой строке 

(ReleTenState==LOW && (currentMillis - prevMillis) > OnTimeTen)

comparison signed and unsigned integer expressions wsign compare  сравнение знаковые и беззнаковые целые выражения

Строчка наверно должна быть такой:

((ReleTenState == LOW) && ((currentMillis - prevMillis) > OnTimeTen))

 

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

 и так тоже пробовал

 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016
(ReleTenState == LOW && currentMillis - prevMillis > OnTimeTen)

и нефиг сравнивать знаковые и беззнаковые unsigned long prevMillis long OnTimeTen

arduino328
Offline
Зарегистрирован: 01.09.2016

Dimmm пишет:

Короче, говорит, что в этой строке 

(ReleTenState==LOW && (currentMillis - prevMillis) > OnTimeTen)

comparison signed and unsigned integer expressions wsign compare  сравнение знаковые и беззнаковые целые выражения

Перевод кодовой строки:
ReleTenState==LOW И (currentMillis - prevMillis) БОЛЬШЕ OnTimeTen

Оператор И имеет больший приоритет чем БОЛЬШЕ.

Dimmm
Dimmm аватар
Offline
Зарегистрирован: 07.11.2016

arduino328 пишет:

Dimmm пишет:

Короче, говорит, что в этой строке 

(ReleTenState==LOW && (currentMillis - prevMillis) > OnTimeTen)

comparison signed and unsigned integer expressions wsign compare  сравнение знаковые и беззнаковые целые выражения

Перевод кодовой строки:
ReleTenState==LOW И (currentMillis - prevMillis) БОЛЬШЕ OnTimeTen

Оператор И имеет больший приоритет чем БОЛЬШЕ.

а, да, есть логика. Скобки понятны.