Подключение тактильного дисплея , PS/2 клавиатуры и LCD дисплея к ардуино.

Тема в разделе "Arduino & Shields", создана пользователем kirilikyzzz, 11 дек 2018.

  1. kirilikyzzz

    kirilikyzzz Нуб

    Собственно, реализовано подключение PS/2, и дисплея брайля, есть проблемы с подключением самодельной клавиатуры на 7 кнопок к ЛСД экрану с I2C модулем. Экран был подключен. Но теперь стоит вопрос как лучше подключить клавиатуру. Хотим сделать через I2C порт, но знаний не достает. И развивая тему. Как впоследствии задать вывод символов при нажатии двух-трех кнопок одновременно. Чтобы на этих 7 кнопках ззадать полноценный алфавит.

    Клавиатура: https://yadi.sk/i/7owjc7TIc8yFcg
    https://yadi.sk/i/WXAzByb9O-1Xxg



    Код (Text):

    #include <PS2Keyboard.h>
    #include <SoftwareSerial.h>
    #include <LiquidCrystal_I2C.h> // Подключение библиотеки

    const int DataPin = 2;
    const int IRQpin =  3;
    boolean cursor;
    int i;
    int pins[6] = {4, 5, 6, 7, 8, 9};

    PS2Keyboard keyboard;

    SoftwareSerial lcd_serial(11,12);
    LiquidCrystal_I2C lcd(0x27,16,2);

    void setup() {
      delay(1000);
      keyboard.begin(DataPin, IRQpin);
      lcd_serial.begin(115200);
      Serial.begin(9600);
      Serial.println("Keyboard Test:");
      pinMode(4, OUTPUT);
      pinMode(5, OUTPUT);
      pinMode(6, OUTPUT);
      pinMode(7, OUTPUT);
      pinMode(8, OUTPUT);
      pinMode(9, OUTPUT);

      lcd.init();  // Инициализация дисплея  
      lcd.backlight();  // Подключение подсветки
      lcd.setCursor(0,0);  // Установка курсора в начало
    }

    void loop() {

     
      if (keyboard.available()) {
    lcd_serial.print(char(8));  
    cursor=false;  
    char c = keyboard.read();  

    //vemos si es una tecla especial
     if (c == PS2_TAB) {  
     lcd_serial.print(char(32));  
     lcd_serial.print(char(32));  
     lcd_serial.print(char(32));  
     lcd_serial.print(char(32));  
     lcd_serial.print(char(32));  
    }
    else if (c == PS2_ESC) {  
    lcd_serial.print(char(0x7C));  
     lcd_serial.print(char(0x00));  
      }
    else if (c == PS2_DELETE) {  
    lcd_serial.print(char(8));  
    }

    else {
      lcd_serial.print(c);  
      }  
    }

      else{  

      if (!cursor){  
      lcd_serial.print(char(95));  
      }
      cursor=true;  
      }




       
      if (keyboard.available()) {

      // read the next key
      char c = keyboard.read();

      // check for some of the special keys
      if (c == PS2_ENTER) {
      Serial.println();
      } else if (c == PS2_TAB) {
      Serial.print("[Tab]");
      } else if (c == PS2_ESC) {
      Serial.print("[ESC]");
      } else if (c == PS2_PAGEDOWN) {
      Serial.print("[PgDn]");
      } else if (c == PS2_PAGEUP) {
      Serial.print("[PgUp]");
      } else if (c == PS2_LEFTARROW) {
      Serial.print("[Left]");
      } else if (c == PS2_RIGHTARROW) {
      Serial.print("[Right]");
      } else if (c == PS2_UPARROW) {
      Serial.print("[Up]");
      } else if (c == PS2_DOWNARROW) {
      Serial.print("[Down]");
      } else if (c == PS2_DELETE) {
      Serial.print("[Del]");
      } else {

      // otherwise, just print all normal characters
      Serial.print(c,DEC );
      Serial.println();
      { if (c == 102)
      {digitalWrite(pins[0],  HIGH);}
      else {digitalWrite(pins[0],  LOW);}
      if (c == 44)
      {
      digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[1],  HIGH);}
      else {digitalWrite(pins[0],  LOW);
      digitalWrite(pins[1],  LOW);}
      if (c == 100)
      { digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[4],  HIGH);
      digitalWrite(pins[5],  HIGH);}  
      if (c == 117)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[4],  HIGH);}  
      if (c == 108)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[4],  HIGH);}
      if (c == 116)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[4],  HIGH);}  
      if (c == 96)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[5],  HIGH);}
      if (c == 59)
      { digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[4],  HIGH);}  
      if (c == 112)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[4],  HIGH);
      digitalWrite(pins[5],  HIGH);}  
      if (c == 98)
      { digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[3],  HIGH);}
      if (c == 113)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[5],  HIGH);}
      if (c == 114)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[2],  HIGH);}
      if (c == 107)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[2],  HIGH);}
      if (c == 118)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[3],  HIGH);}  
      if (c == 121)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[4],  HIGH);}  
      if (c == 106)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[4],  HIGH);}
      if (c == 103)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[3],  HIGH);}
      if (c == 104)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[4],  HIGH);}
      if (c == 99)
      { digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[3],  HIGH);}  
      if (c == 110)
      { digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[4],  HIGH);}
      if (c == 101)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[5],  HIGH);}
      if (c == 97)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[3],  HIGH);}  
      if (c == 91)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[4],  HIGH);}
      if (c == 119)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[3],  HIGH);}
      if (c == 120)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[4],  HIGH);}  
      if (c == 105)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[4],  HIGH);
      digitalWrite(pins[5],  HIGH);}  
      if (c == 111)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[5],  HIGH);}  
      if (c == 93)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[4],  HIGH);
      digitalWrite(pins[5],  HIGH);}
      if (c == 115)
      { digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[5],  HIGH);}
      if (c == 109)
      { digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[2],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[4],  HIGH);
      digitalWrite(pins[5],  HIGH);}  
      if (c == 39)
      { digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[5],  HIGH);}
      if (c == 46)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[4],  HIGH);
      digitalWrite(pins[5],  HIGH);}
      if (c == 122)
      { digitalWrite(pins[0],  HIGH);
      digitalWrite(pins[1],  HIGH);
      digitalWrite(pins[3],  HIGH);
      digitalWrite(pins[5],  HIGH);}  
      if (c == 32)
      { digitalWrite(pins[0],  LOW);
      digitalWrite(pins[1],  LOW);
      digitalWrite(pins[2],  LOW);
      digitalWrite(pins[3],  LOW);
      digitalWrite(pins[4],  LOW);
      digitalWrite(pins[5],  LOW);
      }
       
      }
       
      }
      }
    }
     
    Последнее редактирование: 12 дек 2018
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Это элементарно, че вы хотите от железки, если -
    У вас в программе не заданы пины подключения дисплея, нет его библиотеки и нет комманд на него выводить. Он подключается так, но я не знаю куда вы его прицепили. С первой строки вставьте
    Код (C++):

    #include <LiquidCrystal.h>

    LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
    Вместо имен rs, en, d4-7 - номера пинов ессно.

    Всё что у вас есть - это вывод в UART (последовательный) порт и на какое-то странное устройство. Можете смотреть - Ардуино ИДЕ, меню Инструменты - Монитор порта. Там будет то, что выводит Ардуина в UART порт. Только ее надо подключить к USB компа и правильно задать номер порта.
     
    Последнее редактирование: 12 дек 2018