Приятель дал попользоваться такой штукой: Но увы что это не очень понятно, кто ни-будь сталкивался с таким шилдом? Как его использовать и где смотреть доки? Маркировка какая-либо отсутствует...
http://arduino.ru/Reference/AttachInterrupt Только не забудьте позаботиться об аппаратной защите от дребезга, иначе прерывания будут пачками вылетать при каждом нажатии на кнопку.
в описании attachInterupt говорится: даже если и 0-левую ногу перенастроить на цифру, она не сможет генерировать прерывание.. да и при такой настройке, кнопки перестанут работать ... там аналоговый сигнал идет, кодирующий кнопку, без платы сопряжения не выйдет.
Точно, поторопился. Если кнопка кодируется уровнем аналогового сигнала, то прерывание повесить не получится. Разве что намудрить схемку, которая будет выдавать импульс при нажатии любой кнопки, по этому импульсу ловить прерывание и в обработчике считывать показания аналоговой ноги.
Попробовал написать код с примера: Код (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; } } } но экран только светится голубым... Что не так?
Запускал этот код на Uno R3+такой же безымянный шилд. Все работало. Пишет время и показывает нажатую кнопку. т.е. код рабочий
Удалось его запустить таки, но у верхней строки не прорисовывается ряд пикселей, ошибка в коде или все-таки брак дисплея? код: \ Код (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; } } }
Заказал себе такую штуку: http://www.ebay.com/itm/300863699002?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649 как я понял она закрывает все порты на ардуине. Но часть портов остается неиспользованными, но закрытыми шилдом. если в этих проводах: http://amperka.ru/collection/cables-wires/product/wire-mm согнуть жало на 90 градусов у основания они дотянутся до контактов в клемнике?