BASIC4MCU | 질문게시판 | 초음파센서코드와 조도센서코드 합성하는 중입니다.
페이지 정보
작성자 잉뚜 작성일2022-12-02 01:00 조회1,816회 댓글4건본문
fast pwm 모드를 이용해 초음파센서 감지 시 led 밝게 감지 안할 떄는 어둡게 조절하는 코드입니다.
이 코드를 조도센서 코드와 합성하여 어두우면 led가 켜진다는 조건을 전제로 위 코드와 합성해야하는데 도무지 해결할 수가 없어서 올려봅니다. 한번만 도와주세요ㅠㅠ
int main(void)
{
unsigned int distance;
DDRB=0x10;
DDRB |=((DDRB|(1<<TRIG))&~(1<<EHCO));
while(1)
{
PORTB &= ~(1<<TRIG);
_delay_us(10);
PORTB |= (1<<TRIG);
_delay_us(10);
PORTB &= ~(1<<TRIG);
while(!(PINB & (1<<EHCO)));
TCNT0=0x00;
while(PINB & (1<<EHCO));
TCCR0=0X00;
distance = (unsigned int)(SOUND_VELOCITY * (TCNT0*4/2)/1000);
if(distance<60){
TCCR0= 0X6D;
PORTB=0x10;
OCR0=0XFF;
}
else{
TCCR0= 0X6D;
PORTB=0x10;
OCR0=0X3F;
}
}
}
조도센서
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#define CDS_70 700
unsigned short read_adc();
void show_adc_led(unsigned short data);
unsigned short read_adc()
{
unsigned char adc_low, adc_high;
unsigned short value;
ADCSRA |= 0x40;
while((ADCSRA&0x10)!=0x10);
adc_low=ADCL;
adc_high=ADCH;
value=(adc_high<<8) |adc_low;
return value;
}
void show_adc_led(unsigned short value )
{
if(value<=CDS_70) PORTB|=0x10;
else PORTB&= ~(0x10);
}
int main(void)
{
unsigned short value;
DDRB=0x10;
DDRF=0x00;
ADCSRA=0x87;
while(1)
{
ADMUX = 0x40;
value=read_adc();
show_adc_led(value);
}
댓글 4
조회수 1,816잉뚜님의 댓글
잉뚜 작성일
현재까지 진행코드입니다.
/*
* GccApplication24.c
*
* Created: 2022-12-02 오전 2:28:34
* Author : 박ㅇㅇ
*/
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#define TRIG 6
#define EHCO 7
#define SOUND_VELOCITY 340UL
#define CDS_50 550
unsigned short read_adc();
void show_adc_led(unsigned short data);
unsigned short read_adc()
{
unsigned char adc_low, adc_high;
unsigned short value;
ADCSRA |= 0x40;
while((ADCSRA&0x10)!=0x10);
adc_low=ADCL;
adc_high=ADCH;
value=(adc_high<<8) |adc_low;
return value;
}
void show_adc_led(unsigned short value )
{
if(value<=CDS_50) PORTB|=0x10;
else PORTB&= ~(0x10);
}
int main(void)
{
unsigned int distance;
unsigned short value;
DDRB=0x10;
DDRB |=((DDRB|(1<<TRIG))&~(1<<EHCO));
DDRF=0x00;
ADCSRA=0x87;
while(1)
{
ADMUX = 0x40;
value=read_adc();
show_adc_led(value);
if(value<=CDS_50){
PORTB|=0x10 ;
PORTB &= ~(1<<TRIG);
_delay_us(10);
PORTB |= (1<<TRIG);
_delay_us(10);
PORTB &= ~(1<<TRIG);
while(!(PINB & (1<<EHCO)));
TCNT0=0x00;
while(PINB & (1<<EHCO));
TCCR0=0X00;
distance = (unsigned int)(SOUND_VELOCITY * (TCNT0*4/2)/1000);
if(distance<60){
TCCR0= 0X6D;
PORTB=0x10;
OCR0=0XFF;
}
else{
TCCR0= 0X6D;
PORTB=0x10;
OCR0=0X3F;
}
}
else PORTB&= ~(0x10);
}
}
master님의 댓글
master 작성일
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
//
#define CDS_70 700
//
int main(void){
int value;
DDRB=0x10; TCCR0=0x6D;
ADMUX=0x40; ADCSRA=0xE7;
while(1){
_delay_ms(1);
value=ADCW; // value=ADC; 버전에 따라서 변경
if(value<=CDS_70){ OCR0=0xFF; }
else { OCR0=0x3F; }
}
}
잉뚜님의 댓글
잉뚜 작성일초음파센서코드는 메인함수안에 넣으면 될까요?
master님의 댓글
master
지문에 초음파센서를 어떻게 한다는 언급이 없는데 왜 넣어야 하는 거죠?