Skocz do zawartości

Przerwanie od klawiatury matrycowej,Arduino pro mini


Pomocna odpowiedź

Napisano

Witam

Czy istnieje jakiś sposób wywołania przerwania w momencie wciśnięcia jakiegokolwiek przycisku z klawiatury matrycowej 4x4.

Zbudowałem sobie pilota IR na arduino pro mini, ale chce go uśpić biblioteką sleep aby wcinał mniej energii i przerwania potrzebuje do wybudzenia układu.

Najlepiej jak by to był jakiś programowy sposób bo sprzętowa ingerencja w układ może być ciężka.

  • Lubię! 1
  • 2 tygodnie później...

Klawiatura jest bezpośrednio podpięta bez ekspandera(wiem ze jest na ekspanderze pin od przerwania ale juz mam gotowy uklad)

Układ jak i program jest podstwowy do testów zmontowany.Testy robilem dla spitych wierszy po przez diody do pinu przerwania.Niestety uklad sie nie budzi wtedy.

Są jakies inne sprzetowe lub programowe myki?

#include <Keypad.h>
#include<avr/sleep.h>

// Ustawienia klawiatury 4x4
const byte ROWS = 4; // liczba wierszy
const byte COLS = 3; // liczba kolumn

const byte pstryczekPrzerwan = 2;


// Mapowanie przycisków klawiatury matrycowej
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

// Definicje pinów dla wierszy i kolumn
byte rowPins[ROWS] = {10, 9, 8, 7}; // podłącz do pinów Arduino
byte colPins[COLS] = {6, 5, 4,}; // podłącz do pinów Arduino

// Inicjalizacja klawiatury matrycowej
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

// Flaga wykrycia przerwania
volatile bool keyPressed = false;

// Funkcja obsługi przerwania
void keyInterrupt() {
  keyPressed = true;
}

void setup() {

   pinMode(pstryczekPrzerwan, INPUT_PULLUP);

  set_sleep_mode(SLEEP_MODE_PWR_DOWN);              // Włącz pełne usypianie.
  sleep_enable();                                   // Uśpij mikrokontroler

  Serial.begin(9600);

  // Ustawienie przerwania sprzętowego na jednym z pinów (np. pin 2)
  attachInterrupt(digitalPinToInterrupt(2), keyInterrupt, FALLING);
}

void loop() {

char key = keypad.getKey();
    
    if (key) {
      Serial.print("Przycisk wciśnięty: ");
      Serial.println(key);
    }

  attachInterrupt(0, przerwanie, LOW);              // Aktywuj przerwania na kanale 0 niskim poziomem.
  sleep_mode(); 
 
}

void przerwanie()                                   // Gdy poziom niski pojawi się na kanale 0 (czyli na wejściu "przerwania"), obudź mikrokontroler.
{
  detachInterrupt(0);                   // Wyłącz obsługę przerwań.                          
  delay(5);                             // Zaczekaj 5 ms na pobudkę.
}

 

ukladzik.jpg

  • Lubię! 1
(edytowany)

Te diody powinny być w drugą stronę anodą do rezystora. Co do zmniejszenia poboru prądu możesz usypiać mikrokontroler i cyklicznie wybudzać podczas wybudzenia testować stan klawiatury, na przykład w cyklu 500ms snu 10ms na sprawdzenie. Jeśli podczas testowania cos jest naciśnięte - uruchomić nadawanie 

Edytowano przez _LM_
15 godzin temu, _LM_ napisał:

Te diody powinny być w drugą stronę anodą do rezystora. Co do zmniejszenia poboru prądu możesz usypiać mikrokontroler i cyklicznie wybudzać podczas wybudzenia testować stan klawiatury, na przykład w cyklu 500ms snu 10ms na sprawdzenie. Jeśli podczas testowania cos jest naciśnięte - uruchomić nadawanie 

Jak to programowo dobrze rozwiązać? I czy to będzie miało duzy wpływ na pobór prądu?

17 godzin temu, ethanak napisał:

Się nie da.

Dzięki za wyczerpującą wypowiedz poparta licznymi wyjaśnieniami. Jak masz tak pisać to może w ogóle nie pisz.

A co tu wyjaśniać? Zadałeś pytanie, dostałeś odpowiedź. Dla mnie taka odpowiedź oznacza "aha, trzeba szukać innego rozwiązania". Nie wiem co chciałeś jeszcze...

17 minut temu, ethanak napisał:

A co tu wyjaśniać? Zadałeś pytanie, dostałeś odpowiedź. Dla mnie taka odpowiedź oznacza "aha, trzeba szukać innego rozwiązania". Nie wiem co chciałeś jeszcze...

Może jakiejś minimalnej argumentacji.Tak to możesz kosić 90 % wątków na forum. I co mam ślepo zarzucić szukanie dociekanie bo ktoś z czapy rzucił jedno zdanie. Mówię taką pomoc na forum to sobie daruj.

4 minuty temu, MIICHALUS napisał:

Może jakiejś minimalnej argumentacji.

Zdroworozsądkowego myślenia... Masz tu argumentację: odczyt klawiatury matrycowej wymaga działania procesora. W uśpieniu procesor nie działa. Czy to wystarczająca argumentacja? Mogłem się rozpisywać na temat różnych innych płytek na których to zadziała ale o to nie pytałéś.

(edytowany)

Nie wiem o co się rzucasz @MIICHALUS masz przecież notę katalogową mikrokontrolera możesz sprawdzić co i jak. Przede wszystkim sprawdziłbym w jakim stanie znajdują się gpio podczas snu i wtedy rozważyłbym użycie przerwania (układ z diodami) albo watchdoga cyklicznie budzącego mikrokontroler. Ile to prądu i w jakiej konfiguracji weźmie nie wiem, ale jest to do oszacowania na podstawie noty katalogowej. A więc pdf do ręki/ na monitor i moje lubione RTFM 🙂

Edytowano przez _LM_
4 minuty temu, KatzePL napisał:

Nie ma rzeczy niemożliwych.

Są, być może znasz powiedzenie z parasolem. 

Poza tym trzeba znać układ z którym się pracuje nie wygłaszać wyssanych z palca "prawideł" ludowych popartych myśleniem życzeniowym i chłopskim rozumem. 

3 godziny temu, _LM_ napisał:

Nie wiem o co się rzucasz @MIICHALUS masz przecież notę katalogową mikrokontrolera możesz sprawdzić co i jak. Przede wszystkim sprawdziłbym w jakim stanie znajdują się gpio podczas snu i wtedy rozważyłbym użycie przerwania (układ z diodami) albo watchdoga cyklicznie budzącego mikrokontroler. Ile to prądu i w jakiej konfiguracji weźmie nie wiem, ale jest to do oszacowania na podstawie noty katalogowej. A więc pdf do ręki/ na monitor i moje lubione RTFM 🙂

Ja tam się wcale nie rzucam :-) Tylko gotuje się jak widzę na rożnych forach takie zaśmiecanie dyskusji i rzucanie"Nie bo nie" 

Ty rzeczowo podszedłeś do sprawy kierunkując na pewne aspekty za co dziękuję i przynajmniej wiem gdzie kopać.I tak powinno to wyglądać

Czyli Twoim zdanie odpowiedź na pytanie "czy się da" powinna zawierać pół książki? Ja się wychowałem na Usenecie i tam odpowiedź na takie pytanie była zawsze ze świętego Mateusza. Czyli: da się (aha, muszę poszukać jak) albo "nie da się" (czyli szukanie innego rozwiązania). Zajrzyj do swojego posta numer jeden i przeczytaj, jakie pytanie zadałeś. Potem usiądź i zastanów się, jaka powinna być odpowiedź. I nie czepiaj się że ktoś ci odpowiedział na pytanie.

Do poczytania: http://rtfm.killfile.pl/

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...