2017-05-18 167 views
0

今天我試着在Arduino上設置一個伺服電機和這個草圖一起運行。由於某種原因,當我爲伺服添加安裝線時,軟件串行端口不能正常接收數據。我試圖將軟件序列更改爲Arduino上的正常串行端口,但同樣的事情發生。Serial和Arduino伺服庫的問題

#include<SoftwareSerial.h> 
#include<Servo.h> 

Servo myServo; 
SoftwareSerial BT1(3,2); // TX, RX 

int val; 
int servoPin = 7; 
int ledPin = 10; 

void setup() { 
    pinMode(ledPin,OUTPUT); 
    BT1.begin(9600); 

    myServo.attach(servoPin); 
    myServo.writeMicroseconds(2000); //2 ms for Tower Pro SG 90 Servo 
    myServo.write(90); //Initialize at servo's middle point 

} 

void loop() { 

    if (BT1.available()) { 
    int i = (int)BT1.read(); 
    setIntensity(i); 
    } 

} 

void setIntensity(int value) { 
    if (value >= 0 && value <= 110) { 
    analogWrite(ledPin, value); 
    } 
} 

當我註釋掉myServo安裝線,Arduino的工作就像一個魅力。我該如何解決這個問題?我正在使用Arduino Duemilanove。

+0

我建議你使用AltSoftSerial比SoftwareSerial.SoftwareSerial更好一點 – Billa

+0

你可以指定當你改變時遇到什麼麻煩,因爲我找不到任何錯誤 – Billa

+0

當使用Servo和SoftwareSerial庫時,他們之間的衝突。當爲myServo添加設置行時: 'myServo.attach(servoPin); myServo.writeMicroseconds(2000); // 2毫秒用於Tower Pro SG 90伺服器 myServo.write(90); //在伺服的中間點 處初始化,SoftwareSerial不起作用。 –

回答

0

NeoSWSerialSoftwareSerial的合適替代品。 NeoSWSerial不會干擾伺服,因爲它不使用任何額外的資源,並且它不會長時間阻止中斷。

也可以從IDE Library Manager的菜單草圖 - >包含庫 - >管理庫下載。