BASIC4MCU | 질문게시판 | 엔코더 모터 or 포토센서
페이지 정보
작성자 매매매 작성일2021-04-12 15:49 조회29,336회 댓글5건본문
#include <L298Drv.h>
L298Drv motor(8,9);
int limit = 22;
int sensor = 3; // 포토 인터럽터 센서와 연결된 핀번호
int count = 0;
void setup()
{
Serial.begin(9600);
pinMode(sensor, INPUT);
pinMode(limit, INPUT_PULLUP);
digitalWrite(sensor, HIGH);
digitalWrite(limit, HIGH);
}
void loop() {
int val = digitalRead(sensor);
if (digitalRead(limit)== HIGH){
if (val == LOW){ // 포토센서 인식
count = count + 1 ;
Serial.println(count);
motor.drive(0);
delay(1000);
}
if (digitalRead(limit)== LOW){
count = 0;
motor.drive(0);
}
if(Serial.available())
// Serial.available 함수는 받아둔 데이터가 있으면 true를 반환
{
char re = Serial.read(); // 받아둔 데이터 중에서 1byte를 가져온다
if(re=='1') // '1'이 입력되면 실행
{
motor.drive(255);
Serial.println("1");
}
else if(re=='2') // '2'가 입력되면 실행
{
motor.drive(255);
Serial.println("2");
}
}
}
}
1번을 입력하면 모터가 움직여 포토센서 한번 만나면 멈추고, 2번을 입력하면 모토가 움직여 포토센서를 2번만나면 멈추고 하는 프로그램을 짜고싶은데 무엇을더 추가해야할가요?
그리고 리밋스위치를 눌렀을때 초기위치로 옮기고 카운트를 초기화하고싶은데 어떻게해야하나요..
댓글 5
조회수 29,336master님의 댓글
master 작성일
센서를 1번 만나고, 2번 만나고 <-- 왜 이런 처리를 해야 하는지 상세한 설명이 필요합니다.
기구물 구성이 어떻게 되어 있을까요?
매매매님의 댓글
매매매 작성일
#include <L298Drv.h>
L298Drv motor(8,9);
int limit = 22;
int sensor = 3; // 포토 인터럽터 센서와 연결된 핀번호
int count ;
char re;
void setup()
{
Serial.begin(9600);
pinMode(sensor, INPUT);
pinMode(limit, INPUT_PULLUP);
digitalWrite(sensor, HIGH);
digitalWrite(limit, HIGH);
}
void loop() {
int val = digitalRead(sensor);
if (val == LOW){ // U자 홈에 있을 때
count = count + 1 ;
Serial.print(count);
delay(500);
}
if (Serial.available()){
re = Serial.read();
if (re=='1'){
if (count == 0){
motor.drive(255);
}
else if (count >= 1){
motor.drive(0);
}
Serial.print(re);
Serial.println("/");
Serial.print(count);
delay(1000);
}
}
}
여기까지 정했습니다.
예를들어 입력값 1 주면 돌다가, 센서가 1번만났을때 멈추고 하고싶습니다.
입력값을 2 를주면 돌다가, 센서가 2번만났을때 멈추고
입력값을 3 을주면 돌다가, 센서가 3번만났을때 멈추고
master님의 댓글
master 작성일
#include <L298Drv.h>
L298Drv motor(8,9);
int limit =22;
int sensor=3; // 포토 인터럽터 센서와 연결된 핀번호
int count=0,target=0;
char re;
//
void setup(){
Serial.begin(9600);
pinMode(sensor, INPUT);
pinMode(limit, INPUT_PULLUP);
digitalWrite(sensor, HIGH);
digitalWrite(limit, HIGH);
}
//
void loop() {
if(Serial.available()){
re=Serial.read();
if((re>='1')&&(re<='9')){ count=0; target=re&0x0F; }
}
else if (count >= 1){
}
Serial.print(re);
Serial.println("/");
Serial.print(count);
delay(1000);
}
}
//
if(count<target){
motor.drive(255);
if(digitalRead(sensor)==LOW){ // U자 홈에 있을 때
count++; Serial.print(count);
while(digitalRead(sensor)==LOW); // U자 홈에 있을 때
delay(50);
}
}
else{
motor.drive(0);
}
}
매매매님의 댓글
매매매
re값을 50정도는 못주나요? 10진수로
master님의 댓글
master
Serial.parseInt() 이 함수를 공부해서 만들어보세요