LCD Shield

Тема в разделе "Arduino & Shields", создана пользователем Mitrandir, 14 май 2013.

  1. Mitrandir

    Mitrandir Гуру

    Приятель дал попользоваться такой штукой:
    20130514_074947.jpg
    Но увы что это не очень понятно, кто ни-будь сталкивался с таким шилдом?
    Как его использовать и где смотреть доки? Маркировка какая-либо отсутствует...
     
  2. Mitrandir

    Mitrandir Гуру

    Как я понял его надо так инициализировать?
    LiquidCrystal lcd( 8, 9, 4, 5, 6, 7 );
     
  3. _Ev_

    _Ev_ Нерд

  4. Mitrandir

    Mitrandir Гуру

    спасибо, то что нужно, странно что DFrobot не пропечатано... это смутило..
     
  5. Megakoteyka

    Megakoteyka Оракул Модератор

    http://arduino.ru/Reference/AttachInterrupt
    Только не забудьте позаботиться об аппаратной защите от дребезга, иначе прерывания будут пачками вылетать при каждом нажатии на кнопку.
     
  6. Mitrandir

    Mitrandir Гуру

    Значит придется проводами соединять, так как кнопка на 0-левой аналоговый подведена
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    Любая ножка (кроме питания и земли) может работать как цифровая, нужно ее только перенастроить.
     
  8. Mitrandir

    Mitrandir Гуру

    в описании attachInterupt говорится:

    даже если и 0-левую ногу перенастроить на цифру, она не сможет генерировать прерывание..
    да и при такой настройке, кнопки перестанут работать ... там аналоговый сигнал идет, кодирующий кнопку, без платы сопряжения не выйдет.
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    Точно, поторопился. Если кнопка кодируется уровнем аналогового сигнала, то прерывание повесить не получится. Разве что намудрить схемку, которая будет выдавать импульс при нажатии любой кнопки, по этому импульсу ловить прерывание и в обработчике считывать показания аналоговой ноги.
     
  10. Mitrandir

    Mitrandir Гуру

    Попробовал написать код с примера:
    Код (Text):
    //Sample using LiquidCrystal library
    #include <LiquidCrystal.h>
     
    /*******************************************************
     
    This program will test the LCD panel and the buttons
    Mark Bramwell, July 2010
     
    ********************************************************/
     
    // select the pins used on the LCD panel
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
     
    // define some values used by the panel and buttons
    int lcd_key = 0;
    int adc_key_in  = 0;
    #define btnRIGHT  0
    #define btnUP   1
    #define btnDOWN  2
    #define btnLEFT  3
    #define btnSELECT 4
    #define btnNONE  5
     
    // read the buttons
    int read_LCD_buttons()
    {
    adc_key_in = analogRead(0);   // read the value from the sensor
    // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
    // we add approx 50 to those values and check to see if we are close
    if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
    if (adc_key_in < 50)  return btnRIGHT;
    if (adc_key_in < 195)  return btnUP;
    if (adc_key_in < 380)  return btnDOWN;
    if (adc_key_in < 555)  return btnLEFT;
    if (adc_key_in < 790)  return btnSELECT;
    return btnNONE;  // when all others fail, return this...
    }
     
    void setup()
    {
    lcd.begin(16, 2);             // start the library
    lcd.setCursor(0,0);
    lcd.print("Push the buttons"); // print a simple message
    }
     
    void loop()
    {
    lcd.setCursor(9,1);         // move cursor to second line "1" and 9 spaces over
    lcd.print(millis()/1000);     // display seconds elapsed since power-up
     
     
    lcd.setCursor(0,1);         // move to the begining of the second line
    lcd_key = read_LCD_buttons();  // read the buttons
     
    switch (lcd_key)              // depending on which button was pushed, we perform an action
    {
      case btnRIGHT:
        {
        lcd.print("RIGHT ");
        break;
        }
      case btnLEFT:
        {
        lcd.print("LEFT  ");
        break;
        }
      case btnUP:
        {
        lcd.print("UP   ");
        break;
        }
      case btnDOWN:
        {
        lcd.print("DOWN  ");
        break;
        }
      case btnSELECT:
        {
        lcd.print("SELECT");
        break;
        }
        case btnNONE:
        {
        lcd.print("NONE  ");
        break;
        }
    }
     
    }
    но экран только светится голубым... Что не так?
     
  11. Mitrandir

    Mitrandir Гуру

    Очистил loop та же фигня... на кнопки вроде реагирует..
     
  12. _Ev_

    _Ev_ Нерд

    Запускал этот код на Uno R3+такой же безымянный шилд. Все работало. Пишет время и показывает нажатую кнопку. т.е. код рабочий
     
  13. Mitrandir

    Mitrandir Гуру

    Значит он помер... подсоединить неправильно там сложно..
     
  14. Mitrandir

    Mitrandir Гуру

    Удалось его запустить таки, но у верхней строки не прорисовывается ряд пикселей, ошибка в коде или все-таки брак дисплея?
    код:
    \
    Код (C):
    //Sample using LiquidCrystal library
    #include <LiquidCrystal.h>
     
    /*******************************************************
     
    This program will test the LCD panel and the buttons
    Mark Bramwell, July 2010
     
    ********************************************************/

     
    // select the pins used on the LCD panel
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
     
    // define some values used by the panel and buttons
    int lcd_key = 0;
    int adc_key_in  = 0;
    #define btnRIGHT  0
    #define btnUP   1
    #define btnDOWN  2
    #define btnLEFT  3
    #define btnSELECT 4
    #define btnNONE  5
     
    // read the buttons
    int read_LCD_buttons()
    {
    adc_key_in = analogRead(0);   // read the value from the sensor
    // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
    // we add approx 50 to those values and check to see if we are close
    if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
    if (adc_key_in < 50)  return btnRIGHT;
    if (adc_key_in < 195)  return btnUP;
    if (adc_key_in < 380)  return btnDOWN;
    if (adc_key_in < 555)  return btnLEFT;
    if (adc_key_in < 790)  return btnSELECT;
    return btnNONE;  // when all others fail, return this...
    }
     
    void setup()
    {
    lcd.begin(16, 2);            // start the library
    lcd.setCursor(0,0);
    lcd.print("Push the buttons"); // print a simple message
    }
     
    void loop()
    {
    lcd.setCursor(9,1);      // move cursor to second line "1" and 9 spaces over
    lcd.print(millis()/1000);    // display seconds elapsed since power-up
     
     
    lcd.setCursor(0,1);      // move to the begining of the second line
    lcd_key = read_LCD_buttons();  // read the buttons
     
    switch (lcd_key)              // depending on which button was pushed, we perform an action
    {
      case btnRIGHT:
        {
        lcd.print("RIGHT ");
        break;
        }
      case btnLEFT:
        {
        lcd.print("LEFT  ");
        break;
        }
      case btnUP:
        {
        lcd.print("UP   ");
        break;
        }
      case btnDOWN:
        {
        lcd.print("DOWN  ");
        break;
        }
      case btnSELECT:
        {
        lcd.print("SELECT");
        break;
        }
        case btnNONE:
        {
        lcd.print("NONE  ");
        break;
        }
    }
     
    }
     

    Вложения:

  15. Mitrandir

    Mitrandir Гуру

    проблема решена плохой контакт(
    исправлению не подлежит, придется так жить
     
  16. Mitrandir

    Mitrandir Гуру

    Заказал себе такую штуку:
    http://www.ebay.com/itm/300863699002?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

    как я понял она закрывает все порты на ардуине.

    41Crpn6LtSL._SY300_.jpg

    Но часть портов остается неиспользованными, но закрытыми шилдом.
    если в этих проводах:
    http://amperka.ru/collection/cables-wires/product/wire-mm
    согнуть жало на 90 градусов у основания они дотянутся до контактов в клемнике?