회원가입 ID/PW 찾기
AA

안녕하세요 AVR 입문자 입니다. 

다름이 아니라 제가 작은 키트를 작동하려고 하는데요.(ATMEGA32, 모터와 거리센서 3개(왼쪽,정면,오른쪽))

작동하려고 하는 것은 거리센서 (왼쪽,정면,오른쪽)에 신호가 가면 모터가 그에 맞게 동작을 하는 것입니다. 

문제는 제가 구현하고자 하는 대로 되지 않는 것에 속하는대요.

만약 정면 거리센서에 신호가 가면 멈추었다가 방향을 어느정도(90도)턴을 한다던가 하는 구현이 재대로 되지 않습니다. 지금은 센서에 신호가 가면  반응(왼쪽턴, 오른쪽 턴)을 하고 신호가 없으면 다시 전진하는 식으로 되어 있는데요

간단한 딜레이 함수를 소스에 구현하여 중간에 넣어 보았지만 계속 신호가 들어 와야지만 동작을 실행 합니다...(신호가 없으면 바로 직진.) 

신호를 한번 주면 그에 맞는 동작을 하고 다시 원래의 동작을 하는 방법이 궁금함니다. 거리센서인 만큼 거리에 따라서 전압이 달라지는데 거리에 따라서 그에 맞게 동작을 맞추어 보고 싶은데 ㅠ 손도 못대고 있는 상황인데요. 어디 부터 다시 손 봐야 하나요?

고수님들 도와주시면 감사하겠습니다.


제가 열심히 만든 소스 입니다. 고수님들의 많은 조언 부탁드립니다.

#include <inttypes.h>

#include <avr/io.h>

#include <avr/iom32.h>

#include <avr/interrupt.h>

#ifndef BV

#define BV _BV

#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))

#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

#endif //#endif define end


static int speedMotor0 = 0;  // always > 0

static int speedMotor1 = 0;  // always > 0


void ledOn(int i);

void ledOff(int i);

void delay(int temp);


void adc_port_init(void);


inline int abs(int a) ;

void motor(int i, int speed);

void motors(int motor0, int motor1);

void motorsOff();


unsigned char startConvertion(unsigned char ch);

unsigned char readConvertData(void);


void ADC_proce0(volatile unsigned char i);

void ADC_proce1(volatile unsigned char i);

void ADC_proce2(volatile unsigned char i);

void ADC_proce3(volatile unsigned char i);

void ADC_proce4(volatile unsigned char i);

bool button(int i);


int main()

{

adc_port_init();

while(1){

if(startConvertion(0)||startConvertion(1)||startConvertion(2)){

ADC_proce0(startConvertion(0)); // Left sensor Converting

ADC_proce1(startConvertion(1)); // mid sensor Converting

ADC_proce2(startConvertion(2)); // right sensor Converting

}

else if(startConvertion(0) && startConvertion(1)){

ADC_proce3(startConvertion(0)); // Left sensor Converting

}

else if(startConvertion(1) && startConvertion(2)){

ADC_proce4(startConvertion(2)); // right sensor Converting

}

}

}


bool button(int i)

{

  if ((i<0) || (i>3)) return false;

  return ( (PINA & (16<<i)) == 0);

}


void ledOn(int i)

{

  if ((i<0) || (i>1)) return;

  cbi(PORTC, i+6); // clear bit -> LED on

}


void ledOff(int i)

{

  if ((i<0) || (i>1)) return;

  sbi(PORTC, i+6); // set bit -> LED off

}


void delay(int temp)

{

while(temp--);

}


inline int abs(int a) 

{

  if (a>=0) return a;

  else return -a;

}


void adc_port_init(void)

{

 PORTA = 0x00;

 DDRA  = 0x00;

 ADCSRA = 0x00; //disable adc

 ADMUX = 0x00; //select adc input 0

 ACSR  = 0x80;

 ADCSRA = 0xC6;

}


unsigned char startConvertion(unsigned char ch) //ADC start

{

ADCSRA = ADCSRA & 0x0f;

ADMUX = 0x60 | (ch & 0x0f);

ADCSRA = ADCSRA | 0xc0;

return ADCSRA;

}


unsigned char readConvertData(void)

{

volatile unsigned char temp;

while((ADCSRA & 0x10)==0);

ADCSRA = ADCSRA | 0x10; 

temp = ADCL;

temp = ADCH;

ADCSRA = ADCSRA | 0x10; 

return temp; 

}


void ADC_proce0(volatile unsigned char i){


int ADC_data;

ADC_data=readConvertData();


if(ADC_data>100)

{

motors(255,-0);

ledOn(1);

ledOff(0);

delay(3000);

}

else{

ledOff(1);

motors(255,-255);

}

}


void ADC_proce1(volatile unsigned char i){


int ADC_data;

ADC_data=readConvertData();


if(ADC_data>100)

{

motors(0,0);

delay(3000);

ledOn(1);

ledOn(0);

}

else{

ledOff(1);

ledOff(0);

motors(255,-255);

}

}

void ADC_proce2(volatile unsigned char i){


int ADC_data;

ADC_data=readConvertData();


if(ADC_data>100)

{

motors(0,-255);

ledOn(0);

ledOff(1);

delay(3000);

}

else{

ledOff(0);

motors(255,-255);

}

}


void ADC_proce3(volatile unsigned char i){


int ADC_data;


ADC_data=readConvertData();

if(ADC_data>100)

{

motors(255,0);

ledOn(1);

ledOff(0);

delay(3000);

}

else{

ledOff(1);

motors(255,-255);

}

}

void ADC_proce4(volatile unsigned char i){


int ADC_data;

ADC_data=readConvertData();

if(ADC_data>100)

{

motors(0,-255);

ledOn(1);

ledOff(0);

delay(3000);

}

else{

ledOff(1);

motors(255,-255);

}

}


void motor(int i, int speed)

{

  if ((i<0) || (i>1)) return;


  if (i==0) {

    speedMotor0 = abs(speed);

    if (speed==0) {

      cbi(PORTC, 4);   // input1  = 0

      cbi(PORTC, 5);   // input2  = 0

    }

    else if (speed>0) {

      sbi(PORTC, 5);   // input1  = 1

      cbi(PORTC, 4);   // input2  = 0


    }

    else {

      cbi(PORTC, 5);   // input1  = 0

      sbi(PORTC, 4);   // input2  = 1

    }

  }


  if (i==1) {

    speedMotor1 = abs(speed);

    if (speed==0) {

      cbi(PORTC, 2);   // input3  = 0

      cbi(PORTC, 3);   // input4  = 0

    }

    else if (speed>0){

      sbi(PORTC, 3);   // input3  = 1

      cbi(PORTC, 2);   // input4  = 0

    }

    else {

      cbi(PORTC, 3);   // input3  = 0

      sbi(PORTC, 2);   // input4  = 1    

    }

  }

}


void motors(int motor0, int motor1)

{

  motor(0, motor0);

  motor(1, motor1);

}


void motorsOff()

{

  motor(0, 0);

  motor(1, 0);

}


댓글 0

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
2307 자유주제 HOT버그신고2 견우7 16385 2011.10.18
2306 자유주제 HOT스마트폰을 쓰는 한 방법9 견우7 15936 2011.10.17
2305 자유주제 HOTMCU를 공부하며 아쉬운 점...3 견우7 17945 2011.10.17
2304 자유주제 HOT직렬화(serializing )란 뭐죠?6 견우7 16227 2011.10.11
2303 자유주제 HOT버그신고 : 내용 유1 견우7 14657 2011.10.05
2302 자유주제 HOT건의합니다.3 Interrupter 14156 2011.09.28
2301 자유주제 HOT스마트그리드 기술로 로봇이 우리집을 관리해준다!4 일렉트로닉 16493 2011.09.27
2300 자유주제 HOT버그신고 : 내용 유1 견우7 15188 2011.09.27
2299 자유주제 HOT로봇청소기에 관련해 문의 드리고 싶어요1 쭈쭈맘 15182 2011.09.25
2298 자유주제 HOT윈도우 7 홈프리미엄에서 쿼터스 ll 설치안되시는 분 있으신가요?1 안녕하세요. 7813 2011.09.17
2297 자유주제 HOT사람이 죽으라는 법은 없나봅니다3 혈청 16653 2011.08.25
2296 자유주제 HOTgx680 노트북 샀어염3 빛나는 영혼 8667 2011.08.12
2295 자유주제 HOT제주도 여행기....2 꼬마최민수 16873 2011.08.10
2294 자유주제 HOT안녕하세요 아둘란 16895 2011.08.08
2293 자유주제 HOT샘플 SMT 가능한 업체를 찾고 있습니다.2 메갈로돈 18174 2011.08.02
2292 자유주제 HOT[버그신고] 내용 有1 우띠 17765 2011.07.28
2291 자유주제 HOT제어 공부를 같이 해볼 수 없을까요??2 류야 12977 2011.07.25
2290 자유주제 HOT호주에서 회로 설계하시는 분 계신가요?1 메갈로돈 21371 2011.07.21
2289 자유주제 HOTDC-DC IC 관련 입니다. 무적쫑 15222 2011.06.22
2288 자유주제 HOT고소왕ㅋ5 데이비스깽 3234 2011.06.18
Prev 1 ... 15 16 17 18 19 20 21 22 23 24 ... 135 Next
  • 사랑하며 가난한 것이 애정 없는 부유함보다 훨씬 낫다.
    - L.모리스
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.