Robofun 機器人論壇

標題: Serial LCD v1.1回傳值問題 [打印本頁]

作者: jacklnc    時間: 2014-8-18 02:34
標題: Serial LCD v1.1回傳值問題
小弟我..使用了serialLCD library後..
這個第一個回傳值是UART_READY 0xA3 沒錯..
然後我回傳了0XA5 如下所示 :
   NewSoftSerial::begin(9600);
   
    while(1)
    {
        if ( NewSoftSerial::available() > 0 &&  NewSoftSerial::read()==SLCD_INIT )
        {
            NewSoftSerial::print(SLCD_INIT_ACK);
            break;
        }
    }
                 
    delay(2);            
    NewSoftSerial::print(SLCD_CONTROL_HEADER);      
    NewSoftSerial::print(SLCD_POWER_OFF);            
    delay(1);            
    NewSoftSerial::print(SLCD_CONTROL_HEADER);      
    NewSoftSerial::print(SLCD_POWER_ON);            
    delay(1);            
    NewSoftSerial::print(SLCD_INIT_ACK);

    while(1)
    {
        if (NewSoftSerial::available() > 0 &&NewSoftSerial::read()==SLCD_INIT_DONE)
              這裡是無窮迴圈...也就是說沒有這個SLCD_INIT_DONE
            break;
    }   
    delay(2);
各位大大可否解答....
Thank a lot..
Best Regards..
作者: vegewell    時間: 2014-8-19 02:53
回復 1# jacklnc 我看.h裡面
#define SLCD_INIT_ACK        0xA5
#define SLCD_INIT_DONE        0xAA
---------------------
也許你該回傳0XAA
作者: jacklnc    時間: 2014-8-20 00:32
#define SLCD_INIT_DONE        0xAA 這個值應該是 SerialLCD傳給我的吧 ?
作者: vegewell    時間: 2014-8-20 03:12
本帖最後由 vegewell 於 2014-8-20 03:15 編輯

回復 3# jacklnc
這是省略用語,意思就是既然讀不到,就要催它快給,
當然這需要一些技術,

我認為你的問題可能出在
  if ( NewSoftSerial::available() > 0 &&  NewSoftSerial::read()==SLCD_INIT )
        {
之後,多的這一行: NewSoftSerial::print(SLCD_INIT_ACK);
可能這句把機器搞混了,
它裡面有固定的開機程序,不能亂寫,

所以改如下:
NewSoftSerial::begin(9600);

    while(1)
    {
        if ( NewSoftSerial::available() > 0 &&  NewSoftSerial::read()==SLCD_INIT )
        {
            break;
        }
    }

    delay(2);            
    NewSoftSerial::print(SLCD_CONTROL_HEADER);      
    NewSoftSerial::print(SLCD_POWER_OFF);            
    delay(1);            
    NewSoftSerial::print(SLCD_CONTROL_HEADER);      
    NewSoftSerial::print(SLCD_POWER_ON);            
    delay(1);            
    NewSoftSerial::print(SLCD_INIT_ACK);

    while(1)
    {
        if (NewSoftSerial::available() > 0 && NewSoftSerial::read()==SLCD_INIT_DONE)
            break;
    }  
如果還不行,
再如下:
Serial.begin(9600);
NewSoftSerial.begin(9600);

  delay(5000);

  Serial.println("Starting the set-up process");
  delay(10);
  NewSoftSerial.write(SLCD_CONTROL_HEADER);   
  NewSoftSerial.write(SLCD_POWER_OFF);
  delay(10);
  NewSoftSerial.write(SLCD_CONTROL_HEADER);   
  NewSoftSerial.write(SLCD_POWER_ON);
  delay(10);
  NewSoftSerial.write(SLCD_INIT_ACK);
  while(1)
  {
      if (NewSoftSerial.available() > 0 && NewSoftSerial.read()==SLCD_INIT_DONE) {
          Serial.println("It's talking!");
          break;
      }
  }
如果還不行,
就可能不是程式的問題,
作者: jacklnc    時間: 2014-8-20 04:46
感謝大大...試過了不過還是不行...




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2