ตัวอย่างโค้ด
#define echoPin 6 // Echo Pin #define trigPin 5 // Trigger Pin int incomingByte = 2; // for incoming serial data // Motor-controller connections to Arduino int motor1_IN1 = 2; int motor1_IN2 = 4; int motor2_IN3 = 7; int motor2_IN4 = 8; int motor1_BLI = 3; // m1_B low-side (N-channel mosfet) PWM output int motor1_ALI = 11; // m1_A low-side (N-channel mosfet) PWM output int speed_motor = 150; int ledPin1 = 13; // used as a neutral indicator #include <Servo.h> Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be created long duration, inches, cm,checkl; int pos = 0; // variable to store the servo position int R_Angle = 0; int C_Angle = 90; int L_Angle = 180; // value names used to hold antennae state int side_R_val; int side_L_val; int side_C_val; void setup() { TCCR2B = TCCR2B & 0b11111000 | 0x01; // change PWM frequency on pins 3 and 11 to 32kHz myservo.attach(9); // attaches the servo on pin 9 to the servo object Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); //motor1 pins pinMode(motor1_ALI, OUTPUT); pinMode(motor1_BLI, OUTPUT); //motor2 pins pinMode(motor1_IN1, OUTPUT); pinMode(motor1_IN2, OUTPUT); pinMode(motor2_IN3, OUTPUT); pinMode(motor2_IN4, OUTPUT); //led's pinMode(ledPin1, OUTPUT); } void loop() { checkl = microsecondsToCentimeters(); if (checkl<=10){ stop_motors(); myservo.write(L_Angle); delay(500); side_L_val = microsecondsToCentimeters(); Serial.print(side_L_val); Serial.println(); delay(500); myservo.write(C_Angle); delay(500); side_C_val = microsecondsToCentimeters(); Serial.print(side_C_val); Serial.println(); delay(500); myservo.write(R_Angle); delay(500); side_R_val = microsecondsToCentimeters(); Serial.print(side_R_val); Serial.println(); delay(500); if (side_L_val > side_R_val){ myservo.write(C_Angle); turn_left(); }else{ myservo.write(C_Angle); turn_right(); } }else { forward_motors(); } } // Beginning motor control functions void stop_motors(){ m1_stop(); m2_stop(); Serial.print("stop motors"); Serial.println(); } void turn_right(){ Serial.print("turn right"); Serial.println(); // delay(2000); reverse_motors(); delay(350); m1_forward(speed_motor); delay(500); m2_stop(); } void turn_left(){ Serial.print("turn left"); Serial.println(); // delay(2000); reverse_motors(); delay(350); m2_forward(speed_motor); delay(500); m1_stop(); } void reverse_motors(){ m1_reverse(speed_motor); m2_reverse(speed_motor); Serial.print("reverse motors"); Serial.println(); } void forward_motors(){ m1_forward(speed_motor); m2_forward(speed_motor); Serial.print("forward motors"); Serial.println(); } // Create single instances for each motor direction, so we don't accidentally write a shoot- void m1_forward(int m1_speed){ digitalWrite(motor1_IN1, HIGH); digitalWrite(motor1_IN2, LOW); analogWrite(motor1_ALI, m1_speed); digitalWrite(ledPin1, LOW); } void m1_reverse(int m1_speed){ digitalWrite(motor1_IN1, LOW); digitalWrite(motor1_IN2, HIGH); analogWrite(motor1_ALI, m1_speed); digitalWrite(ledPin1, LOW); } void m2_forward(int m2_speed){ digitalWrite(motor2_IN3, HIGH); digitalWrite(motor2_IN4, LOW); analogWrite(motor1_BLI, m2_speed); digitalWrite(ledPin1, LOW); } void m2_reverse(int m2_speed){ digitalWrite(motor2_IN3, LOW); digitalWrite(motor2_IN4, HIGH); analogWrite(motor1_BLI, m2_speed); digitalWrite(ledPin1, LOW); } void m1_stop(){ digitalWrite(motor1_IN1, LOW); digitalWrite(motor1_IN2, LOW); digitalWrite(ledPin1, HIGH); } void m2_stop(){ digitalWrite(motor2_IN3, LOW); digitalWrite(motor2_IN4, LOW); digitalWrite(ledPin1, HIGH); } // End motor functions long microsecondsToCentimeters() { // The speed of sound is 340 m/s or 29 microseconds per centimeter. // The ping travels out and back, so to find the distance of the // object we take half of the distance travelled. /* The following trigPin/echoPin cycle is used to determine the distance of the nearest object by bouncing soundwaves off of it. */ digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); return duration / 29 / 2;; }
สร้างหุ่นยนต์ด้วย Arduino ตอนที่ 3 ฝึกให้หุ่นยนต์หลบหลีกสิ่งกีดขวาง
http://www.instructables.com/id/Simple-RC-car-for-beginners-Android-control-over-/step10/Software/
ไม่มีความคิดเห็น:
แสดงความคิดเห็น