Я делаю некоторую систему, которая измеряет окружающий свет и включает или выключает свет. Для этого я должен использовать микроконтроллер Atmega. Измерение освещенности выполняется с помощью LDR. LDR всегда выводит аналоговое значение, и мне приходится преобразовывать его в цифровое значение с помощью функции АЦП AVR. У меня есть только небольшие познания в программировании микроконтроллеров. Я пишу код, но понятия не имею, как включить релейный переключатель с помощью AVR.
это мой код
#ifndef F_CPU
#define F_CPU 8000000UL
#endif
#include <avr/io.h>
#include <stdlib.h>
#include <avr/interrupt.h>
int main(void)
{
ADCSRA |= 1<<ADPS2;
ADMUX |= 1<<ADLAR;
ADCSRA |= 1<<ADIE;
ADCSRA |= 1<<ADEN;
sei();
ADCSRA |= 1<<ADSC;
while(1)
{
}
}
ISR(ADC_vect)
{
char adcres[4];
itoa (ADCH, adcres, 10);
PORTC=0x01; // Turn ON relay switch
ADCSRA |= 1<<ADSC;
}
Я хочу измерить аналоговые значения с помощью подключенного LDR и преобразовать их в цифровые значения. Затем через какое-то определенное числовое реле должно включиться и
Мне нужно что-то вроде этого
lux = ldr_digital_value
if (lux > 5 )
{ PORTC=0x00; }
else
{ PORTC=0x01; }
Как я могу это сделать ?
while()
рассчитайте люкс в зависимости от оборудования и выполните сравнение для переключения порта. - person Rev   schedule 16.11.2015itoa
. Просто используйте значение напрямую. Вы, вероятно, захотите добавить гистерезис, чтобы предотвратить дребезжание реле, когда уровень освещенности пересекает пороговое значение. - person Unimportant   schedule 16.11.2015