BASIC4MCU | 질문게시판 | 아두이노 질문
페이지 정보
작성자 리싸 작성일2019-05-25 10:30 조회4,190회 댓글1건본문
#include <Wire.h>// i2C 통신을 위한 라이브러리
#include <LiquidCrystal_I2C.h>// LCD 1602 I2C용 라이브러리
#include <stdlib.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#include <Servo.h>//서보 라이브러리를 불러옵니다.
Servo myservo; // 서보를 제어할 서보 오브젝트를 만듭니다.
int pos=90; // 서보 위치를 저장할 변수를 선언합니다.
int speed=5;char mode=0,key;
int start=90,end=90;
//
void setup(){
myservo.attach(13);
Serial.begin(9600);
lcd.init(); lcd.backlight();
}
//
void loop(){
if(Serial.available()){
char in_data;
in_data = Serial.read();
int ki = atoi(in_data);
if(ki = 0){ start=90; end= 90; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print(" 0"); }
else if(ki = 11){ start=90; end=105; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print(" 15"); }
else if (ki = 27){ start=90; end=120; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print(" 30"); }
/* if(key=='3'){ start=90; end=135; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print(" 45"); }
if(key=='4'){ start=90; end=150; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print(" 60"); }
if(key=='5'){ start=90; end=165; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print(" 75"); }
if(key=='6'){ start=90; end= 75; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print("-15"); }
if(key=='7'){ start=90; end= 60; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print("-30"); }
if(key=='8'){ start=90; end= 45; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print("-45"); }
if(key=='9'){ start=90; end= 30; lcd.setCursor(0,0); lcd.print("ANGLE"); lcd.setCursor(0,1); lcd.print("-60"); }
if(key=='A'){ start=90; end=170; lcd.setCursor(0,0); lcd.print("UP "); lcd.setCursor(0,1); lcd.print(" 80"); }
if(key=='B'){ start=90; end= 18; 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"); }
1*/ }
//
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); } }
}
atoi함수로 char형을 int형으로 전환하여서
두자리 수가 나와도 입력받아서
1도간격으로 입력하는 각도 따라 움직일 수 있도록 코딩하고자
시도하고 있는데 잘 되지 않습니다. 답변 부탁드립니다. 감사합니다.
댓글 1
조회수 4,190master님의 댓글
master 작성일
전송하는 곳에서 문자형으로 보내지말고 정수형으로 보내면
서보모터 각도는 0~180이므로 부호없는 1바이트 형으로 전송이 가능합니다.
atoi() 함수도 필요없죠