Если 70 градусов, то датчики не читаются. Проверяй подключение и инициализацию пинов.
Если 70 градусов, то датчики не читаются. Проверяй подключение и инициализацию пинов.
Комнатную температуру нормально показывает.
Датчик изолирован? Ищи причину по которой датчик не читается.
хороший модем должен качать пиво!
Мой проект
Итак схема.
A0 - Датчик уровня топлива
А1 - Датчик температуры
А4 - Герконы (повышение - понижение скорости)
А5 - К замку зажигания клемма +15
D4 - Минус датчика нейтрали для синхронизации канала (А4)
D5 - Контроль работы вентилятора охлаждения
D6 - Контроль работы топливной помпы
D7,8 - Принудительное включение вентилятора охлаждения и помпы (частота включения 1Гц)
D10 - Датчик температуры наружного воздуха
D11 - Кнопка для меню
D12 - Светодиод не исправности
D13 - Датчик скорости
SCL, SDA - правильно ?
Подскажите как сделать таймер например для светодиода (что бы мигал с интервалом 5/5 сенунд) используя millis(), всю голову сломал.
Да спасибо, так уже пробовал.
У меня датчик температуры считывает показания и при достижении пограничной температуры срабатывания, реле (которым управляет датчик) начинает дребезжать, тк показания не успевают перевалить за пограничную температуру.
Пришлось сделать не симметричный таймер 100мс/5000мс.
У меня так получилось:
PHP код:
int ledPin = 3;
unsigned long currentTime;
unsigned long loopTime;
int TEMP_CURENT;
int Timer = LOW;
void setup()
{
pinMode(ledPin, OUTPUT);
}
int _Timer(int l, int h)
{
currentTime = millis();
if(currentTime >= (loopTime + l) && (Timer != HIGH)){ //
digitalWrite(ledPin, LOW);
loopTime = currentTime;
Timer = HIGH;
}
if(currentTime >= (loopTime + h) && (Timer = HIGH)){ //
digitalWrite(ledPin, HIGH);
loopTime = currentTime;
Timer = LOW;
Serial.println(TEMP_CURENT);
return 1;
}
}
void loop()
{
if (_Timer(100, 5000)) TEMP_CURENT = analogRead(0);
}
Последний раз редактировалось Oleg_33; 07.01.2015 в 17:38.
Сегодня написал первые строки ... жду дисплей.
Выслушаю любую критику по поводу кода кстати он рабочий.
PHP код:
// Аналоговые пины
const int ANALOG_TEMP_PIN = 0;
//
// Цифровые пины
const int DIGITAL_RELAY_PIN = 3;
const int DIGITAL_LED_PIN = 13;
//
// Глобальные переменные
int RELAY_CURENT; // Текущее состояние реле
int TEMP_CURENT_ANALOG; // Показания с АЦП
int TIMER_STOP = false; // ?
//
//_Timer()
int Timer = LOW;
unsigned long currentTime;
unsigned long loopTime;
//
//int TEMP_ARRAY[4] = {88,130,150}; // напряжение ацп [отключение, включение, перегрев]
// Константы для вентилятора охлаждения
const int LOW_COLING_FAN = 2;
const int HIGH_COLING_FAN = 3;
const int ERROR_COLING_FAN = 4;
int _Timer(int l, int h) // Возвращет 5 после времени 'l' и 10 после времени 'h', если 'l' и 'h' = -1 то останавливаем таймер
{
/* if (l == -1 && h == -1)
{
TIMER_STOP = true;
return -1;
}
else if (TIMER_STOP = true) return -1; // не выполняем таймер
*/
currentTime = millis();
if(currentTime >= (loopTime + l) && (Timer != HIGH)){ //
loopTime = currentTime;
Timer = HIGH;
//digitalWrite(DIGITAL_LED_PIN, LOW) ;
return 5;
}
if(currentTime >= (loopTime + h) && (Timer = HIGH)){ //
loopTime = currentTime;
Timer = LOW;
//digitalWrite(DIGITAL_LED_PIN, HIGH);
return 10;
}
}
int _TempMonitoring(int adc) // Считываем ацп указанного вывода
{
if (adc > 150 )
{
_RelayColingFan(ERROR_COLING_FAN); // Перегрев
return ERROR_COLING_FAN;
}
if (adc > 130)
{
_RelayColingFan(HIGH_COLING_FAN); // Включаем
return HIGH_COLING_FAN;
}
if (adc < 80)
{
_RelayColingFan(LOW_COLING_FAN); // Выключаем
return LOW_COLING_FAN;
}
}
void _RelayColingFan(int atr)
{
switch (atr)
{
case LOW_COLING_FAN: // 80C
digitalWrite(DIGITAL_RELAY_PIN, HIGH); // Выключено
RELAY_CURENT = digitalRead(DIGITAL_RELAY_PIN);
break;
case HIGH_COLING_FAN: // 100C
digitalWrite(DIGITAL_RELAY_PIN, LOW); // Включено
RELAY_CURENT = digitalRead(DIGITAL_RELAY_PIN);
break;
case ERROR_COLING_FAN: // Перегрев
break;
default: //
//
break;
}
}
void setup()
{
Serial.begin(9600);
pinMode(DIGITAL_RELAY_PIN, OUTPUT);
}
void loop()
{
if (_Timer(100, 5000) == 10)
{
TEMP_CURENT_ANALOG = analogRead(ANALOG_TEMP_PIN); // Считываем температуру каждые 5 сек
Serial.println(TEMP_CURENT_ANALOG);
}
_TempMonitoring(TEMP_CURENT_ANALOG);
}
Последний раз редактировалось Oleg_33; 07.01.2015 в 17:41.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)