Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 2382|回復: 4
打印 上一主題 下一主題

LCD顯示問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2015-7-21 15:58:31 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大大,日前測試Arduino+LCD,遇到顯示的問題,請先進們指教~剛開始顯示正常(Driver RPM=3,數值3顯示正常)



(Driver RPM=120,數值120也顯示正常),但之後數值回到6的時候,卻顯示為600,數值回到88的時候,卻顯示為880







下列為程式碼:
//腳位定義
#define KeyPadPin   A0                 //Analog按鍵
//按鍵參數
#define Offset          10
#define SelectADC       639            //按鍵Select Analog值
#define LeftADC         408            //按鍵Left Analog值
#define UpADC           99             //按鍵Up Analog值
#define DownADC         256            //按鍵Down Analog值
#define RightADC        0              //按鍵Right Analog值
//按鍵旗標
int val ;
union{
  unsigned char Val;
  struct
  {
      unsigned Select:1;         //Select按鍵被按下旗標
      unsigned Left:1;           //Left按鍵被按下旗標
      unsigned Up:1;             //Up按鍵被按下旗標
      unsigned Down:1;           //Down按鍵被按下旗標
      unsigned Right:1;          //Right按鍵被按下旗標
      unsigned :1;               //保留
      unsigned :1;               //保留
      unsigned :1;               //保留
  };
}KeyDown;
//按鍵參數
int KeyVal;
unsigned char KeyDownOld;              //按鍵舊值暫存器
unsigned int KeySelectVal,             //Select按鍵按下計數器
             KeyLeftVal,               //Left按鍵按下計數器
             KeyUpVal,                 //Up按鍵按下計數器
             KeyDownVal,               //Down按鍵按下計數器
             KeyRightVal,              //Right按鍵按下計數器
             dontPressVal;             //未按下按鍵
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
/* LCD RS pin to digital pin 8
* LCD Enable pin to digital pin 9
* LCD D4 pin to digital pin 4
* LCD D5 pin to digital pin 5
* LCD D6 pin to digital pin 6
* LCD D7 pin to digital pin 7
* LCD BL pin to digital pin 10
* KEY pin to analogl pin 0
*/
LiquidCrystal lcd(8,9,4,5,6,7);                               //腳位定義 lcd(RS,E,D4,D5,D6,D7);
void setup()
{
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.print("Motor  RPM =");  
  lcd.setCursor(0, 1);
  lcd.print("Driver RPM =");  
   }
//***************************
//******* Main Loop *********
//***************************
void loop()
{
    val = analogRead(1);
    Serial.println(val);
    int rpm = map(val,0,1023,0,120);
       lcd.setCursor(12,1);
       lcd.print(rpm);
             }

P_20150721_154152.jpg (1.03 MB, 下載次數: 200)

正常3轉顯示

正常3轉顯示
2#
發表於 2015-7-21 19:29:14 | 只看該作者
回復 1# jason900506


   你好像少加 lcd.clear 這個函數在這個程式碼裡面

已經很久沒用LCD寫,只告訴你以往的經驗(有碰過轉速表數字回不來的難題)
3#
發表於 2015-7-28 18:01:58 | 只看該作者
本帖最後由 lostsnow 於 2015-7-29 13:23 編輯

這是正常的狀況,當你顯示 120 數字拆開分別是,
百位數字 1 是第 8 個字,2 是第 9 個字,0 是第 10 個字(依你的圖)..
之後在顯示 6 應該會出現 620 才對,中間可能你有做了什麼,
因為顯示是「從左至右」,所以 6 會在第 8 個字,後面沒字了就維持之前的值。

解決的方法有很多,最簡單的是在印數字之前印些空白 "    "

如果要整個 clear 的話,字串要重新顯示,把 setup() 的 print 內容移至 loop()
4#
發表於 2015-7-29 16:34:50 | 只看該作者
lcd.setCursor(12,1);
lcd.print(rpm);
這兩行改成
lcd.setCursor(12,1);
lcd.print("    ");
lcd.setCursor(12,1);
lcd.print(rpm);
就可以解決你的問題
5#
 樓主| 發表於 2015-8-5 16:35:24 | 只看該作者
加入 lcd.print("    ");  解決問題了,感謝各位大大的協助!!
void loop()
{
    val = analogRead(1);
    Serial.println(val);
    int driverrpm = map(val,0,1023,0,120);
     lcd.setCursor(12,0);   
      lcd.print("950");
       lcd.setCursor(12,1);
        lcd.print("    ");   
       lcd.setCursor(12,1);
      lcd.print(driverrpm);
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-5-9 16:14 , Processed in 0.442982 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表