BASIC4MCU | 질문게시판 | 엔코더 카운터 문의 드립니다.
페이지 정보
작성자 웁쓰 작성일2019-06-27 16:48 조회3,820회 댓글0건본문
#include <Encoder.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16,2);
int pls = 13;
Encoder myEnc(2,3);
void setup() {
Serial.begin(57600);
Serial.println("Basic Encoer Test:");
lcd.init();
lcd.backlight();
lcd.begin(16,2);
lcd.home ();
lcd.print("Count : ");
lcd.setCursor (0 ,1);
lcd.print("Statu : ");
pinMode(7,INPUT_PULLUP);
pinMode(13,OUTPUT);
}
long oldPosition = -99999;
void loop(){
long newPosition = myEnc.read()/4;
int setPosition = 100;
lcd.setCursor (9 ,0);
lcd.print(setPosition);
lcd.print(" ");
if(newPosition>4998) myEnc.write(4999*4);
if(newPosition<-4998) myEnc.write(-4999*4);
if(newPosition == setPosition){
digitalWrite(pls,HIGH);
myEnc.write(0);
delay(5);
digitalWrite(pls,LOW);
}
if(newPosition != oldPosition){
oldPosition = newPosition;
Serial.println(newPosition);
lcd.setCursor(9 ,1);
lcd.print(newPosition);
lcd.print(" ");
}else if(digitalRead(7)==LOW){
Serial.println("Button_RESET");
lcd.setCursor (9, 1);
lcd.print("RESET!!");
while(digitalRead(7)==LOW);
delay(100);
myEnc.write(0);
oldPosition = -1;
}
}
엔코더 카운터들 만들어 보려고합니다.
먼저 원하는 값을 셋팅 하면 로터리 엔코더를 돌려서 해당 셋팅 값이 되었을때 외부 출력을 하나 내보냅니다.
요상태로는 일단 잘 됩니다.
그런데 여기에서 시리얼로 셋팅 값을 그값으로 setPosition 값을 대체 하여 동작 하게 하려고 합니다.
아직 초보라 이래 저래 해 봤는데 잘 되지 않네요.
생각처럼 코딩이 되질 않아서 문의 드립니다.
int pls = 13;
int value;Encoder myEnc(2,3);
void setup() {
Serial.begin(57600);
Serial.println("Basic Encoer Test:");
lcd.init();
lcd.backlight();
lcd.begin(16,2);
lcd.home ();
lcd.print("Count : ");
lcd.setCursor (0 ,1);
lcd.print("Statu : ");
pinMode(7,INPUT_PULLUP);
pinMode(13,OUTPUT);
}
long oldPosition = -99999;
void loop(){
long newPosition = myEnc.read()/4;
int setPosition = value;
if(Serial.available ()){
value = Serial.parseInt();
}
lcd.setCursor (9 ,0);
lcd.print(value);
lcd.print(" ");
if(newPosition>4998) myEnc.write(4999*4);
if(newPosition<-4998) myEnc.write(-4999*4);
if(newPosition == setPosition){
//setPosition = 100;
digitalWrite(pls,HIGH);
myEnc.write(0);
//oldPosition = -1;
//delayMicroseconds (00);
delay(5);
digitalWrite(pls,LOW);
}
if(newPosition != oldPosition){
oldPosition = newPosition;
Serial.println(newPosition);
lcd.setCursor(9 ,1);
lcd.print(newPosition);
lcd.print(" ");
}else if(digitalRead(7)==LOW){
Serial.println("Button_RESET");
lcd.setCursor (9, 1);
lcd.print("RESET!!");
while(digitalRead(7)==LOW);
delay(100);
myEnc.write(0);
oldPosition = -1;
}
}이렇게 추가를 했습니다.
일단 실행 하면 시리얼모니터에서 입력 10이라고 입력 하면 액정에 10이 뜨는데 1초 정도 지나면 0으로 바뀌어 버립니다.
여기서 막히니 더이상 진행을 못하겠네요.
0으로 바뀌어 버리니 로터리 엔코더를 돌려도 0에서만 13번으로 출력이 나옵니다.
댓글 0
조회수 3,820등록된 댓글이 없습니다.