회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
16 구인구직 HOT(주)소프트라인 - 응용/웹프로그래머 채용 쭈니닷 5125 2012.06.26
15 구인구직 HOT시앤지원 - 웹 프로그램 개발 및 문서암호화 솔루션 인스톨 및 이행 쭈니닷 5221 2012.06.22
14 구인구직 HOT사람인 - 월급 1000만원 프로젝트, 프로그래머 모집 쭈니닷 5277 2012.06.18
13 구인구직 HOT(주)엑스큐어넷 - 소프트웨어 개발자(프로그래머) 채용 쭈니닷 5089 2012.06.12
12 구인구직 HOT(주)시뮬라인 - 기술개발본부 소프트웨어 팀 신입/경력사원 채용공고 쭈니닷 5668 2012.06.11
11 구인구직 HOT㈜엔써즈 - 시스템엔지니어 신입사원 모집 쭈니닷 6785 2012.06.08
10 구인구직 HOT㈜고우넷 - unix 엔지니어 채용 콘마개마 4093 2012.06.05
9 구인구직 HOT전액무료 자바(java)기반 하이브리드 프레임웍개발 안드로이드 개발교육과정 cocoa13 3779 2012.05.14
8 구인구직 HOT[교육부담 0%] 이공계 전액무료 하이브리드 앱 개발자 취업확정자 교육연수과정 cocoa13 5273 2012.05.01
7 구인구직 HOT[전액무료교육] 구로디지털 단지 자바개발 업체 채용확정자 취업교육” 안드로이드 개발 및 프로젝트 과정 cocoa13 4082 2012.04.30
6 구인구직 HOT[전액무료과정] 웹디자이너 양성교육 비주얼 컨텐츠 디자인 과정 안내 cocoa13 4824 2012.04.26
5 구인구직 HOTPOWER설계 및 하드웨어 경력자 찾아요. 박우종 5121 2012.03.07
4 구인구직 HOT회로수리 및 수땜, ECO작업등 필요하시면 연락주세요. 세윤파파 9082 2012.01.27
3 구인구직 HOT실력있는 펌웨어 엔지니어를 모집합니다. JamesHan 8454 2011.12.27
2 구인구직 HOT(주)로벤 연구소에서 연구원을 모집합니다. maddog 6776 2011.11.10
1 구인구직 HOT[급구] PCB 설계 경력자 & H/W 및 펌웨어 엔지니어 모집 용가리3 13873 2010.12.23
Prev 1 ... 5 6 7 8 9 10 11 12 13 14 Next
  • 사랑하고 나서 잃는 것은 전혀 사랑하지 않았던 것보다 더 낫다.
    - 테니슨
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.