Доброго времени суток. Собственно экспериментирую с LCD и Apduino. И нежданно-негаданно наткнулся на странный глюк вот на таком скетче. (Железо собрано правильно, ибо все другие "пробы пера" работают отлично) Код (Text): #include <LiquidCrystal.h> LiquidCrystal lcd(12, 13, 6, 5, 4, 3); byte skull_and_bones[8] = { B01110, B10101, B11011, B01110, B00000, B10001, B01110, B10001, }; void setup() { lcd.createChar(0,skull_and_bones); lcd.begin(16, 2); lcd.print("\0"); lcd.setCursor (0,1); lcd.write(0); } void loop() { } При этом имеем в багрепорте следующее: Спойлер: Багрепорт Arduino: 1.6.3 (Windows 7), Плата"Arduino Uno" sketch_sep16a.ino: In function 'void setup()': sketch_sep16a.ino:20:12: error: call of overloaded 'write(int)' is ambiguous sketch_sep16a.ino:20:12: note: candidates are: In file included from sketch_sep16a.ino:1:0: C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\src/LiquidCrystal.h:83:18: note: virtual size_t LiquidCrystal::write(uint8_t) virtual size_t write(uint8_t); ^ In file included from C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\src/LiquidCrystal.h:5:0, from sketch_sep16a.ino:1: C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:49:12: note: size_t Print::write(const char*) size_t write(const char *str) { ^ Ошибка компиляции. Подозреваю какой-то баг с нулевой ячейкой таблицы символов LCD, потому как создание глифа в ячейку с 1 по 7 проблем не вызывает. Может кто-то что-то знает, как этот баг одолеть?
Баг, похоже, на самом деле в компиляторе, который не может решить, как ему вызывать write от целочисленной константы, и предлагает в качестве варианта функцию с параметром указателем. Можно попробовать "объяснить" компилятору, что "он не прав". lcd.write((uint8_t)0);
Простыми словами -- ошибка: Код (Text): error: call of overloaded 'write(int)' is ambiguous говорит о том, что для функции 'write(int)', которую унаследовал класс LiquidCrystal, компилятор нашел два переопределения и не может выбрать какое из них использовать. Первое переопределение -- это функция 'size_t LiquidCrystal::write(uint8_t)', второе переопределение -- это 'size_t Print::write(const char*)'. Один из вариантов быстрого решения проблемы -- сделать, так называемый 'cast', т.е. явно указать тип переменной передаваемой в функцию: Код (Text): lcd.write((uint8_t) 0); UPD: не много опоздал .... geher опередил (вот только баг не в компиляторе)
Баг пофиксился - код скомпилировался и lcd.write выполняется. А вот lcd.print нет - не отображает "0 символ" из таблицы. Будем пользоваьтся write - ом.