小車控制程序,包含與樹莓派通信程序
0.png (7.02 KB, 下載次數: 15)
下載附件
2018-10-3 00:38 上傳
單片機源程序如下:
- int PWMA=10;
- int IN1 = 10;
- int IN2 = 9;
- int PWMB = 6;
- int IN3 = 6;
- int IN4 = 5;
- const int TrigPin = 2;
- const int EchoPin = 3;
- float distance;
- #include <Servo.h> // 聲明調用Servo.h庫
- Servo myservo; // 創建一個舵機對象
- int pos = 0; // 變量pos用來存儲舵機位置
- String comdata = "";
- int i;
- void setup()
- {
- pinMode(PWMA, OUTPUT); //PWM
- pinMode(IN1, OUTPUT);
- pinMode(IN2, OUTPUT);
- pinMode(PWMB, OUTPUT); //PWM
- pinMode(IN3, OUTPUT);
- pinMode(IN4, OUTPUT);
- // 初始化串口通信及連接SR04的引腳
- Serial.begin(9600);
- pinMode(TrigPin, OUTPUT);
- // 要檢測引腳上輸入的脈沖寬度,需要先設置為輸入狀態
- pinMode(EchoPin, INPUT);
- Serial.println("Ultrasonic sensor:");
- myservo.attach(5); // 將引腳9上的舵機與聲明的舵機對象連接起來
- Serial.begin(9600);
- }
- void up()
- {
- digitalWrite(IN1, LOW);
- digitalWrite(IN2, HIGH);
- digitalWrite(IN3, LOW);
- digitalWrite(IN4, HIGH);
- analogWrite(PWMA, 10);
- analogWrite(PWMB, 10);
- delay(5000);
- }
- void down()
- {
- digitalWrite(IN1, HIGH);
- digitalWrite(IN2, LOW);
- digitalWrite(IN3, HIGH);
- digitalWrite(IN4, LOW);
- analogWrite(PWMA, 10);
- analogWrite(PWMB, 10);
- delay(5000);
- }
- void sto()
- {
- digitalWrite(IN1, LOW);
- digitalWrite(IN2, LOW);
- digitalWrite(IN3, LOW);
- digitalWrite(IN4, LOW);
- analogWrite(PWMA, 0);
- analogWrite(PWMB, 0);
- delay(5000);
- }
- void left()
- {
- digitalWrite(IN1, LOW);
- digitalWrite(IN2, HIGH);
- digitalWrite(IN3, HIGH);
- digitalWrite(IN4, LOW);
- analogWrite(PWMA, 10);
- analogWrite(PWMB, 10);
- delay(5000);
- }
- void right()
- {
- digitalWrite(IN1, HIGH);
- digitalWrite(IN2, LOW);
- digitalWrite(IN3, LOW);
- digitalWrite(IN4, HIGH);
- analogWrite(PWMA, 10);
- analogWrite(PWMB, 10);
- delay(5000);
- }
- void d()
- {
- // 產生一個10us的高脈沖去觸發TrigPin
- digitalWrite(TrigPin, LOW);
- delayMicroseconds(2);
- digitalWrite(TrigPin, HIGH);
- delayMicroseconds(10);
- digitalWrite(TrigPin, LOW);
- // 檢測脈沖寬度,并計算出距離
- distance = pulseIn(EchoPin, HIGH) / 58.00;
-
- }
- void roun()
- {
- for(pos = 0; pos < 180; pos += 1){ // 舵機從0°轉到180°,每次增加1°
- myservo.write(pos); // 給舵機寫入角度
- delay(15); // 延時15ms讓舵機轉到指定位置
- }
- for(pos = 180; pos>=1; pos-=1) { // 舵機從180°轉回到0°,每次減小1°
- myservo.write(pos); // 寫角度到舵機
- delay(15); // 延時15ms讓舵機轉到指定位置
- }
- }
- void loop()
- {
- d();
- while (Serial.available() > 0){
- comdata += char(Serial.read());
- i=comdata.toInt();//每次讀一個char字符,并相加
- delay(2);
- }
- if (comdata.length() > 0){
- if (i<140){
- Serial.println("left");
- left();
- }
- if(i>140&i<180){
- Serial.println("up");
- if(distance<30)
- sto();
- else
- up();
-
- }
- if (i>=180){
- Serial.println("right");
- right();
- }
- // Serial.println(i); //打印接收到的字符
- comdata = "";
- }
-
- }
復制代碼
所有資料51hei提供下載:
arduino.rar
(13.71 KB, 下載次數: 18)
2018-10-2 19:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|