极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14246|回复: 5

【求助】arduiono从基础到实践 1602创建用户字符并输出失败

[复制链接]
发表于 2015-10-24 16:56:50 | 显示全部楼层 |阅读模式
void createGlyphDemo() {
  lcd.clear();
  
  byte happy[8]  = {
    B00000,
    B00000,
    B10001,
    B00000,
    B10001,
    B01110,
    B00000,
    B00000
  };

  byte  sad[8] = {
    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) {

            ^

编译有误。

求解答
回复

使用道具 举报

发表于 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
錯誤的說明已經清楚了吧, 問題就在 lcd.write(0); 中.
因為它同時符合了   virtual size_t write(uint8_t) ...

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

使用道具 举报

发表于 2015-10-25 01:13:51 | 显示全部楼层
陌木子 发表于 2015-10-24 22:43
你好   谢谢你的解答。再麻烦一下  那应该怎么改才能让他输出我定义的字符呢?

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

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

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

先弄清楚自己是那裡不懂吧.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-25 14:01:56 | 显示全部楼层
Super169 发表于 2015-10-25 01:13
這是很基本的東西, 應該要懂的吧.  

如果你不知道自己需要用到那一個, 那就是一個大問題了.  從你的程 ...

受教!虽然还是不太懂但是我这样改代码成功了,把自定义的字符输出了出来
我觉得我应该重学c。。。
void createGlyphDemo() {
  lcd.clear();
  
  byte happy[8]  = {
    B00000,
    B00000,
    B10001,
    B00000,
    B10001,
    B01110,
    B00000,
    B00000};

  byte sad[8] = {
    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);
  }
回复 支持 反对

使用道具 举报

发表于 2015-10-25 20:16:22 | 显示全部楼层
雖然你可以做到了, 但不是太好吧, C++ 是可以直接指定類型的, 而不需要另外增加一個變數.
你可以用 lcd.write((uint8_t) 0); 去指明這個零是 uint8_t 而不是 const char *.
這樣的做法, 是非常普通的.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 19:24 , Processed in 0.035525 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表