Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 4534|回復: 4

藍牙遙控車結合伺服馬達無法同步

[複製鏈接]
發表於 2016-12-3 12:48:39 | 顯示全部樓層 |閱讀模式
以下是小弟我操控藍牙遙控車與伺服馬達控制鏡頭的程式
一開始程式碼我只有寫藍芽控制車子移動,可以很順暢;可是加上了伺服馬達的程式碼之後整個遙控出了問題,伺服馬達反過來可以正常作用,遙控車卻無法移動。跪求大大們協助


#include<SoftwareSerial.h>
SoftwareSerial BT(0,1);
#include <Servo.h>
Servo myservo;
Servo myservo1;

char command;

const byte IN1 = 10;
const byte IN2 = 9;
const byte IN3 = 8;
const byte IN4 = 7;
const byte ENA = 6;
const byte ENB = 5;
int speeds = 0;
void loop() {
  if(BT.available()>0){
    command = BT.read();

    switch(command){

       case 'q':
       lighton();
       break;
       case 'p':
       lightdown();
       break;
      case 'w':
       forward();
       break;
      case'x':
       backward();
       break;
      case'a':
       turnLeft();
       break;
      case'd':
       turnRight();
      break;
      case's':
       stop();
       break;
        case 'b':
       Speedup();
       break;
        case 'c':
       Speeddown();
       break;
       case 'r':
       cameraright();
       break;
       case 't':
       cameraleft();
       break;
      case'u':
      cameraup();
       break;
       case'o':
      cameradown();
      break;
       case'z':
      camerarlreturn();
      break;
       case'y':
      cameraudreturn();
      break;
      case'h':
      camerareturn();
      break;
    }
  }
}
void lighton(){
  analogWrite(13,255);
}
void lightdown(){
  analogWrite(13,0);
}
void CarAction(){
  analogWrite(ENA,speeds);
  analogWrite(ENB,speeds);
  Serial.print("speed=");
  Serial.println(speeds);
}
void stop() {
speeds=0;
  analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);
}
void Speedup(){
  speeds+=20;
  if(speeds>250){speeds=255;}
  CarAction();
}
void Speeddown(){
  speeds-=20;
  if(speeds<=100){speeds=100;}
  CarAction();
}
void forward() {

digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);

}
void backward() {

digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);

}

void turnLeft() {

digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);

}
void turnRight() {

digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);

}
void cameraleft(){
  for(int i = 500; i <= 2400; i+=100)
    myservo.writeMicroseconds(i);
}
void cameraright() {
  for(int i = 2400; i >= 500; i-=100)
    myservo.writeMicroseconds(i);
}
void cameraup(){
  for(int i = 500; i <= 2400; i+=100)
    myservo1.writeMicroseconds(i);
}
  void cameradown(){
for(int i = 2400; i >= 500; i-=100)
    myservo1.writeMicroseconds(i);
}
void camerarlreturn(){
    myservo.write(90);
}
void cameraudreturn(){
   myservo1.write(90);
}
void camerareturn(){
  myservo.write(90);
  myservo1.write(90);
  }
void setup() {
   myservo.attach(11, 500, 2400);
  myservo1.attach(12, 500, 2400);
  myservo.write(90);
  myservo1.write(90);

  BT.begin(9600);

  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
  pinMode(IN3,OUTPUT);
  pinMode(IN4,OUTPUT);
  pinMode(13,OUTPUT);
  stop();
}
發表於 2016-12-4 05:29:51 | 顯示全部樓層
Servo 類的命令都會不順嗎?
還是只有cameraleft,cameraright
cameraup,cameradown 不順
而camerarlreturn,cameraudreturn
camerareturn不會不順?
因為看起來
cameraleft,cameraright
cameraup,cameradown
裡面有迴圈,執行需要點時間
 樓主| 發表於 2016-12-4 18:20:51 | 顯示全部樓層
camera的指令都會正常,然後不知道為什麼遙控車的指令完全不會有反應~如果是迴圈問題那車子應該當伺服馬達執行完後就會接受指令而移動,可是他完全沒有動...跪求大大們解答
發表於 2016-12-5 08:19:32 | 顯示全部樓層
Servo 的功能如果啟動, 就會導致
PIN 9 和 PIN 10 的 analogWrite 功能失效
不過我看它只有影響你的stop功能而己
可能停不了之類的, 不致於不能動才對
如果把伺服機先拔掉, 還是不能動嗎?
 樓主| 發表於 2016-12-9 04:08:31 | 顯示全部樓層
回復 4# 超新手 謝謝大大~目前這個問題已經解決了
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-3-28 18:49 , Processed in 0.169733 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表