BASIC4MCU | 질문게시판 | 저번에 올려주신 코딩이 실행이 잘 안되어서 다시한번 여쭤봅니다.
페이지 정보
작성자 코초코초 작성일2019-05-16 14:56 조회6,753회 댓글1건본문
#include <Wire.h>// i2C 통신을 위한 라이브러리
#include <LiquidCrystal_I2C.h>// LCD 1602 I2C용 라이브러리
LiquidCrystal_I2C lcd(0x27,16,2);
#include <Servo.h>//서보 라이브러리를 불러옵니다.
Servo myservo; // 서보를 제어할 서보 오브젝트를 만듭니다.
int pos=90; // 서보 위치를 저장할 변수를 선언합니다.
int speed=5;
#include <Keypad.h>
const byte ROWS=4;
const byte COLS=4;
char keys[ROWS][COLS]={
{ '1','2','3','A'},
{ '4','5','6','B'},
{ '7','8','9','C'},
{ '#','0','*','D'}
};
byte rowPins[ROWS]={ 9,8,7,6 };
byte colPins[COLS]={ 5,4,3,2 };
Keypad kpd=Keypad(makeKeymap(keys),rowPins,colPins,ROWS,COLS);
//
char mode=0,key;
int start=90,end=90;
//
void setup(){
myservo.attach(13);
Serial.begin(9600);
lcd.init(); lcd.backlight();
}
//
void loop(){
key=kpd.getKey();
if(mode!=key){ mode=key;
if(key=='0'){ start=90; end= 90; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print(" 0"); }
if(key=='1'){ start=90; end=110; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print(" 15"); }
if(key=='2'){ start=90; end=130; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print(" 30"); }
if(key=='3'){ start=90; end=150; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print(" 45"); }
if(key=='4'){ start=90; end= 70; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print(" 60"); }
if(key=='5'){ start=90; end= 50; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print(" 75"); }
if(key=='6'){ start=90; end= 90; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print("-15"); }
if(key=='7'){ start=90; end= 90; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print("-30"); }
if(key=='8'){ start=90; end= 90; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print("-45"); }
if(key=='9'){ start=90; end= 90; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print("-60"); }
if(key=='A'){ start=90; end=162; lcd.setCursor(0,0); lcd.print("UP "); lcd.setCursor(0,1); lcd.print(" 80"); }
if(key=='B'){ start=90; end= 10; lcd.setCursor(0,0); lcd.print("DOWN "); lcd.setCursor(0,1); lcd.print(" 72"); }
if(key=='C'){ start=90; end=142; lcd.setCursor(0,0); lcd.print("LEFT "); lcd.setCursor(0,1); lcd.print(" 52"); }
if(key=='D'){ start=90; end= 46; lcd.setCursor(0,0); lcd.print("RIGHT"); lcd.setCursor(0,1); lcd.print("-44"); }
}
//
if(start<end){ for(pos=start; pos<=end; pos++){ myservo.write(pos); delay(15); } }
else { for(pos=start; pos>=end; pos--){ myservo.write(pos); delay(15); } }
//
if(start<end){ for(pos=end; pos>=start; pos--){ myservo.write(pos); delay(15); } }
else { for(pos=end; pos<=start; pos++){ myservo.write(pos); delay(15); } }
}
여기까지가 키패드가 한자리수만 입력을 받는다고 해서 15도씩 설정한거고
혹시 키패드에 두자리수 입력해서 서보모터를 원하는각도로 제어할수있는 방법은 전혀 없는 건가요?
구글에 쳐봐도 잘 안나와서.. 문제가 잘 안풀리네요... 이것만 해결하면되는데..
댓글 1
조회수 6,753master님의 댓글
master 작성일
저번 질문에서 'D' 키를 입력 했을 때 두자리 값을 처리하도록 하지 않았나요?
답변에 문제가 있으면 해당 답변의 코드로 질문을 작성해주세요
답변 무시하고 새로운 질문을 작성하시면 답변을 적어드릴 의미가 없겠죠?