Skocz do zawartości
bardgang

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

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ść.

 

Udostępnij ten post


Link to post
Share on other sites

Jak to nie to , wystarczy że zmienisz warunek.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

@jas123 tak ale jak za pomocą warunku zaznaczyć ten konkretny guzik???

 

Edytowano przez bardgang

Udostępnij ten post


Link to post
Share on other sites

w kursie nawet masz taki warunek

 klawisz = klawiatura.getKey();
      if (klawisz == 'A') {
        funkcja();
      }

 

Udostępnij ten post


Link to post
Share on other sites

Z kąd mam wiedzieć dlaczego Ci nie działa . Pokaż chociaż swój kod.

Udostępnij ten post


Link to post
Share on other sites
(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

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
Share on other sites

@jas123 DZIAŁA!!!!!! 

Dziękuję bardzo za pomoc, sam nie dał bym rady. 

JESZCZE RAZ DZIĘKUJĘ!!!! 

Udostępnij ten post


Link to post
Share on other sites

@jas123 Czy wiesz jak zaprogramować wszystko tak aby dopiero po naciśnięciu kilku przycisków w ustalonej kolejności dopiero wykonało jakąś czynność???? 

Czy ktoś wie jak to zrobić??? 

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

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

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

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

Udostępnij ten post


Link to post
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ć????? 

Udostępnij ten post


Link to post
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!

Gość
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...