Здравствуйте необходимо к имеющемуся коду добавить свечение RGB светодиода в зависимости при скорости потока воды менее 2,5 л/м горит красным, от 2,5 до 3,5 зеленый, больше 3,5 л/м опять красный. Как это добавить к имеющемуся коду
//
uint32_t varTime; // Объявляем переменную для хранения времени последнего расчёта.
float varQ; // Объявляем переменную для хранения рассчитанной скорости потока воды (л/с).
float varV; // Объявляем переменную для хранения рассчитанного объема воды (л).
volatile uint16_t varF; // Объявляем переменную для хранения частоты импульсов (Гц).
//
void funCountInt(){varF++;} // Определяем функцию, которая будет приращать частоту импульсов.
//
void setup(){ //
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта.
pinMode(pinSensor, INPUT); // Конфигурируем вывод к которому подключён датчик, как вход.
uint8_t intSensor = digitalPinToInterrupt(pinSensor); // Определяем номер прерывания который использует вывод pinSensor.
attachInterrupt(intSensor, funCountInt, RISING); // Назначаем функцию funCountInt как обработчик прерываний intSensor при каждом выполнении условия RISING - переход от 0 к 1.
if(intSensor<0){Serial.print("Указан вывод без EXT INT");} // Выводим сообщение о том, что датчик подключён к выводу не поддерживающему внешнее прерывание.
varTime=0; varQ=0; varV=0; varF=0; // Обнуляем все переменные.
} //
//
void loop(){ //
// Если прошла 1 секунда: //
if( (varTime+1000)<millis() || varTime>millis() ){ // Если c момента последнего расчёта прошла 1 секунда, или произошло переполнение millis то ...
// Определяем скорость и расход воды: //
varQ = (float)varF / 450.0f; // Определяем скорость потока воды л/с.
varF = 0; // Сбрасываем частоту импульсов датчика, значение этой переменной приращается по прерываниям.
varTime = millis(); // Сохраняем время последних вычислений.
varV += varQ; // Определяем объем воды л.
// Выводим рассчитанные данные: //
Serial.println((String) "Объем "+varV+"л, скорость "+(varQ*60.0f)+"л/м.");
} //
} //```
#define GRN 12 // присваиваем имя GRN для пина 12
uint8_t pinSensor = 2; // Определяем номер вывода Arduino, к которому подключён датчик расхода воды.
//
uint32_t varTime; // Объявляем переменную для хранения времени последнего расчёта.
float varQ; // Объявляем переменную для хранения рассчитанной скорости потока воды (л/с).
float varV; // Объявляем переменную для хранения рассчитанного объема воды (л).
volatile uint16_t varF; // Объявляем переменную для хранения частоты импульсов (Гц).
//
void funCountInt(){varF++;} // Определяем функцию, которая будет приращать частоту импульсов.
//
void setup(){ //
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта.
pinMode(pinSensor, INPUT); // Конфигурируем вывод к которому подключён датчик, как вход.
uint8_t intSensor = digitalPinToInterrupt(pinSensor); // Определяем номер прерывания который использует вывод pinSensor.
attachInterrupt(intSensor, funCountInt, RISING); // Назначаем функцию funCountInt как обработчик прерываний intSensor при каждом выполнении условия RISING - переход от 0 к 1.
if(intSensor<0){Serial.print("Указан вывод без EXT INT");} // Выводим сообщение о том, что датчик подключён к выводу не поддерживающему внешнее прерывание.
varTime=0; varQ=0; varV=0; varF=0; // Обнуляем все переменные.
pinMode(RED, OUTPUT); // используем Pin11 для вывода
pinMode(GRN, OUTPUT); // используем Pin12 для вывода
} //
//
void loop(){ //
// Если прошла 1 секунда: //
if( (varTime+1000)<millis() || varTime>millis() ){ // Если c момента последнего расчёта прошла 1 секунда, или произошло переполнение millis то ...
// Определяем скорость и расход воды: //
varQ = (float)varF / 450.0f; // Определяем скорость потока воды л/с.
varF = 0; // Сбрасываем частоту импульсов датчика, значение этой переменной приращается по прерываниям.
varTime = millis(); // Сохраняем время последних вычислений.
varV += varQ; // Определяем объем воды л.
// Выводим рассчитанные данные: //
Serial.println((String) "Объем "+varV+"л, скорость "+(varQ*60.0f)+"л/м.");
if( varQ <= 5){digitalWrite(RED, HIGH); // включаем красный свет
digitalWrite(GRN, LOW);
}
if( varQ >= 5.1){digitalWrite(RED, LOW); // включаем зеленый свет
digitalWrite(GRN, HIGH);
}
if( varQ <= 14.9){digitalWrite(RED, LOW); // включаем зеленый свет
digitalWrite(GRN, HIGH);
}
if( varQ >= 15){digitalWrite(RED, HIGH); // включаем красный свет
digitalWrite(GRN, LOW);
}
} } //
// Тут может выполняться ваш код ... // //```
Работает в точности так, как написали.
Чувствуется, Вы пока не очень уверенно чувствуете себя в Си.
Напишите все необходимые условия подробно по-русски и внимательно просмотрите, как при разных значениях будут работать светодиоды. Когда убедитесь, что все написано правильно, переписывайте с русского на Си.
#define RED 11 // присваиваем имя RED для пина 11
#define GRN 12 // присваиваем имя GRN для пина 12
uint8_t pinSensor = 2; // Определяем номер вывода Arduino, к которому подключён датчик расхода воды.
//
uint32_t varTime; // Объявляем переменную для хранения времени последнего расчёта.
float varQ; // Объявляем переменную для хранения рассчитанной скорости потока воды (л/с).
float varV; // Объявляем переменную для хранения рассчитанного объема воды (л).
volatile uint16_t varF; // Объявляем переменную для хранения частоты импульсов (Гц).
//
void funCountInt(){varF++;} // Определяем функцию, которая будет приращать частоту импульсов.
//
void setup(){ //
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта.
pinMode(pinSensor, INPUT); // Конфигурируем вывод к которому подключён датчик, как вход.
uint8_t intSensor = digitalPinToInterrupt(pinSensor); // Определяем номер прерывания который использует вывод pinSensor.
attachInterrupt(intSensor, funCountInt, RISING); // Назначаем функцию funCountInt как обработчик прерываний intSensor при каждом выполнении условия RISING - переход от 0 к 1.
if(intSensor<0){Serial.print("Указан вывод без EXT INT");} // Выводим сообщение о том, что датчик подключён к выводу не поддерживающему внешнее прерывание.
varTime=0; varQ=0; varV=0; varF=0; // Обнуляем все переменные.
pinMode(RED, OUTPUT); // используем Pin11 для вывода
pinMode(GRN, OUTPUT); // используем Pin12 для вывода
} //
//
void loop(){ //
// Если прошла 1 секунда: //
if( (varTime+1000)<millis() || varTime>millis() ){ // Если c момента последнего расчёта прошла 1 секунда, или произошло переполнение millis то ...
// Определяем скорость и расход воды: //
varQ = (float)varF / 450.0f; // Определяем скорость потока воды л/с.
varF = 0; // Сбрасываем частоту импульсов датчика, значение этой переменной приращается по прерываниям.
varTime = millis(); // Сохраняем время последних вычислений.
varV += varQ; // Определяем объем воды л.
// Выводим рассчитанные данные: //
Serial.println((String) "Объем "+varV+"л, скорость "+(varQ*60.0f)+"л/м.");
if( varQ <= 5.0){digitalWrite(RED, HIGH); // включаем красный свет
digitalWrite(GRN, LOW);
}
else if( varQ >= 5.1 && varQ <= 14,9){digitalWrite(RED, LOW); // включаем зеленый свет
digitalWrite(GRN, HIGH);
}
else if( varQ >= 15.0){digitalWrite(RED, HIGH); // включаем красный свет
digitalWrite(GRN, LOW);
}
} } //