Skocz do zawartości

Jak zaprogramować w Arduino konkretny klawisz na klawiaturce X16 tack switch


bardgang

Pomocna odpowiedź

 

IMG_20200524_104509.thumb.jpg.da69148259bc6ce39c60798b8c7f9b5b.jpg

Nie wiem jak mogę zaprogramować tę klawiaturkę, aby po naciśnięciu kilku konkretnych przycisków  zaświeciła się dioda, albo zgasła.

Po prostu chcę wiedzieć co zrobić, aby po naciśnięciu zaprogramowanych kilku guzików wykonała się pewna czynność.

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

A oto mój kod:

     

#include <Wire.h>   // standardowa biblioteka Arduino
#include <LiquidCrystal_I2C.h> // dolaczenie pobranej biblioteki I2C dla LCD
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Ustawienie adresu ukladu na 0x27
#include <Keypad.h> //biblioteka od klawiatury
 
const byte ROWS = 4; // ile wierszy
const byte COLS = 4; //ile kolumn
 
byte rowPins[ROWS] = {5, 4, 3, 2}; //piny wierszy
byte colPins[COLS] = {6, 7, 8, 9}; //piny kolum
 
char keys[ROWS][COLS] = { //mapowanie klawiatury
  {'a','b','c',' '},
  {'d','e','f','B'},
  {'g','h','i','C'},
  {'j','k','l','D'},
};

 
Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury
 
void setup(){

  Serial.begin(9600);
    lcd.begin(20,4);   // Inicjalizacja LCD 20x4
      lcd.backlight(); // zalaczenie podwietl'B'enia
      lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)

   char klawisz = klawiatura.getKey();


 
}





 
void loop(){
    char klawisz = klawiatura.getKey();
if(klawisz){
    Serial.print(klawisz);
   
      lcd.print(klawisz);

      char klawisz = klawiatura.getKey();
            if (klawisz == 'B') {
           (setCursor 0,1);
            }
}
}

 

Edytowano przez Gieneq
Link do komentarza
Share on other sites

To :

char klawisz = klawiatura.getKey();

wystarczy napisać raz w pętli loop.

Tobie to się skompilowało w ogóle? Ja musiałem poprawić jeszcze kilka błędów. I wyszło tak:

#include <Wire.h>   // standardowa biblioteka Arduino
#include <LiquidCrystal_I2C.h> // dolaczenie pobranej biblioteki I2C dla LCD
LiquidCrystal_I2C lcd(0x27,20,4);  // Ustawienie adresu ukladu na 0x27
#include <Keypad.h> //biblioteka od klawiatury

const byte ROWS = 4; // ile wierszy
const byte COLS = 4; //ile kolumn
 
byte rowPins[ROWS] = {5, 4, 3, 2}; //piny wierszy
byte colPins[COLS] = {6, 7, 8, 9}; //piny kolum
 
char keys[ROWS][COLS] = { //mapowanie klawiatury
  {'a','b','c',' '},
  {'d','e','f','B'},
  {'g','h','i','C'},
  {'j','k','l','D'},
};

 
Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury
 
void setup(){

  Serial.begin(9600);
    lcd.begin();   // Inicjalizacja LCD 20x4
      lcd.backlight(); // zalaczenie podwietl'B'enia
      lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna) 
}
 
void loop(){
    char klawisz = klawiatura.getKey();
if(klawisz){
    Serial.print(klawisz);
      lcd.print(klawisz);

            if (klawisz == 'B') {
           lcd.setCursor (0,1);
            }
}
}

 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Wciskasz przycisk. Jeżeli jest odpowiedni to program czeka na nastepny. Jeżeli następny jest dobry to znowu czeka na następny i tak dalej. 

Nie sugeruj się tym kodem. Wstawiłem go bo nie zrozumiałem pytania i teraz nie wiem jak go usunąć xD

if (digitalRead(5) == HIGH && digitalRead(6) == HIGH) {
  coś tam zrób co tam ci się zachce;
  }

 

Edytowano przez Cydek
Link do komentarza
Share on other sites

Nie wiem czy da się z tej klawiatury pobrać kilka znaków w tym samym czasie. Ale mam inny sposób (podejrzałem trochę z kursu) . Więc tak

dodajesz jakąś zmienną:

byte k = 0;

w pętli loop coś takiego:

void loop(){
char klawisz = klawiatura.getKey();
if (klawisz) {
 if (k == 0 && klawisz == 'a') { 
k++; 
} else if (k == 1 && klawisz == 'd') {
k++;       
} else if (k == 2 && klawisz == 'g') { 
k = 0; 
lcd.clear();
lcd.print("ok");  
   funkcja();
} else {
lcd.clear();
lcd.print("zle"); 
}

  
}
}

Chodzi w tym o to że musisz wpisać odpowiedni kod w odpowiedniej kolejności żeby coś się stało jeśli źle napiszesz to nie zadziała.

Edytowano przez jas123
Link do komentarza
Share on other sites

@jas123 jak naciśnie się ostatni przycisk nie naciskając poprzednich czynność i tak zostanie wykonana a nie oto mi chodziło, chodziło mi oto aby czynność wykonała się dopiero po naciśnięciu tych wszystkich przycisków 🔴POKOLEJI🔴 Czy wiesz może jak to zrobić????? 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.