BASIC4MCU | 질문게시판 | 네오픽셀+초음파센서+서보모터
페이지 정보
작성자 손문일 작성일2018-12-05 01:31 조회9,455회 댓글3건첨부파일
본문
안녕하세요. 마스터님.
혼자 또 해보다가 안되어서 질문 드립니다.
코딩내용
마스터님께서 주신 코딩 + 네오픽셀에 색 변환 i값이 없어서 추가 + 네노픽셀 딜레이가 없어서 추가
문제점
1. 네오픽셀 = 모터가 처음 동작 전에 직지직 거리면서 불이 깜박이고 난후에 달 작동
2. 서보모터 = 초음파 값이 30보다 작은경우 모터를 움직인다를 추가하고싶습니다. 근데 구문이 따로 되어서 인지 오류가 나요.
처음 구동전에 혼자 직직직 거리고 난후에야 입력한데로 동작 됩니다.
아래에 동작 동영상도 포함해 넣었습니다.
#include <Adafruit_NeoPixel.h>
int PIN=3;
Adafruit_NeoPixel strip=Adafruit_NeoPixel(60,PIN,NEO_GRB+NEO_KHZ800);
//
int echo=7,trig=6;
//
#include <Servo.h>
Servo servo1;
//
long sonar_time=0;
long servo_time=0;
int cnt=0;
int pos=0;
//
void setup(){
Serial.begin(115200);
pinMode(trig,OUTPUT); pinMode(echo,INPUT);
strip.begin(); strip.show();
servo1.attach(9);
}
//
void loop(){
if(millis()-sonar_time>=100){ sonar_time=millis();
digitalWrite(trig,1); delayMicroseconds(10); digitalWrite(trig,0);
long distance=pulseIn(echo,HIGH)/58;
Serial.print(distance); Serial.println(" Cm");
if(distance<30){
strip.setPixelColor(0,strip.Color(0,50,255));
strip.setPixelColor(1,strip.Color(0,100,255));
strip.setPixelColor(2,strip.Color(0,150,255));
strip.setPixelColor(3,strip.Color(0,200,255));
strip.setPixelColor(4,strip.Color(0,255,255));
strip.setPixelColor(5,strip.Color(0,255,255));
strip.setPixelColor(6,strip.Color(0,255,255));
strip.setPixelColor(7,strip.Color(0,255,255)); //초록
strip.setPixelColor(8,strip.Color(255,255,0)); //노랑
strip.show(); delay(10); //스트립쇼와 딜레이 추가하였습니다.
for(int i=0; i<=255; i+=1){ // i값 추가하였습니다.
strip.setPixelColor(0,strip.Color(0,50,255));
strip.setPixelColor(1,strip.Color(0,100,255));
strip.setPixelColor(2,strip.Color(0,150,255));
strip.setPixelColor(3,strip.Color(0,200,255));
strip.setPixelColor(4,strip.Color(0,255,255));
strip.setPixelColor(5,strip.Color(i,255-i,255-i));
strip.setPixelColor(6,strip.Color(i,255,255-i));
strip.setPixelColor(7,strip.Color(0,255,255)); //초록
strip.setPixelColor(8,strip.Color(255,255,0)); //노랑
strip.show(); delay(10);
}
for(int i=255; i>=0; i-=1){ // i값 추가하였습니다.
strip.setPixelColor(0,strip.Color(0,50,255));
strip.setPixelColor(1,strip.Color(0,100,255));
strip.setPixelColor(2,strip.Color(0,150,255));
strip.setPixelColor(3,strip.Color(0,200,255));
strip.setPixelColor(4,strip.Color(0,255,255));
strip.setPixelColor(5,strip.Color(i,255-i,255-i));
strip.setPixelColor(6,strip.Color(i,255,255-i));
strip.setPixelColor(7,strip.Color(0,255,255)); //초록
strip.setPixelColor(8,strip.Color(255,255,0)); //노랑
strip.show(); delay(10); //스트립쇼와 딜레이 추가하였습니다.
}
}
else if(distance>30){
strip.setPixelColor(0,strip.Color(255,50,0));
strip.setPixelColor(1,strip.Color(255,100,0));
strip.setPixelColor(2,strip.Color(255,150,0));
strip.setPixelColor(3,strip.Color(255,200,0));
strip.setPixelColor(4,strip.Color(255,255,0));
strip.setPixelColor(5,strip.Color(255,255,0));
strip.setPixelColor(6,strip.Color(255,255,0));
strip.setPixelColor(7,strip.Color(255,255,0)); //초록
strip.setPixelColor(8,strip.Color(255,255,0)); //노랑
strip.show(); delay(10); //스트립쇼와 딜레이 추가하였습니다.
}
}
//
// (if(distance<30){}) 초음파 값이 30보다 작은경우 모터를 움직인다를 추가하고싶습니다. 근데 구문이 따로 되어서 인지 오류가 나요.
if(millis()-servo_time>=1000){ servo_time=millis();
if(pos==0)pos=180; else pos=0;
servo1.write(pos);
}
}
항상 감사드립니다.
댓글 3
조회수 9,455master님의 댓글
master 작성일
모터 전원을 별도로 공급해보세요
5V 아답터를 사용하면 되겠죠
모터 GND와 아두이노 GND 연결해줘야 합니다.
손문일님의 댓글
손문일 작성일
네. 별도로 연결해 보겠습니다.
하나 더 여쭤볼게 초음파 값이 30보다 작은경우 모터를 움직인다를 추가하고싶습니다. 근데 구문이 따로 되어서 인지 오류가 나요.
위 코딩 끝부분에 적어 놓았었는데 못 보신듯 하네요.
꼭 검토해주시길 바랍니다. ^^;;
감사합니다.
master님의 댓글
master 작성일
if(distance<30){
이미 네오픽셀 구동하기 위한 조건문이 있습니다.
if()문 처음에 모터를 구동할 것인지
네오픽셀 구동하고나서 모터를 구동 할 것인지에 따라서 위치만 정해서 모터코드를 넣으면 되겠죠