вызов перегруженной записи (int) неоднозначен

Приведенный ниже код отлично работает БЕЗ функции spinLeft () (которую я скопировал из goForward и модифицировал). Когда я попытался добавить эту функцию (будет использоваться позже), я получил ошибку выше. Но я не вижу, где я сделал что-то, что еще не сделано. Как добавление другой функции вызвало эту ошибку?

Остальная часть сообщения об ошибке гласит:

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);
}

1

Решение

0x00 может интерпретироваться как целочисленный литерал или литерал указателя. Компилятор не знает, что вы имеете в виду, поскольку у вас есть перегрузки для обоих.

Поэтому измените эту строку на:

Roomba.write((byte)0x00);

или немного более многословное приведение в стиле C ++:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]