질문게시판 > 아두이노와 픽시캠 프로그래밍 질문드립니다.

TODAY1,651 TOTAL2,172,850
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 아두이노와 픽시캠 프로그래밍 질문드립니다.

페이지 정보

작성자 아야어여 작성일2019-05-28 23:40 조회6,205회 댓글2건

첨부파일

본문

	

안녕하세요


아두이노와 픽시캠 관련해서 질문드립니다.


//////////////////////////////////////////////////////////////////
  if (res&LINE_BARCODE)
  {
    buzzer.playFrequency(2000, 100, 15);
    pixy.line.barcodes->print();
    // code==0 is our left-turn sign
    if (pixy.line.barcodes->m_code==0)
      pixy.line.setNextTurn(90); // 90 degrees is a left turn 
    // code==5 is our right-turn sign
    else if (pixy.line.barcodes->m_code==5)
      pixy.line.setNextTurn(-90); // -90 is a right turn 
  }
}

//////////////////////////////////////////////////////////////////////////////

픽시캠의 예제 파일인데
0번 바코드가 인식되면 왼쪽으로 회전하고 5번 바코드가 인식되면 오른쪽으로 회전하는 코드입니다.

그런데 저는 블루투스에서 1번이 수신되면 왼쪽으로 회전하고 2번이 수신되면 오른쪽으로 회전하는 코드를 만들고 싶은데 어떻게 해야 되는지 잘 모르겠습니다.


////////////이 부분의 현재 저의 코드 인데 제가 생각한 대로 구현이 되지 않습니다.
구조체 포인터를 사용해야 할거 같은데 어떤식으로 사용해야 되는지 잘 모르겠습니다.
첨부된 파일은 픽시line의 헤더파일입니다. 





#include <SPI.h>
#include <Pixy2.h>
#include <TPixy2.h>
#include <PIDLoop.h>
#include <Pixy2Line.h>
#include <ZumoMotors.h>
#include <SoftwareSerial.h>





// Zumo speeds, maximum allowed is 400
#define ZUMO_FAST        400
#define ZUMO_SLOW        200
#define X_CENTER         (pixy.frameWidth/2)

int distance;

#define triggerPin 4
#define echoPin 6
#define ledPin 5

Pixy2 pixy;
ZumoMotors motors;

SoftwareSerial mySerial(2, 3);
PIDLoop headingLoop(5000, 0, 0, false);

void setup() 
{
  Serial.begin(115200);
  mySerial.begin(9600);
  
  Serial.print("Starting...\n");
  motors.setLeftSpeed(0);
  motors.setRightSpeed(0);

  pixy.init();
  // Turn on both lamps, upper and lower for maximum exposure
  pixy.setLamp(1, 1);
  // change to the line_tracking program.  Note, changeProg can use partial strings, so for example,
  // you can change to the line_tracking program by calling changeProg("line") instead of the whole
  // string changeProg("line_tracking")
  pixy.changeProg("line_tracking");

  // look straight and down
  pixy.setServos(500, 1000);

  pinMode(ledPin, OUTPUT);
  pinMode(triggerPin, OUTPUT); 
  pinMode(echoPin, INPUT);     


}


void loop()
{
  int8_t res;
  int32_t error; 
  int left, right;
  char buf[96];
  char code;

  
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  distance = pulseIn(echoPin, HIGH) / 58;

  
  // Get latest data from Pixy, including main vector, new intersections and new barcodes.
  res = pixy.line.getMainFeatures();

 if(mySerial.available()){
  code=(mySerial.read());
  if(code == '1' or '2' or '3' or '0') {
    digitalWrite(ledPin, HIGH);
    delay(3000);
    digitalWrite(ledPin,LOW);
    }
 }
 
 
  // If error or nothing detected, stop motors
  if (res<=0 or distance < 10) 
  {
    motors.setLeftSpeed(0);
    motors.setRightSpeed(0);
    Serial.print("stop ");
    Serial.println(res);
    return;
  }

  // We found the vector...
  if (res&LINE_VECTOR) //
  {
     // Calculate heading error with respect

// the part of the vector we're heading toward.
    error = (int32_t)pixy.line.vectors->m_x1 - (int32_t)X_CENTER;

    pixy.line.vectors->print();

    // Perform PID calcs on heading error.
    headingLoop.update(error);

    // separate heading into left and right wheel velocities.
    left = headingLoop.m_command;
    right = -headingLoop.m_command;

    // If vector is heading away from us (arrow pointing up), things are normal.
    if (pixy.line.vectors->m_y0 > pixy.line.vectors->m_y1)
    {
      // ... but slow down a little if intersection is present, so we don't miss it.
      if (pixy.line.vectors->m_flags&LINE_FLAG_INTERSECTION_PRESENT)
      {
        left += ZUMO_SLOW;
        right += ZUMO_SLOW;
      }
      else // otherwise, pedal to the metal!
      {
        left += ZUMO_FAST;
        right += ZUMO_FAST;
      }    
    }
    else  // If the vector is pointing down, or down-ish, we need to go backwards to follow.
    {
      left -= ZUMO_SLOW;
      right -= ZUMO_SLOW;  
    } 
    motors.setLeftSpeed(left);
    motors.setRightSpeed(right);
  }

  

  // If intersection, do nothing (we've already set the turn), but acknowledge with a beep.
  if (res&LINE_INTERSECTION)
  {
     if (code == 3)      {
      pixy.line.setNextTurn(45);
       pixy.line.intersections->print();
       }  // blue    90 degrees is a left turn 
     else if (code == 1) {
      pixy.line.setNextTurn(-45);
       pixy.line.intersections->print();
       } // red    -90 is a right turn
     else if (code == 2) {
      pixy.line.setNextTurn(0);
       pixy.line.intersections->print();
       }   // green    0 is a stat
     else if (code == 0) // stop
  { 
    motors.setLeftSpeed(0);
    motors.setRightSpeed(0);
    Serial.print("stop ");
    Serial.println(res);
    return;
   
      }
    }
  } 
//////////////////////////////////////////////////    
 이 부분은 픽시캠 사이트에서 가져온 포인터 구조체 입니다.

여기서 어떤 걸 써야 할지 잘 모르겠습니다.


void print ()

이것을 호출하면 교차로 정보가 콘솔에 인쇄됩니다.

uint8_t m_x

이 변수는 교차점의 x 위치를 포함합니다. 값의 범위는 0에서 frameWidth (79) 사이 입니다.

uint8_t m_y

이 변수는 교차점의 y 위치를 포함합니다. 값의 범위는 0에서 frameHeight (52) 사이 입니다.

uint8_t m_n

이 변수는 교집합 및 m_intLines 배열 에있는 줄 수 (분기)를 포함합니다 .

IntersectionLine m_intLines []

이 배열에는 교차 부분의 선이 포함됩니다.

IntersectionLine 구조체 내부 :

uint8_t m_index

이 변수는 행의 추적 색인을 포함합니다.

int16_t m_angle

이 변수는 선 각도를 각도로 포함합니다.

uint8_t m_code

이 변수는 코드 값을 포함하며 0에서 15 사이의 값을 가질 수 있습니다.

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 2

조회수 6,205

master님의 댓글

master 작성일

블루투스를 리모콘으로 제어하고 싶다는 것이죠?
픽시캠과 블루투스 두가지로 제어 할 때에는 동시에 사용하면 안됩니다.

픽시캠은 매 루프마다 실행되기 때문에
블루투스로 제어 하더라도 다음 루프에서 픽시캠제어로 바로 바뀌기 때문에 블루투스 제어가 먹히질 않습니다.

오토와 매뉴얼 두가지 모드를 사용하시고
오토일 때는 픽시캠으로 제어하고
매뉴얼일 때는 블루투스로 제어하도록 해보세요

블루투스 명령어로 'A' 가 전달되면 AUTO모드로 픽시캠을 사용한 자동주행
그 외의 명령어는 매뉴얼 모드로서 블루투스가 지령한 명령을 수행합니다.
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=8952
이 글 참고하세요

연주미님의 댓글

연주미 작성일

죄송한데 예제파일 갖고계신가요??

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 9687
공지 사이트 이용 안내댓글[24] master 17-10-29 29802
질문 atmega128 키패드 입력 오류에 대하여 질문 있습니다.댓글[2] 새글 마프하나 16:07 21
질문 초음파센싱을 통한 리니어벨트 (스텝모터사용) 조건문댓글[1] 새글 아두이노대학 15:01 16
질문 아트메가128/ srf05 초음파센서를 이용한 타이머 인터럽트 질문입니다 새글 아트메가넘어려워 14:10 18
답변 답변글 답변 : 아트메가128/ srf05 초음파센서를 이용한 타이머 인터럽트 질문입니다 새글 master 14:56 15
질문 atmega128에서 스위치1개는LED, 스위치 1개는 세그먼트의 동작하게 하려는데.. 새글 aasdw 06:28 33
답변 답변글 답변 : atmega128에서 스위치1개는LED, 스위치 1개는 세그먼트의 동작하게 하려는데..댓글[1] 새글 master 14:09 22
질문 Atmega128 블루투스 오류 질문 새글 yhj2644 01:35 25
답변 답변글 답변 : Atmega128 블루투스 오류 질문 새글 master 13:51 19
질문 아두이노 간단한 프로그램 새글 행복지수업 22-05-25 25
답변 답변글 답변 : 아두이노 간단한 프로그램 새글 master 12:06 13
질문 atmega128 타이머 작성시 키패트 입력으로 인터럽트 사용에 대하여 질문이 있습니다.댓글[1] 이미지새글 마프하나 22-05-25 32
질문 로드셀 무게 센서 질문드립니다.댓글[2] 새글 제비고기 22-05-25 32
질문 adc, uart dma댓글[3] 새글첨부파일 hiㅡO3O 22-05-25 27
질문 ADC,uart DMA댓글[1] 이미지새글첨부파일 hiㅡO3O 22-05-25 25
질문 아두이노 스텝모터 리미트 문의드립니다.댓글[3] 이미지새글첨부파일 스트렌져 22-05-24 34
질문 진동센서와 서보모터 연결 코드 질문입니다!댓글[1] 새글 제리 22-05-24 26
질문 atmega128 GPS,블루투스 질문드립니다.댓글[1] 코딩초보1 22-05-24 34
질문 서보모터 제어에 관하여 궁금합니다댓글[3] 이미지첨부파일 오소로롯 22-05-24 53
질문 atmega 128 타이머 작성 중 질문 드립니다.댓글[8] 이미지 마프하나 22-05-23 68
질문 아두이노와 휴대폰을 HC-06으로 연결시켜서 블루투스연결이 끊기면 부저에서 소리가 나게 할려하는데 어떻게 해…댓글[1] 졸작부수다 22-05-23 226
답변 답변글 답변 : 아두이노와 휴대폰을 HC-06으로 연결시켜서 블루투스연결이 끊기면 부저에서 소리가 나게 할려하는데 … master 22-05-24 29
질문 보드레이트 질문댓글[1] 죠르디 22-05-23 32
질문 atmega 128 블루투스 질문 입니다댓글[1] yhj2644 22-05-23 53
질문 아트메가 공부중에 질문있습니다..댓글[1] suid82 22-05-23 39
질문 Atmega128 UART통신 echo 반복 질문댓글[2] ming2ming 22-05-23 57
질문 아두이노의 지속 시간에 대해 질문합니다. merry 22-05-23 53
답변 답변글 답변 : 아두이노의 지속 시간에 대해 질문합니다. master 22-05-23 39
질문 초음파+스텝모터 도꺼비 22-05-22 40
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기