Правя някаква система, която измерва светлината на околната среда и изключва или включва ключа за осветлението. За да направя това, трябва да използвам микроконтролер Atmega. Измерването на светлината се извършва с помощта на LDR. LDR винаги извежда аналогова стойност и аз трябва да я преобразувам в цифрова стойност с помощта на функцията ADC на 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