Zaloguje się
or
Tel +48 698 615 740

Podłączenie klawiatury membranowej z 16 klawiszami do arduino.

09 lutego, 2022

W tym artykule zostanie przedstawione podłączenie klawiatury membranowej do arduino. Przy wykorzystaniu jej, razem z wyświetlaczem, stworzymy kalkulator, który będzie w stanie wykonywać proste działania, takie jak dodawanie, odejmowanie, mnożenie, dzielenie.

Spis treści

  • Specyfikacja
  • Połączenie
  • Sprawdzenie działania klawiatury
  • Zaprogramowanie arduino
  • Działanie kalkulatora
  • Pliki do pobrania

Specyfikacja

  • ilość przycisków: 16
  • wymiary: 77 x 70 x 0,8 mm
  • długość taśmy wraz ze złączem: 83 mm
  • rodzaj złącza: 1 x 8 pin, raster 2.54 pod goldpin

Połączenie

Połączenie będzie bardzo proste, trzymając na przeciwko klawiaturę, zaczynamy podłączać od lewej jej strony do kolejnych pinów arduino 12, 11, 7, 6, 5, 4, 3, 2. Moglibyśmy zacząć od pinu 9, ale przez to, że będziemy używać wyświetlacza, to wymaga on pinów 10, 9 i 8. Na schemacie poniżej wygląd całego połączenia.

Sprawdzenie działania klawiatury

Aby sprawdzić działanie, wykorzystamy do tego bibliotekę, która przyda nam się do obsługi tej klawiatury. Bibliotekę można pobrać na samym dole artykułu, wykorzystamy z niej przykład który pozwoli na sprawdzenie jej działania.

Wybieramy przykład ”Custom keypad”

Teraz będziemy musieli podmienić kod od linijki 15 do 22 na ten podany niżej

char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {12, 11, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Po podmianie wgrywamy do naszego arduino i sprawdzamy, czy wszystkie klikane cyfry lub liczby rzeczywiście odpowiadają za te które są na klawiaturze.

Jeżeli klikany na klawiaturze numer lub litera się nie zgadza, należy sprawdzić połączenie. W przeciwnym wypadku nasza klawiatura działa prawidłowo.

Zaprogramowanie arduino

Z pomocą naszej klawiatury, można zrobić prosty kalkulator, użyję tu wyświetlacza (LCD TFT – 1.8′ – SPI artykuł o nim znajdziecie pod tym linkiem https://ajmaker.pl/2022/01/11/p/), dla lepszej wizualizacji, ale ten kto nie posiada takowego wyświetlacza, może wykorzystać do tego monitor portu szeregowego, chodź nie będzie, to tak efektowne. Do zrobienia kalkulatora na wyświetlaczu, przerobiłem kod który znajdziecie tutaj, a gotowy prezentuje się w ten sposób.

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <Keypad.h>

#if defined(ARDUINO_FEATHER_ESP32) // Feather Huzzah32
#define TFT_CS         14
#define TFT_RST        15
#define TFT_DC         32

#elif defined(ESP8266)
#define TFT_CS         4
#define TFT_RST        16
#define TFT_DC         5

#else
#define TFT_CS        10
#define TFT_RST        9 // Or set to -1 and connect to Arduino RESET pin 
#define TFT_DC         8
#endif

#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
SoftwareSerial mySerial(2, 3);
#else
// On Leonardo/M0/etc, others with hardware serial, use hardware serial!
// #0 is green wire, #1 is white
#define mySerial Serial1

#endif

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

long first = 0;
long second = 0;
double total = 0;

char customKey;
const byte ROWS = 4;
const byte COLS = 4;

char keys[ROWS][COLS] = {
  {'1', '2', '3', '+'},
  {'4', '5', '6', '-'},
  {'7', '8', '9', '*'},
  {'C', '0', '=', '/'}
};
byte rowPins[ROWS] = {12, 11, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);

void setup()
{
  Serial.begin(9600);
  analogWrite(A0, 255);
  tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab
  tft.setTextSize(2);
  tft.setRotation(1);
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 0);
}

void loop()
{
  customKey = customKeypad.getKey();
  switch (customKey)
  {
    case '0' ... '9':
      first = first * 10 + (customKey - '0');
      Serial.println(first);
      break;

    case '+':
      first = (total != 0 ? total : first);
      Serial.println("+");
      tft.print("+");
      second = SecondNumber();
      total = first + second;
      Serial.println(total);
      tft.print(" = ");
      tft.print(total);
      first = 0, second = 0;
      break;

    case '-':
      first = (total != 0 ? total : first);
      Serial.println("-");
      tft.print("-");
      second = SecondNumber();
      total = first - second;
      Serial.println(total);
      tft.print(" = ");
      tft.print(total);
      first = 0, second = 0;
      break;

    case '*':
      first = (total != 0 ? total : first);
      Serial.println("*");
      tft.print("*");
      second = SecondNumber();
      total = first * second;
      Serial.println(total);
      tft.print(" = ");
      tft.print(total);
      first = 0, second = 0;
      break;

    case '/':
      first = (total != 0 ? total : first);
      Serial.println("/");
      tft.print("/");
      second = SecondNumber();

      second == 0 ? Serial.println("Invalid") : total = (float)first / (float)second;

      Serial.println(total);
      tft.print(" = ");
      tft.print(total);
      first = 0, second = 0;
      break;

    case 'C':
      total = 0;
      tft.fillScreen(ST77XX_BLACK);
      tft.setCursor(0, 0);
      break;
  }
  switch (customKey)
  {
    case '1':
      tft.print("1");
      break;
    case '2':
      tft.print("2");
      break;
    case '3':
      tft.print("3");
      break;
    case '4':
      tft.print("4");
      break;
    case '5':
      tft.print("5");
      break;
    case '6':
      tft.print("6");
      break;
    case '7':
      tft.print("7");
      break;
    case '8':
      tft.print("8");
      break;
    case '9':
      tft.print("9");
      break;
    case '0':
      tft.print("0");
      break;
  }
}

long SecondNumber()
{
  while ( 1)
  {
    customKey = customKeypad.getKey();
    if (customKey >= '0' && customKey <= '9')
    {
      second = second * 10 + (customKey - '0');
      Serial.println(second);
    }

    switch (customKey)
    {
      case '1':
        tft.print("1");
        break;
      case '2':
        tft.print("2");
        break;
      case '3':
        tft.print("3");
        break;
      case '4':
        tft.print("4");
        break;
      case '5':
        tft.print("5");
        break;
      case '6':
        tft.print("6");
        break;
      case '7':
        tft.print("7");
        break;
      case '8':
        tft.print("8");
        break;
      case '9':
        tft.print("9");
        break;
      case '0':
        tft.print("0");
        break;
    }

    if (customKey == '=') break; //return second;
  }
  return second;
}

Działanie kalkulatora

Pliki do pobrania

Sticky
Możliwość komentowania Podłączenie klawiatury membranowej z 16 klawiszami do arduino. została wyłączona
Adrian Wojtala

Adrian Wojtala

Ma 21 lat. Studiuje informatykę na Uniwersytecie DSW, ukończył technikum o profilu technik-informatyk. Interesuje się programowaniem i w przyszłości ma plan zostać back-end developerem. Swoją przygodę z Arduino rozpoczął podczas praktyk od września 2021 r.

Comments are closed.

Strona korzysta z plików cookies w celu realizacji usługi i zgodnie z Polityką Plików Cookies. Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.