找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索

【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(142)---LCD1602擴(kuò)展板模塊

查看數(shù): 5874 | 評(píng)論數(shù): 20 | 收藏 2
關(guān)燈 | 提示:支持鍵盤(pán)翻頁(yè)<-左 右->
    組圖打開(kāi)中,請(qǐng)稍候......
發(fā)布時(shí)間: 2020-2-11 17:12

正文摘要:

37款傳感器與模塊的提法,在網(wǎng)絡(luò)上廣泛流傳,其實(shí)Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑒于本人手頭積累了一些傳感器和模塊,依照實(shí)踐出真知(一定要?jiǎng)邮肿觯┑睦砟,以學(xué)習(xí)和交流為目的,這里準(zhǔn)備逐一動(dòng) ...

回復(fù)

ID:513258 發(fā)表于 2020-10-24 16:00
raymondau 發(fā)表于 2020-4-5 23:11
樓主你整合一下這文章就好了

謝謝師傅鼓勵(lì),出版社有約書(shū),可我的基礎(chǔ)太差,勉強(qiáng)發(fā)帖了
ID:102702 發(fā)表于 2020-4-5 23:11
樓主你整合一下這文章就好了
ID:513258 發(fā)表于 2020-2-13 10:21
  1. /*
  2.   【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.   實(shí)驗(yàn)一百四十二:LCD1602 字符液晶屏 輸入輸出擴(kuò)展板 LCD Keypad Shield
  4.   實(shí)驗(yàn)之二:ADC密鑰測(cè)試
  5.   LiquidCrystal庫(kù):IDE—工具—管理庫(kù)—搜索LiquidCrystal—安裝
  6. */

  7. #include <LiquidCrystal.h>

  8. LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

  9. char msgs[5][16] = {"Right Key OK ",
  10.                     "Up Key OK    ",
  11.                     "Down Key OK  ",
  12.                     "Left Key OK  ",
  13.                     "Select Key OK"
  14.                    };

  15. int adc_key_val[5] = {50, 200, 400, 600, 800 };
  16. int NUM_KEYS = 5;
  17. int adc_key_in;
  18. int key = -1;
  19. int oldkey = -1;

  20. void setup()
  21. {
  22.   lcd.clear();
  23.   lcd.begin(16, 2);
  24.   lcd.setCursor(0, 0);
  25.   lcd.print("ADC key testing");
  26. }

  27. void loop()
  28. {
  29.   adc_key_in = analogRead(0);    // 從A0傳感器端讀取值
  30.   key = get_key(adc_key_in);  // 轉(zhuǎn)換為按鍵

  31.   if (key != oldkey)   // 如果檢測(cè)到按鍵
  32.   {
  33.     delay(50);  // 等待解除緩沖時(shí)間
  34.     adc_key_in = analogRead(0);    // 從A0傳感器端讀取值
  35.     key = get_key(adc_key_in);    // 轉(zhuǎn)換為按鍵
  36.     if (key != oldkey)
  37.     {
  38.       lcd.setCursor(0, 1);
  39.       oldkey = key;
  40.       if (key >= 0) {
  41.         lcd.print(msgs[key]);
  42.       }
  43.     }
  44.   }
  45.   delay(100);
  46. }

  47. // 將ADC值轉(zhuǎn)換為密鑰號(hào)
  48. int get_key(unsigned int input)
  49. {
  50.   int k;

  51.   for (k = 0; k < NUM_KEYS; k++)
  52.   {
  53.     if (input < adc_key_val[k])
  54.     {
  55.       return k;
  56.     }
  57.   }

  58.   if (k >= NUM_KEYS)k = -1;  // 未按下有效鍵
  59.   return k;
  60. }
復(fù)制代碼


ID:513258 發(fā)表于 2020-2-13 09:12
實(shí)驗(yàn)開(kāi)源參考代碼

  1. /*
  2. 【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3. 實(shí)驗(yàn)一百四十二:LCD1602 字符液晶屏 輸入輸出擴(kuò)展板 LCD Keypad Shield
  4. 實(shí)驗(yàn)之一:這個(gè)程序用來(lái)測(cè)試LCD液晶顯示模塊和5個(gè)按鍵。
  5. */

  6. #include <LiquidCrystal.h>

  7. // 選擇LCD上使用到的引腳
  8. LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

  9. // 定義各按鍵
  10. int lcd_key     = 0;
  11. int adc_key_in  = 0;

  12. #define btnRIGHT  0
  13. #define btnUP     1
  14. #define btnDOWN   2
  15. #define btnLEFT   3
  16. #define btnSELECT 4
  17. #define btnNONE   5

  18. //讀取按鍵值
  19. int read_LCD_buttons()
  20. {
  21. adc_key_in = analogRead(0);          // 從模擬口0讀值
  22. // 直接讀到的5個(gè)按鍵值在以下值附近:0,144,329,504,741
  23. // 通過(guò)設(shè)定不同的閥值,就可以對(duì)應(yīng)讀到相應(yīng)的按鍵
  24. if (adc_key_in > 1000) return btnNONE;
  25. if (adc_key_in < 50)   return btnRIGHT;  
  26. if (adc_key_in < 250)  return btnUP;
  27. if (adc_key_in < 450)  return btnDOWN;
  28. if (adc_key_in < 650)  return btnLEFT;
  29. if (adc_key_in < 850)  return btnSELECT;  

  30. // V1.0的版本使用以下的閥值:
  31. /*
  32. if (adc_key_in < 50)   return btnRIGHT;  
  33. if (adc_key_in < 195)  return btnUP;
  34. if (adc_key_in < 380)  return btnDOWN;
  35. if (adc_key_in < 555)  return btnLEFT;
  36. if (adc_key_in < 790)  return btnSELECT;   
  37. */

  38. return btnNONE;
  39. }

  40. void setup()
  41. {
  42. lcd.begin(16, 2);              // 開(kāi)始
  43. lcd.setCursor(0,0);
  44. lcd.print("Push the buttons"); // 輸出“Push the buttons”
  45. }

  46. void loop()
  47. {
  48. lcd.setCursor(9,1);            // 光標(biāo)定在第二行,空開(kāi)9格
  49. lcd.print(millis()/1000);      // 輸出等待時(shí)間


  50. lcd.setCursor(0,1);            // 光標(biāo)移動(dòng)到第二行開(kāi)頭
  51. lcd_key = read_LCD_buttons();  // 讀取按鍵

  52. switch (lcd_key)               // 選擇按鍵
  53. {
  54.    case btnRIGHT:
  55.      {
  56.      lcd.print("RIGHT ");
  57.      break;
  58.      }
  59.    case btnLEFT:
  60.      {
  61.      lcd.print("LEFT   ");
  62.      break;
  63.      }
  64.    case btnUP:
  65.      {
  66.      lcd.print("UP    ");
  67.      break;
  68.      }
  69.    case btnDOWN:
  70.      {
  71.      lcd.print("DOWN  ");
  72.      break;
  73.      }
  74.    case btnSELECT:
  75.      {
  76.      lcd.print("SELECT");
  77.      break;
  78.      }
  79.      case btnNONE:
  80.      {
  81.      lcd.print("NONE  ");
  82.      break;
  83.      }
  84. }
  85. }
復(fù)制代碼



小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表