陌木子 发表于 2015-10-24 16:56:50

【求助】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) {

            ^

编译有误。

求解答

Super169 发表于 2015-10-24 17:34:48

錯誤的說明已經清楚了吧, 問題就在 lcd.write(0); 中.
因為它同時符合了   virtual size_t write(uint8_t); 及size_t write(const char *str) .
0 既可以是 unit8_t, 亦可能是 const char *(0 可以是地址為0 的 pointer)
所以必須要指定參數的類型.

陌木子 发表于 2015-10-24 22:43:56

Super169 发表于 2015-10-24 17:34 static/image/common/back.gif
錯誤的說明已經清楚了吧, 問題就在 lcd.write(0); 中.
因為它同時符合了   virtual size_t write(uint8_t) ...

你好   谢谢你的解答。再麻烦一下那应该怎么改才能让他输出我定义的字符呢?

Super169 发表于 2015-10-25 01:13:51

陌木子 发表于 2015-10-24 22:43 static/image/common/back.gif
你好   谢谢你的解答。再麻烦一下那应该怎么改才能让他输出我定义的字符呢?

這是很基本的東西, 應該要懂的吧.

如果你不知道自己需要用到那一個, 那就是一個大問題了.從你的程式中, 不可能不清楚的.
如果別人也知道你需要什麼, 而你自己不知道, 是否有點兒那個?

至於 轉換成指定的類型, 那是很基礎的東西, 要寫 C++ 的話, 應該要懂的.這個最好自己學會, 將來也很常用的.

先弄清楚自己是那裡不懂吧.

陌木子 发表于 2015-10-25 14:01:56

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

Super169 发表于 2015-10-25 20:16:22

雖然你可以做到了, 但不是太好吧, C++ 是可以直接指定類型的, 而不需要另外增加一個變數.
你可以用 lcd.write((uint8_t) 0); 去指明這個零是 uint8_t 而不是 const char *.
這樣的做法, 是非常普通的.
页: [1]
查看完整版本: 【求助】arduiono从基础到实践 1602创建用户字符并输出失败