Professional Documents
Culture Documents
Xe 12
Xe 12
h>
#include <PID_v1.h>
Servo myservo;
int pos = 0;
int enbA = 3;
int in1 = 5;
int in2 = 6;
int in3 = 9;
int dongcoservo = 8;
int khoangcach;
double Kp = 2, Ki = 5, Kd = 1;
void dokhoangcach();
void dithang();
void dunglai();
void disangphai();
void disangtrai();
void dilui();
void resetdongco();
void quaycbsangphai();
void quaycbsangtrai();
void setup() {
myservo.attach(dongcoservo);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(enbA, OUTPUT);
pinMode(enbB, OUTPUT);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
digitalWrite(enbA, LOW);
digitalWrite(enbB, LOW);
myservo.write(90);
delay(500);
Serial.begin(9600);
Setpoint = 20;
myPID.SetMode(AUTOMATIC);
myPID.SetOutputLimits(-255, 255);
myPID.SetSampleTime(100);
}
void loop() {
khoangcach = 0;
dokhoangcach();
Serial.println(khoangcach);
Input = khoangcach;
myPID.Compute();
if (Output > 0) {
analogWrite(enbA, Output);
analogWrite(enbB, 0);
dithang();
analogWrite(enbA, 0);
analogWrite(enbB, abs(Output));
dilui();
} else {
dunglai();
void dithang() {
digitalWrite(in1, 0);
digitalWrite(in2, 1);
digitalWrite(in3, 0);
digitalWrite(in4, 1);
void dunglai() {
analogWrite(enbA, 0);
analogWrite(enbB, 0);
digitalWrite(in1, 0);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
void disangphai() {
digitalWrite(in1, 0);
digitalWrite(in2, 1);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
void disangtrai() {
digitalWrite(in1, 0);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 1);
void dilui() {
digitalWrite(in1, 1);
digitalWrite(in2, 0);
digitalWrite(in3, 1);
digitalWrite(in4, 0);
void dokhoangcach() {
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
void quaycbsangtrai() {
myservo.write(150);
delay(500);
dokhoangcach();
myservo.write(90);
void quaycbsangphai() {
myservo.write(30);
delay(500);
dokhoangcach();
myservo.write(90);