2013-12-10 23 views
1

下面的代碼可以正常工作,但沒有函數spinLeft()(我從goForward中複製並修改)。當我試圖添加該功能(稍後使用)時,我得到了上述錯誤。但我看不出我做了什麼還沒有做的事。如何添加另一個函數產生這個錯誤?重載的寫入(int)的調用是模糊的

錯誤消息的其餘部分表示:

Roomba4operants.ino: In function 'void spinLeft()': 
Roomba4operants:57: error: call of overloaded 'write(int)' is ambiguous 
/Users/royclymer/Desktop/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.h:92: note: candidates are: virtual size_t SoftwareSerial::write(uint8_t) 
/Users/royclymer/Desktop/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:49: note:     size_t Print::write(const char*) 

代碼:

#include <SoftwareSerial.h> 

int rxPin = 3; 
int txPin = 6; 
int ledPin = 13; 

SoftwareSerial Roomba(rxPin,txPin); 

void setup() { 
    pinMode(ledPin, OUTPUT); // sets the pins as output 
    Serial.begin(115200); 
    Roomba.begin(115200); 
    digitalWrite(ledPin, HIGH); // say we're alive 
    Serial.println ("Sending start command..."); 
    delay (1000); 
    // set up ROI to receive commands 
    Roomba.write(128); // START 
    delay(150); 
    Serial.println ("Sending Safe Mode command..."); 
    delay (1000); 
    Roomba.write(131); // SAFE 
    delay(150); 
    digitalWrite(ledPin, LOW); // say we've finished setup 
    Serial.println ("Ready to go!"); 
    delay (5000); 
} 

void loop() { 
    digitalWrite(ledPin, HIGH); // say we're starting loop 
    Serial.println ("Go Forward"); 
    goForward(); 
    delay (1000); 
    Serial.println ("Halt!"); 
    halt(); 
    Serial.println ("Go Backwards"); 
    delay (200); 
    goBackward(); 
    delay (1000); 
    Serial.println ("Halt!"); 
    halt(); 
    while(1) { } // Stop program 
} 

void goForward() { 
    Roomba.write(137); // DRIVE 
    Roomba.write((byte)0x00); // 0x00c8 == 200 
    Roomba.write(0xc8); 
    Roomba.write(0x80); 
    Roomba.write((byte)0x00); 
} 

void spinLeft() { 
    Roomba.write(137); // DRIVE 
    Roomba.write((byte)0x00); // 0x00c8 == 200 
    Roomba.write(0xc8); 
    Roomba.write(0x00);   //0x0001==spin left 
    Roomba.write((byte)0x01); 
} 

void goBackward() { 
    Roomba.write(137); // DRIVE 
    Roomba.write(0xff); // 0xff38 == -200 
    Roomba.write(0x38); 
    Roomba.write(0x80); 
    Roomba.write((byte)0x00); 
} 

void halt(){ 
byte j = 0x00; 
Roomba.write(137); 
Roomba.write(j); 
Roomba.write(j); 
Roomba.write(j); 
Roomba.write(j); 
} 
+0

你有沒有注意到其他所有'0x00'的怎麼也得投給'byte'? –

回答

8

0x00可以被解釋爲既一個整數文字或文字指針。編譯器不知道你的意思,因爲兩者都有重載。

因此改變該行:

Roomba.write((byte)0x00); 

或稍微詳細C++ - 風格的轉換:

Roomba.write(static_cast<byte>(0x00)); 
+0

這是有效的。謝謝。 – user918069