BASIC4MCU | 질문게시판 | 아두이노 서보모터 블루투스 제어
페이지 정보
작성자 rnqudah 작성일2023-08-01 19:54 조회7,104회 댓글3건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=23050
작성일
본문
블루투스로 입력값을 받아서 dc모터와 서보모터를 제어하는데 a값을 받았을 때 서보모터1과 dc모터1만 움직여야하는데 2번서보모터가 작동이 됩니다 혹시 문제를 좀 해결하고싶습니다 ㅠㅠ
#include <Servo.h>#include <SoftwareSerial.h>SoftwareSerial SWSerial(2, 3);int motor1 = 9; // Pin number for the first DC motorint motor2 = 10; // Pin number for the second DC motorServo servoMotor1; // Servo motor 1Servo servoMotor2; // Servo motor 2int servo1Angle = 0; // Initial angle for servo motor 1int servo2Angle = 0; // Initial angle for servo motor 2void setup() {SWSerial.begin(9600);pinMode(motor1, OUTPUT);pinMode(motor2, OUTPUT);// Set initial motor values to 0 to ensure motors are stopped at the beginninganalogWrite(motor1, 0);analogWrite(motor2, 0);servoMotor1.attach(11); // Attach servo motor 1 to pin 11servoMotor2.attach(12); // Attach servo motor 2 to pin 12// Set initial servo motor angles to 0 to ensure they start from the initial positionservoMotor1.write(servo1Angle);servoMotor2.write(servo2Angle);Serial.begin(9600); // Serial monitor initialization}void loop() {if (SWSerial.available() > 0) {char data = SWSerial.read();// Receive data and display it on the serial monitorSerial.print("Received data: ");Serial.println(data);if (data == 'A') {// Move servo motor 1 to a certain positionservo1Angle = 90; // Change the angle value as per your requirementservoMotor1.write(servo1Angle);delay(500); // Wait for servo motor 1 to reach the desired position// Activate DC motor 1analogWrite(motor1, 255); // DC motor 1 at maximum speed// Turn off DC motor 2analogWrite(motor2, 0);}if (data == 'B') {// Stop DC motor 1analogWrite(motor1, 0);// Reset servo motor 1 to its initial positionservo1Angle = 0;servoMotor1.write(servo1Angle);delay(500); // Wait for servo motor 1 to reach the desired position}if (data == 'C') {// Move servo motor 2 to a certain positionservo2Angle = 89; // Change the angle value as per your requirementservoMotor2.write(servo2Angle);delay(500); // Wait for servo motor 2 to reach the desired position// Activate DC motor 2analogWrite(motor2, 255); // DC motor 2 at maximum speed// Turn off DC motor 1analogWrite(motor1, 0);}if (data == 'D') {// Stop DC motor 2analogWrite(motor2, 0);// Reset servo motor 2 to its initial positionservo2Angle = 0;servoMotor2.write(servo2Angle);delay(500); // Wait for servo motor 2 to reach the desired position}}}
댓글 3
조회수 7,104알토이드님의 댓글
알토이드 작성일
저는 잘 작동하는데 혹시
1. delay가 너무 짧거나
2. 결선이 잘못되거나
3. 모터 2개에 서보모터까지 작동하니 전력이 부족으로 인해 재시작
이 의심됩니다.
rnqudah님의 댓글
rnqudah
답변 감사합니다ㅎㅎ
master님의 댓글
master 작성일
int motor2 = 10; // Pin number for the second DC motor
다른 PWM핀으로 변경해서 돌려보세요