Skocz do zawartości

Przerwanie od klawiatury matrycowej,Arduino pro mini


MIICHALUS

Pomocna odpowiedź

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
Link do komentarza
Share on other sites

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
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

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_
Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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łéś.

Link do komentarza
Share on other sites

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_
Link do komentarza
Share on other sites

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. 

Link do komentarza
Share on other sites

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ć

Link do komentarza
Share on other sites

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/

Link do komentarza
Share on other sites

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

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.