【求助】arduiono从基础到实践 1602创建用户字符并输出失败
void createGlyphDemo() {lcd.clear();
byte happy= {
B00000,
B00000,
B10001,
B00000,
B10001,
B01110,
B00000,
B00000
};
bytesad = {
B00000,
B00000,
B10001,
B00000,
B01110,
B10001,
B00000,
B00000
};
lcd.createChar(0, happy);
lcd.createChar(1, sad);
for (int x = 0; x < 5; x++) {
lcd.setCursor(8, 0);
lcd.write(0);
delay(1000);
lcd.setCursor(8, 0);
lcd.write(1);
delay(1000);
}
这段程序显示Arduino:1.6.3 (Windows 7), 板:"Arduino Nano, ATmega328"
构建选项已变更,全部重新构建
___.ino: In function 'void createGlyphDemo()':
___.ino:136:16: error: call of overloaded 'write(int)' is ambiguous
___.ino:136:16: note: candidates are:
In file included from ___.ino:2:0:
H:\arduino-1.6.3-windows\arduino-1.6.3\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 H:\arduino-1.6.3-windows\arduino-1.6.3\libraries\LiquidCrystal\src/LiquidCrystal.h:5:0,
from ___.ino:2:
H:\arduino-1.6.3-windows\arduino-1.6.3\hardware\arduino\avr\cores\arduino/Print.h:49:12: note: size_t Print::write(const char*)
size_t write(const char *str) {
^
编译有误。
求解答
錯誤的說明已經清楚了吧, 問題就在 lcd.write(0); 中.
因為它同時符合了 virtual size_t write(uint8_t); 及size_t write(const char *str) .
0 既可以是 unit8_t, 亦可能是 const char *(0 可以是地址為0 的 pointer)
所以必須要指定參數的類型.
Super169 发表于 2015-10-24 17:34 static/image/common/back.gif
錯誤的說明已經清楚了吧, 問題就在 lcd.write(0); 中.
因為它同時符合了 virtual size_t write(uint8_t) ...
你好 谢谢你的解答。再麻烦一下那应该怎么改才能让他输出我定义的字符呢? 陌木子 发表于 2015-10-24 22:43 static/image/common/back.gif
你好 谢谢你的解答。再麻烦一下那应该怎么改才能让他输出我定义的字符呢?
這是很基本的東西, 應該要懂的吧.
如果你不知道自己需要用到那一個, 那就是一個大問題了.從你的程式中, 不可能不清楚的.
如果別人也知道你需要什麼, 而你自己不知道, 是否有點兒那個?
至於 轉換成指定的類型, 那是很基礎的東西, 要寫 C++ 的話, 應該要懂的.這個最好自己學會, 將來也很常用的.
先弄清楚自己是那裡不懂吧. Super169 发表于 2015-10-25 01:13 static/image/common/back.gif
這是很基本的東西, 應該要懂的吧.
如果你不知道自己需要用到那一個, 那就是一個大問題了.從你的程 ...
受教!虽然还是不太懂但是我这样改代码成功了,把自定义的字符输出了出来
我觉得我应该重学c。。。
void createGlyphDemo() {
lcd.clear();
byte happy= {
B00000,
B00000,
B10001,
B00000,
B10001,
B01110,
B00000,
B00000};
byte sad = {
B00000,
B00000,
B10001,
B00000,
B01110,
B10001,
B00000,
B00000};
int a=0;
int b=1;
lcd.createChar(a, happy);
lcd.createChar(b, sad);
for (int x = 0; x < 5; x++) {
lcd.setCursor(8, 0);
lcd.write(a);
delay(1000);
lcd.setCursor(8, 0);
lcd.write(b);
delay(1000);
} 雖然你可以做到了, 但不是太好吧, C++ 是可以直接指定類型的, 而不需要另外增加一個變數.
你可以用 lcd.write((uint8_t) 0); 去指明這個零是 uint8_t 而不是 const char *.
這樣的做法, 是非常普通的.
页:
[1]