Страница 35 из 39
Re: визуализация данных
Добавлено: Вс июл 22, 2018 12:01 pm
eGorka
serghei писал(а): ↑Вс июл 22, 2018 10:48 am
А для начала понять , что там стоит RTOS , и программировать надо с учетом этого.
Код: Выделить всё
void setup() {
Serial.begin(112500);
Serial.println();
xTaskCreatePinnedToCore(Task0, "Task0", 1024, NULL, 1, NULL, 0);
xTaskCreatePinnedToCore(Task1, "Task1", 1024, NULL, 1, NULL, 1);
}
void loop() {
Serial.println(" loopTask - задача выполняется на core1 каждые 45 секунд");
vTaskDelay(45000/portTICK_PERIOD_MS);
}
void Task0(void * parameter){
for(;;){
Serial.println(" Task0 - задача выполняется на core0 каждые 30 секунд");
vTaskDelay(30000/portTICK_PERIOD_MS);
}
vTaskDelete(NULL);
}
void Task1(void * parameter){
for(;;){
Serial.println(" Task1 - задача выполняется на core1 каждую минуту");
vTaskDelay(60000/portTICK_PERIOD_MS);
}
vTaskDelete(NULL);
}
Re: визуализация данных
Добавлено: Вс окт 21, 2018 2:40 am
alexsis_76
Добрался таки доделать термостат, serghei у тебя работало?
Re: визуализация данных
Добавлено: Вс окт 21, 2018 7:58 am
serghei
Да, решил. Алгоритм работает четко для 4-х реле.
Код: Выделить всё
#define relePin 04
#define rele1Pin 26
#define rele2Pin 25
#define rele3Pin 32
void testInit(){
pinMode(relePin, OUTPUT);
digitalWrite(relePin, LOW);
pinMode(rele1Pin, OUTPUT);
digitalWrite(relePin, LOW);
pinMode(rele2Pin, OUTPUT);
digitalWrite(relePin, LOW);
pinMode(rele3Pin, OUTPUT);
digitalWrite(relePin, LOW);
}
//==============
void testRele(){ // рабочая функция
if(!releSt && current_temp[3] > 40.0){
// if(!releSt && analogRead(35) > 2000.0){
digitalWrite(relePin, HIGH);
timeStamp();
Serial.println(" Rele \"ON\"");
releSt = 1;
MessText = "Реле 1 включено";
MessLoger(String (MessText), String(Info));
}
if(releSt && current_temp[3] < 35.0){
// if(releSt && analogRead(35) < 1500.0){
digitalWrite(relePin, LOW);
timeStamp();
Serial.println(" Rele \"OFF\"");
releSt = 0;
MessText = "Реле 1 выключено";
MessLoger(String (MessText), String(Info));
}
}
//========================================
void testRele1(){ // рабочая функция
if(!rele1St && current_temp[3] > 30.0){
// if(!releSt && analogRead(35) > 2000.0){
digitalWrite(rele1Pin, HIGH);
timeStamp();
Serial.println(" Rele_1 \"ON\"");
rele1St = 1;
MessText = "Реле 2 включено";
MessLoger(String (MessText), String(Info));
}
if(rele1St && current_temp[3] < 28.0){
// if(releSt && analogRead(35) < 1500.0){
digitalWrite(rele1Pin, LOW);
timeStamp();
Serial.println(" Rele_1 \"OFF\"");
rele1St = 0;
MessText = "Реле 2 выключено";
MessLoger(String (MessText), String(Info));
}
}
void testRele2(){ // рабочая функция
if(!rele2St && current_temp[3] > 25.0){
// if(!releSt && analogRead(35) > 2000.0){
digitalWrite(rele2Pin, HIGH);
timeStamp();
Serial.println(" Rele_2 \"ON\"");
rele2St = 1;
MessText = "Реле 3 включено";
MessLoger(String (MessText), String(Info));
}
if(rele2St && current_temp[3] < 22.0){
// if(releSt && analogRead(35) < 1500.0){
digitalWrite(rele2Pin, LOW);
timeStamp();
Serial.println(" Rele_2 \"OFF\"");
rele2St = 0;
MessText = "Реле 3 выключено";
MessLoger(String (MessText), String(Info));
}
}
void testRele3(){ // рабочая функция
if(!rele3St && current_temp[3] > 20.0){
// if(!releSt && analogRead(35) > 2000.0){
digitalWrite(rele3Pin, HIGH);
timeStamp();
Serial.println(" Rele_3 \"ON\"");
rele3St = 1;
MessText = "Реле 4 включено";
MessLoger(String (MessText), String(Info));
}
if(rele3St && current_temp[3] < 17.0){
// if(releSt && analogRead(35) < 1500.0){
digitalWrite(rele3Pin, LOW);
timeStamp();
Serial.println(" Rele_3 \"OFF\"");
rele3St = 0;
MessText = "Реле 4 выключено";
MessLoger(String (MessText), String(Info));
}
}
Единственная проблема - это всё замечательно для идеальных условий. То есть сервер запущен и работает. При старте ( 10 секунд) температура появится спустя время , указанное во вкладке температуры. То есть через 5 минут. Это очень не правильно. Хотелось бы последнюю температуру забрать из файла логирования. Возможно ли такое ? То есть при старте системы прочитать фаил SD карты.
С визуализацией то же есть один момент. Состояние реле - 0 и 1. Можно это передать на страницу Graf , но масштаб будет мелкий. Единицу надо привести к среднему значению температуры , то есть к 30 единицам. Тогда и на графике можно нормально увидеть момент включения.
Вот тут опять уперся в любительское решение. Профессионально так делать конечно же нельзя.
- Rele_32.jpg (187.31 КБ) 4560 просмотров
Re: визуализация данных
Добавлено: Вс окт 21, 2018 8:09 am
alexsis_76
Я имел ввиду тот что включается по времени
Re: визуализация данных
Добавлено: Вс окт 21, 2018 8:15 am
alexsis_76
этот
- Безымянный.jpg (326.72 КБ) 4554 просмотра
Re: визуализация данных
Добавлено: Вс окт 21, 2018 8:20 am
serghei
По времени и со страницы то же все хорошо было изначально. По времени правда только одно включение и выключение в сутки. Можно попробовать размножить , но боюсь запутаться.... Сейчас Дуя на ремонте , страницу не могу выдать. Но код как изначально у
ser009Код: Выделить всё
/*
Modul Algoritm
part of Arduino Mega Server project
*/
/* значение по которому ведется регулирование
в примере это значени будет задаваться вручную с web
*/
// mode режим
// 0 - ручной
// 1 - по значению датчика
// 2 - по времени
// 3 - not defined and not contXstatus
byte rele1mode = 0;
/* значения максимальных и минимальых значений для включения
и выключения RELE1
*/
int value_on = 0;
int value_off = 100;
int value_web = 0;
/* время включения по умолчанию /часы, минуты/
* при необходимости можно добавить секунды
*/
int r1hour_on = 19; int r1minute_on = 00;
int r1hour_off = 19; int r1minute_off = 15;
void Regul(){
if (rele1state == 0&&rele1mode == 0&&value_web == 1){
rele1state = 1;
MessText = "Выход D32. Включение с Веб";
MessLoger(String (MessText), String (Info));
// #ifdef SERIAL_PRINT
Serial.println("Out D32. command ON to Web");
// #endif
} else{};
if (rele1state == 1&&rele1mode == 0&&value_web == 0){
rele1state = 0;
MessText = "Выход D32. Отключение с Веб";
MessLoger(String (MessText), String (Info));
// #ifdef SERIAL_PRINT
Serial.println("Out D32. command ON to Web");
// #endif
} else{};
if (rele1state == 0&&rele1mode == 2&&r1hour_on == int (hour())&&r1minute_on == int (minute())){
rele1state = 1;
MessText = "Выход D32. Включение по времени";
MessLoger(String (MessText), String (Info));
// #ifdef SERIAL_PRINT
Serial.println("Out D32. command ON to time");
// #endif
} else{};
if (rele1state == 1&&rele1mode == 2&&r1hour_off == int (hour())&&r1minute_off == int (minute())){
rele1state = 0;
MessText = "Выход D32. Отключение по времени";
MessLoger(String (MessText), String (Info));
// #ifdef SERIAL_PRINT
Serial.println("Out D32. command OFF to time");
// #endif
} else {};
С последним else сомнения есть. А вот этой страницы нет. Давай выкладывай !! ( что то тогда делал , но не до конца).
Re: визуализация данных
Добавлено: Вс окт 21, 2018 8:21 am
alexsis_76
именно с этой страницы
т е ты создаешь время и задаешь действие
Re: визуализация данных
Добавлено: Вс окт 21, 2018 8:23 am
alexsis_76
охренеть
ты ее не видел?
Re: визуализация данных
Добавлено: Вс окт 21, 2018 8:29 am
serghei
Видел и даже вставил к себе. Но что то там пошло не так. Кажется там была заготовка. Сейчас перебрался на нормальный комп и собираю все исходники во всех компов в один..... Выложи еще раз, пожалуйста.
Re: визуализация данных
Добавлено: Вс окт 21, 2018 8:32 am
alexsis_76
нужно создать таймеры
там вверху и таблица заполнится
на каждый день можно создать по три таймера