BASIC4MCU | 질문게시판 | 답변 : dc모터 제어 관련 질문 드려요 ㅠㅠ!!
페이지 정보
작성자 master 작성일2023-06-07 11:40 조회409회 댓글0건본문
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // 아두이노 1
LiquidCrystal_I2C lcd(0x27,16,2);
//
int IN1=3,IN2=4,ENA=5;
int trig_1=7,echo_1=6; // 초음파1
int trig_2=9,echo_2=8; // 초음파2
int trig_3=10,echo_3=11; // 초음파3
int button_a=12,button_b=13;
//
unsigned long previousMillis=0; // 이전 시간
long interval=5000;
int preva_status=0,a_status=0;
int prevb_status=0,b_status=0;
//
long new_distance_1,new_distance_2,new_distance_3;
//
void setup(){
Serial.begin(9600);
pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(ENA,OUTPUT);
pinMode(trig_1,OUTPUT); pinMode(echo_1,INPUT);
pinMode(trig_2,OUTPUT); pinMode(echo_2,INPUT);
pinMode(trig_3,OUTPUT); pinMode(echo_3,INPUT);
pinMode(button_a,INPUT); pinMode(button_b,INPUT);
lcd.init(); lcd.backlight();
}
//
long distance_return(int trig,int echo){
long duration,distance;
delay(100);
digitalWrite(trig,0); delayMicroseconds(2);
digitalWrite(trig,1); delayMicroseconds(10); digitalWrite(trig,0);
duration=pulseIn(echo,1);
distance=duration*170/1000 ;
return distance;
}
//
void sensor_Print(long distance){
Serial.print("거리: "); Serial.print(distance); Serial.println("mm");
}
//
void motor_stop(){ digitalWrite(IN1,0); digitalWrite(IN2,0); }
void motor_go() { digitalWrite(IN1,1); digitalWrite(IN2,0); analogWrite(ENA,225); }
void motor_go_slow(){ // 벨트 천천히
digitalWrite(IN1,1); digitalWrite(IN2,0);
for(int pwm=225;pwm>0;pwm-=50){ if(pwm<0)pwm=0; analogWrite(ENA,pwm); delay(2000); }
digitalWrite(IN1,0); digitalWrite(IN2,0);
}
//
void loop(){
new_distance_1=distance_return(trig_1,echo_1);
new_distance_2=distance_return(trig_2,echo_2);
new_distance_3=distance_return(trig_3,echo_3);
if(new_distance_1<50){
lcd.setCursor(0,0); lcd.print(" a)Chocolate ");
lcd.setCursor(0,1); lcd.print(" b)Banana ");
previousMillis=millis();
while(millis()-previousMillis<=8000){ // lcd선택+버튼 눌린 총 시간 약 7초
a_status=digitalRead(12); b_status=digitalRead(13); delay(300); motor_stop();
if(a_status>preva_status){
Serial.print("A"); lcd.clear(); lcd.setCursor(0,0); lcd.print(" Good Choice! "); lcd.setCursor(0,1); lcd.print(" Chocolate! ");
}
else if(b_status>prevb_status){
Serial.print("B"); lcd.clear(); lcd.setCursor(0,0); lcd.print(" Good Choice! "); lcd.setCursor(0,1); lcd.print(" Banana! ");
}
prevb_status=b_status; preva_status=a_status;
}
lcd.clear(); motor_go(); delay(2000);
}
else if(new_distance_2<50){
lcd.setCursor(0,0); lcd.print(" Topping? ");
lcd.setCursor(0,1); lcd.print(" a)YES b)NO ");
previousMillis=millis();
while(millis()-previousMillis<=8000){
a_status=digitalRead(12); b_status=digitalRead(13); delay(300); motor_stop();
if(a_status>preva_status){
Serial.print("a"); lcd.clear(); lcd.setCursor(0,0); lcd.print(" Good Choice! "); lcd.setCursor(0,1); lcd.print(" YES! ");
}
else if(b_status>prevb_status){
Serial.print("b"); lcd.clear(); lcd.setCursor(0,0); lcd.print(" Good Choice! "); lcd.setCursor(0,1); lcd.print(" NO ");
}
prevb_status=b_status; preva_status=a_status;
}
lcd.clear(); motor_go(); delay(2000);
}
else if(new_distance_3<50){
lcd.setCursor(0,0); lcd.print(" Milk ? ");
lcd.setCursor(0,1); lcd.print(" a)YES b)NO ");
previousMillis=millis();
while(millis()-previousMillis<=20000){ // 우유시간 맞춰서 수정해야함 19초
a_status=digitalRead(12); b_status=digitalRead(13); delay(300); motor_stop();
if(a_status>preva_status){
Serial.print("c"); lcd.clear(); lcd.setCursor(0,0); lcd.print(" Good Choice! "); lcd.setCursor(0,1); lcd.print(" YES! ");
}
else if(b_status>prevb_status){
Serial.print("d"); lcd.clear(); lcd.setCursor(0,0); lcd.print(" Good Choice! "); lcd.setCursor(0,1); lcd.print(" NO ");
}
prevb_status=b_status; preva_status=a_status;
}
lcd.clear(); motor_go_slow(); motor_stop(); delay(5000);
}
motor_go();
}
//
//------------------------------------------------------------------------------------
#include <Servo.h> // 아두이노 2
Servo servo;
Servo servo2;
//
int IN1=7,IN2=6,speed1=9; // ENA pwm 조절 0~255
//
void setup(){
Serial.begin(9600);
servo.attach(13);
servo2.attach(12);
pinMode(speed1,OUTPUT); pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT);
}
//
void loop(){
if(Serial.available()){
char Data=Serial.read();
if(Data=='A'){ servo.write( 90); delay(1000); }
if(Data=='B'){ servo.write(180); delay(1000); }
if(Data=='a'){ servo2.write(90); delay(1000); }
if(Data=='b'){ servo2.write( 0); delay(1000); }
if(Data=='c'){ digitalWrite(IN1,1); digitalWrite(IN2,0); analogWrite(speed1,255); delay(5000); }
if(Data=='d'){ digitalWrite(IN3,1); digitalWrite(IN4,0); analogWrite(speed2,255); delay(5000); }
servo.write(90);
servo2.write(90);
digitalWrite(IN1,0); digitalWrite(IN2,0); analogWrite(speed1,0);
}
}
와일문을 좋아하는 초보자님이 무섭습니다.
댓글 0
조회수 409등록된 댓글이 없습니다.