Skocz do zawartości
Komentator

Kurs Arduino II - #5 - klawiatura, własny system alarmowy

Pomocna odpowiedź

@tomica28, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.
Dnia 15.11.2018 o 16:31, tomica28 napisał:

W kodzie jest błąd, ponieważ po wpisaniu pinu i ponownym uzbrojeniu ,i próbie wpisania pinu licznik pozycji nie jest przywracany do pozycji początkowej, co powoduje wywołanie alarmu

Chodzi Ci o program z kursu, czy o program umieszczony przez innych użytkowników w komentarzach?

Udostępnij ten post


Link to post
Share on other sites

@tomica28, ok to gratuluję czujności i dziękuję za zgłoszenie, nikt wcześniej tego nie wychwycił. Zapisuję do poprawy 🙂

Udostępnij ten post


Link to post
Share on other sites

Hej,

Chcąc załadować program 


#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
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
 
Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury
 
void setup(){
  Serial.begin(9600);
}
  
void loop(){
  char klawisz = klawiatura.getKey();
  
  if (klawisz){
    Serial.println(klawisz);
  }
}


Wyskoczył błąd, że podana biblioteka Keypad nie istnieje. Znalazłem tę bibliotekę pod inna nazwą "Keyboard", załadowałem ją i zmieniłem linijkę:

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

na:

Keyboard klawiatura = Keyboard( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

Teraz wyskakuje błąd:

Arduino:1.8.5 (Windows 7), Płytka:"Arduino/Genuino Uno"

In file included from C:\Users\MICHA~1\AppData\Local\Temp\arduino_modified_sketch_828268\sketch_dec02b.ino:1:0:

E:\Elektronika\Arduino\libraries\Keyboard\src/Keyboard.h:29:2: warning: #warning "Using legacy HID core (non pluggable)" [-Wcpp]

 #warning "Using legacy HID core (non pluggable)"

  ^

sketch_dec02b:17: error: 'Keyboard' does not name a type

 Keyboard klawiatura = Keyboard( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury

 ^

C:\Users\MICHA~1\AppData\Local\Temp\arduino_modified_sketch_828268\sketch_dec02b.ino: In function 'void loop()':

sketch_dec02b:24: error: 'klawiatura' was not declared in this scope

   char klawisz = klawiatura.getKey();

                  ^

exit status 1
'Keyboard' does not name a type

Ten raport powinien zawierać więcej informacji jeśli w 
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"

Nie bardzo wiem o co chodzi 🙂 

Udostępnij ten post


Link to post
Share on other sites

@Mijaw92, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

Dnia 2.12.2018 o 21:00, Mijaw92 napisał:

Wyskoczył błąd, że podana biblioteka Keypad nie istnieje. Znalazłem tę bibliotekę pod inna nazwą "Keyboard", załadowałem ją i zmieniłem linijkę:

Jaką masz pewność, że to odpowiednia biblioteka? Jeśli wybrałeś inną bibliotekę to programy nie będą działały - zmiana nazwy to zdecydowanie za mało. Biblioteka używana w kursie jest cały czas dostępna na GitHubie - link znajduje się w artykule. Zainstaluj ją i na pewno wszystko zadziała 😉

Udostępnij ten post


Link to post
Share on other sites

@Treker mam pytanie czy dało by się dodać rysunki do drugiego kurs arduino tak jak w pierwszym?

@Mijaw92 mam tak samo i również nie wiem co zrobić

Udostępnij ten post


Link to post
Share on other sites

@brunobu, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

2 godziny temu, brunobu napisał:

@Treker mam pytanie czy dało by się dodać rysunki do drugiego kurs arduino tak jak w pierwszym?

O jakie rysunki dokładnie pytasz?

2 godziny temu, brunobu napisał:

@Mijaw92 mam tak samo i również nie wiem co zrobić

Zainstaluj poprawną bibliotekę i nie będzie problemu. To, że biblioteka nazywa się tak samo to nic nie znaczy. Trzeba zainstalować dokładnie tę, która jest używana w kursie (link do GitHuba znajduje się w artykule).

Udostępnij ten post


Link to post
Share on other sites

Na ten moment nie planujemy takich schematów montażowych w tym kursie, ale zapisuję na listę sugestii. Jest szansa, że przy kolejnej aktualizacji uda się dodać takie grafiki. Mam jednak nadzieję, że na tym poziomie kursu (po wykonaniu ćwiczeń z poprzedniej serii) nie powinno być już większych problemów z samodzielnym złożeniem opisywanych tu układów na podstawie dostarczonych zdjęć i opisów 🙂

Udostępnij ten post


Link to post
Share on other sites

Witam, przy próbie zrealizowania przycisku Reset za pomocą przerwania, układ wcale nie reaguje na wciśnięcie przycisku i alarm nadal jest włączony. Co może być tutaj problemem? Do tego mam jeszcze pytanie dotyczące kondensatora przy diodach programowalnych. W części gdzie były one omawiane zastosowano kondensator i rezystor. W tej części kursu nie został użyty kondensator (także użyłem tylko rezystora i wszystko działa). Mam jeszcze problem z drobnymi zakłóceniami na buzzerze bez generatora (bardzo cichy pisk o różnej intensywności, np. w trakcie stanu czuwania, kiedy dioda bardzo szybko miga buzzer bardzo cicho 'pipka' w tempie migania diody), jakie są metody na zniwelowanie takich zakłóceń? Materiał bardzo solidnie wytłumaczony, myśle że dobrym pomysłem są dłuższe programy. Poniżej załączam cały kod.

#include <Keypad.h>  //biblioteka ulatwiajaca kontakt z klawiatura
#include <Adafruit_NeoPixel.h>   //biblioteka od panelu z ledami

const byte ROWS = 4;   //ile wierszy
const byte COLS = 4;   //ile kolumn  //sa to stale dlatego const

byte rowPins[ROWS] = {5, 4, 3, 2};  //piny wierszy, chyba chodzi o to ze to wektor o wielkosci zadeklarowanej jako ROWS
byte colPins[COLS] = {6, 7, 8, 9};  //piny kolumn, wszystko widac na klawiaturze wystarczy sie przyjrzec

char keys[ROWS][COLS]=   //MAPOWANIE KLAWISZY, wychodzi na to ze to deklaracja macierzy o ROWS wierszach i COLS kolumnach składająca sięze znaków (char) o nazwie keys i wypisywane sa kolejne wiersze po przecinku 
  {
    {'1', '2', '3', 'A'},
    {'4', '5', '6', 'B'},
    {'7', '8', '9', 'C'},
    {'*', '0', '#', 'D'}
  };
  
  Keypad klawiatura = Keypad ( makeKeymap(keys), rowPins, colPins, ROWS, COLS);  //inicjalizacja klawiatury, po kolei mapa znakow klawiatury, piny wierszy, piny kolumn, liczba wierszy, liczba kolumn
  Adafruit_NeoPixel panelLED = Adafruit_NeoPixel(8, A1, NEO_GRB + NEO_KHZ800);
  
#define buzzer 13
#define kontaktron 10
#define czujnikRuchu 11
#define przyciskReset 1  //cos nie dziala 

char klawisz = 0; //zmienna typu znak, ktora przyjmuje wartosc znaku odpowiadajacego wcisnietemu klawiszowi, jezli zaden nie zostanie
int i=0;


volatile int stanAlarmu = 1;

byte pozycjaPinuAlarmu=1; //pozycja pinu, ktory musimy wpisac zeby bezpiecznei wejsc
char pinCyfra1 = '1';   //nasz pin uniewazniajacy alarm
char pinCyfra2 = '2';
char pinCyfra3 = '3';
char pinCyfra4 = '4';

int czasWpisywania = 0;   //czas wpisywania pinu, max mamy 5s, z kazdym wejsciem w case 3 mamy opoznienie 50ms i wtedy za kazdym razem dodajemy do tej zmiennej 50, kiedy bedzie 50000 to alarm

void setup() {

  attachInterrupt(digitalPinToInterrupt(przyciskReset), Reset, FALLING);
  
  Serial.begin(9600);
pinMode(buzzer, OUTPUT);             //ustawienie wyjsc/wejsc
pinMode(kontaktron, INPUT_PULLUP);
pinMode(czujnikRuchu, INPUT_PULLUP);
pinMode(przyciskReset, INPUT_PULLUP);  

panelLED.begin(); 
panelLED.show();



}

void loop() {
 

  switch (stanAlarmu)
  {
    case 1:    //stan 1 czyli czuwanie, system czeka na uzbrojenie (az bedziemy wychodzic z domu
      
        panelLED.setPixelColor(0, panelLED.Color(0, 20, 0)); //dioda swieci na zielono, system nie jest uzbrojony   
        panelLED.show();
        
        klawisz = klawiatura.getKey();
          if (klawisz=='A')  //jezeli wcisniemy A na klawiaturze to system przechodzi w 2gi stan
          {
            for( i=1; i<=7; i++)                   //taka animacja uzbrajania, ktora trwa ok. 10s
              {
                panelLED.setPixelColor(i, panelLED.Color(0, 0, 20));
                panelLED.show();
                tone(buzzer, (900+i*200),100);   //dzwiek do uzbrajania alarmu
                delay(710);
                
              }
            for(i=7; i>=1; i--) 
              {
                panelLED.setPixelColor(i, panelLED.Color(20, 0, 0));
                panelLED.show();
                tone(buzzer, (900+i*200),100);  //dzwiek do uzbrajania alarmu
                delay(710);
              }
            ZgaszeniePanelu();            
            stanAlarmu = 2;
            
            
          }
      break;
    case 2:   // stan 2 czyli uzbrojenie, uaktywnia sie on po wcisnieciu A na klawiaturze
        
        panelLED.setPixelColor(7, panelLED.Color(20, 0, 0));   //system uzbrojony, ostatnia dioda miga szybko na czerwono (zeby bylo widac ze sytem caly czas dziala
        panelLED.show();
        delay(50);
        panelLED.setPixelColor(7, panelLED.Color(0, 0, 0));
        panelLED.show();
        delay(50);  
       
          if(digitalRead(kontaktron)== HIGH)  //jezeli ktos otworzy drzwi - styki sie oddala, czyli stan wysoki bo nie laczy z masa to dajemy szanse na wpisanie kodu, czyli stan 3
            {
              stanAlarmu=3;
              czasWpisywania=0;
            }
              else
                {
                  if(digitalRead(czujnikRuchu)==HIGH) //jezeli czujnik wykryje ruch to stan 4 czyli od razu alarm
                  {
                    stanAlarmu=4;
                  }
                }

            
      
    
     break;
    case 3:
        delay(50);
        czasWpisywania=czasWpisywania+50;    
            
            klawisz = klawiatura.getKey();     //klawisz jest to znak, z klawisza ktory wciskamy (ten wynikajacy z mapowania
            if(klawisz)   //jezeli zostanie odebrana jakas wartosc z klawiatury
            {
              tone(buzzer, 1000, 50);
              if(pozycjaPinuAlarmu == 1 && klawisz == pinCyfra1)  //jezeli jestesmy na pozycji pierwszej i sie zgadza to idziemy dalej  jezeli nie od razu alarm itd
                {
                  
                  pozycjaPinuAlarmu=2;
                }
                  else
                  {
                    if(pozycjaPinuAlarmu == 2 && klawisz == pinCyfra2)
                      {
                        
                        pozycjaPinuAlarmu=3;
                      }
                        else
                          {
                              if(pozycjaPinuAlarmu == 3 && klawisz == pinCyfra3)
                                {
                                  
                                  pozycjaPinuAlarmu=4;             
                                      
                                 }
                                      else
                                        {
                                          if(pozycjaPinuAlarmu == 4 && klawisz == pinCyfra4)
                                            {
                                              
                                            
                                          pozycjaPinuAlarmu=1;
                                          stanAlarmu=1;
                                          delay(50);    //po to, zeby nie bylo charakterystycznej zmiany dzwieku na buzzerze przy ostatnim wcisnieciu                                      
                                            }
                                            else
                                            {
                                            stanAlarmu=4;
                                            }
                                        }
                          }

              }           
            }

            if(czasWpisywania >= 5000)  //jezeli zbyt dlugo wpisujemy (dluzej niz 5s) to wlacza sie alarm
            {
              stanAlarmu=4;
            }

      break;
    case 4:  //wlacza sie alarm
    
  for(i=0 ;i<=7;i=i+2)
        {
        panelLED.setPixelColor(i, panelLED.Color(255, 0, 0));
        panelLED.show();  
        panelLED.setPixelColor(i+1, panelLED.Color(0, 0, 255));
        panelLED.show();
        tone(buzzer, 3600+(i*100),40);
        delay(40);
        }
        
         for(i=6;i>=0;i=i-2)
            {
        panelLED.setPixelColor(i, panelLED.Color(0, 0, 255));
        panelLED.show();  
        panelLED.setPixelColor(i+1, panelLED.Color(255, 0, 0));
        panelLED.show();
        tone(buzzer, 3600+(i*100),40);
        delay(40);
       }      
   
      

    break;


    
  }

Serial.println(stanAlarmu);

}



    void ZgaszeniePanelu()
    {   
panelLED.clear();
panelLED.show();
    }

    void Reset()
    {
      stanAlarmu=1;
    }

 

Udostępnij ten post


Link to post
Share on other sites

Nie możesz używać pinów 0 i 1 jeśli używasz Serial.

@Treker - nie da się jakoś tej informacji wpleść w kurs? Bo ja już tyle razy to piszę że chyba wrzucę sobie do sygnaturki 🙂

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites
31 minut temu, ethanak napisał:

@Treker - nie da się jakoś tej informacji wpleść w kurs? Bo ja już tyle razy to piszę że chyba wrzucę sobie do sygnaturki 🙂

Będzie to (i nie tylko to) podczas wielkiego odświeżania kursu, ale trochę to jeszcze zajmie.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

@ethanak  Racja, zapomniałem usunąć tej linijki. Jednak po usunięciu problem nadal występuje, wiem że piny 0 i 1 są też wykorzystywane przy wgrywaniu programu na płytkę, a to udało się zrobić. Dla pewności sprawdziłem jeszcze czy bez jakiejkolwiek komunikacji z komputerem układ będzie działał poprawnie (podłączenie tylko do zasilacza) i przycisk resetu wtedy także nie działa. Dodam jeszcze, że z pinem 2 wszystko działa poprawnie, jednak nie rozumiem dlaczego bez komunikacji z komputerem wykorzzystanie pinu 1 także jest kłopotliwe.  Załączam jeszcze poprawiony kod. Cała reszta systemu oprócz przycisku Resetu działa prawiodłowo.

#include <Keypad.h>  //biblioteka ulatwiajaca kontakt z klawiatura
#include <Adafruit_NeoPixel.h>   //biblioteka od panelu z ledami

const byte ROWS = 4;   //ile wierszy
const byte COLS = 4;   //ile kolumn  //sa to stale dlatego const

byte rowPins[ROWS] = {5, 4, 3, 2};  //piny wierszy, chyba chodzi o to ze to wektor o wielkosci zadeklarowanej jako ROWS
byte colPins[COLS] = {6, 7, 8, 9};  //piny kolumn, wszystko widac na klawiaturze wystarczy sie przyjrzec

char keys[ROWS][COLS]=   //MAPOWANIE KLAWISZY, wychodzi na to ze to deklaracja macierzy o ROWS wierszach i COLS kolumnach składająca sięze znaków (char) o nazwie keys i wypisywane sa kolejne wiersze po przecinku 
  {
    {'1', '2', '3', 'A'},
    {'4', '5', '6', 'B'},
    {'7', '8', '9', 'C'},
    {'*', '0', '#', 'D'}
  };
  
  Keypad klawiatura = Keypad ( makeKeymap(keys), rowPins, colPins, ROWS, COLS);  //inicjalizacja klawiatury, po kolei mapa znakow klawiatury, piny wierszy, piny kolumn, liczba wierszy, liczba kolumn
  Adafruit_NeoPixel panelLED = Adafruit_NeoPixel(8, A1, NEO_GRB + NEO_KHZ800);
  
#define buzzer 13
#define kontaktron 11
#define czujnikRuchu 12
#define przyciskReset 1  

char klawisz = 0; //zmienna typu znak, ktora przyjmuje wartosc znaku odpowiadajacego wcisnietemu klawiszowi, jezli zaden nie zostanie
int i=0;


volatile int stanAlarmu = 1;

byte pozycjaPinuAlarmu=1; //pozycja pinu, ktory musimy wpisac zeby bezpiecznei wejsc
char pinCyfra1 = '1';   //nasz pin uniewazniajacy alarm
char pinCyfra2 = '2';
char pinCyfra3 = '3';
char pinCyfra4 = '4';

int czasWpisywania = 0;   //czas wpisywania pinu, max mamy 5s, z kazdym wejsciem w case 3 mamy opoznienie 50ms i wtedy za kazdym razem dodajemy do tej zmiennej 50, kiedy bedzie 50000 to alarm

void setup() {

  attachInterrupt(digitalPinToInterrupt(przyciskReset), Reset, FALLING);
  

pinMode(buzzer, OUTPUT);             //ustawienie wyjsc/wejsc
pinMode(kontaktron, INPUT_PULLUP);
pinMode(czujnikRuchu, INPUT_PULLUP);
pinMode(przyciskReset, INPUT_PULLUP);  

panelLED.begin(); 
panelLED.show();



}

void loop() {
 

  switch (stanAlarmu)
  {
    case 1:    //stan 1 czyli czuwanie, system czeka na uzbrojenie (az bedziemy wychodzic z domu
        
        panelLED.setPixelColor(0, panelLED.Color(0, 20, 0)); //dioda swieci na zielono, system nie jest uzbrojony   
        panelLED.show();
        
        klawisz = klawiatura.getKey();
          if (klawisz=='A')  //jezeli wcisniemy A na klawiaturze to system przechodzi w 2gi stan
          {
            for( i=1; i<=7; i++)                   //taka animacja uzbrajania, ktora trwa ok. 10s
              {
                panelLED.setPixelColor(i, panelLED.Color(0, 0, 20));
                panelLED.show();
                tone(buzzer, (900+i*200),100);   //dzwiek do uzbrajania alarmu
                delay(710);
                
              }
            for(i=7; i>=1; i--) 
              {
                panelLED.setPixelColor(i, panelLED.Color(20, 0, 0));
                panelLED.show();
                tone(buzzer, (900+i*200),100);  //dzwiek do uzbrajania alarmu
                delay(710);
              }
            ZgaszeniePanelu();            
            stanAlarmu = 2;
            
            
          }
      break;
    case 2:   // stan 2 czyli uzbrojenie, uaktywnia sie on po wcisnieciu A na klawiaturze
        
        panelLED.setPixelColor(7, panelLED.Color(20, 0, 0));   //system uzbrojony, ostatnia dioda miga szybko na czerwono (zeby bylo widac ze sytem caly czas dziala
        panelLED.show();
        delay(50);
        panelLED.setPixelColor(7, panelLED.Color(0, 0, 0));
        panelLED.show();
        delay(50);  
       
          if(digitalRead(kontaktron)== HIGH)  //jezeli ktos otworzy drzwi - styki sie oddala, czyli stan wysoki bo nie laczy z masa to dajemy szanse na wpisanie kodu, czyli stan 3
            {
              stanAlarmu=3;
              czasWpisywania=0;
            }
              else
                {
                  if(digitalRead(czujnikRuchu)==HIGH) //jezeli czujnik wykryje ruch to stan 4 czyli od razu alarm
                  {
                    stanAlarmu=4;
                  }
                }

            
      
    
     break;
    case 3:
        delay(50);
        czasWpisywania=czasWpisywania+50;    
            
            klawisz = klawiatura.getKey();     //klawisz jest to znak, z klawisza ktory wciskamy (ten wynikajacy z mapowania
            if(klawisz)   //jezeli zostanie odebrana jakas wartosc z klawiatury
            {
              tone(buzzer, 1000, 50);
              if(pozycjaPinuAlarmu == 1 && klawisz == pinCyfra1)  //jezeli jestesmy na pozycji pierwszej i sie zgadza to idziemy dalej  jezeli nie od razu alarm itd
                {
                  
                  pozycjaPinuAlarmu=2;
                }
                  else
                  {
                    if(pozycjaPinuAlarmu == 2 && klawisz == pinCyfra2)
                      {
                        
                        pozycjaPinuAlarmu=3;
                      }
                        else
                          {
                              if(pozycjaPinuAlarmu == 3 && klawisz == pinCyfra3)
                                {
                                  
                                  pozycjaPinuAlarmu=4;             
                                      
                                 }
                                      else
                                        {
                                          if(pozycjaPinuAlarmu == 4 && klawisz == pinCyfra4)
                                            {
                                              
                                            
                                          pozycjaPinuAlarmu=1;
                                          stanAlarmu=1;
                                          delay(50);    //po to, zeby nie bylo charakterystycznej zmiany dzwieku na buzzerze przy ostatnim wcisnieciu                                      
                                            }
                                            else
                                            {
                                            stanAlarmu=4;
                                            }
                                        }
                          }

              }           
            }

            if(czasWpisywania >= 5000)  //jezeli zbyt dlugo wpisujemy (dluzej niz 5s) to wlacza sie alarm
            {
              stanAlarmu=4;
            }

      break;
    case 4:  //wlacza sie alarm
    
  for(i=0 ;i<=7;i=i+2)
        {
        panelLED.setPixelColor(i, panelLED.Color(255, 0, 0));
        panelLED.show();  
        panelLED.setPixelColor(i+1, panelLED.Color(0, 0, 255));
        panelLED.show();
        tone(buzzer, 3600+(i*100),40);
        delay(40);
        }
        
         for(i=6;i>=0;i=i-2)
            {
        panelLED.setPixelColor(i, panelLED.Color(0, 0, 255));
        panelLED.show();  
        panelLED.setPixelColor(i+1, panelLED.Color(255, 0, 0));
        panelLED.show();
        tone(buzzer, 3600+(i*100),40);
        delay(40);
       }      
   
      

    break;

  case 5:
  ZgaszeniePanelu();
  stanAlarmu=1;
  break;

    
  }

Serial.println(stanAlarmu);

}



    void ZgaszeniePanelu()
    {   
panelLED.clear();
panelLED.show();
    }

    void Reset()
    {
      
      stanAlarmu=5;
      
    }

 

Udostępnij ten post


Link to post
Share on other sites
5 minut temu, damianloew napisał:

Dla pewności sprawdziłem jeszcze czy bez jakiejkolwiek komunikacji z komputerem układ będzie działał poprawnie (podłączenie tylko do zasilacza) i przycisk resetu wtedy także nie działa

Piny 0 i 1 są (w uproszczeniu, dotyczy Arduino UNO i całej reszty na ATmega 328) używane:

  • do wgrywania programu na płytkę
  • do komunikacji Serial
  • jako piny GPIO ogólnego przeznaczenia

Przy czym:

  • Jeśli coś jest podłączone do tych pinów, należy odłączyć to coś na czas wgrywania programu (nie zawsze jest to konieczne, ale warto się przyzwyczaić)
  • Jeśli używamy w programie Serial.cośtam() nie możemy z oczywistych przyczyn użyć tych pinów do innych celów.

Ogólnie: jeśli nie musimy, to nie używamy w programie tych pinów do innych rzeczy niż Serial, a jeśli już - to z pełną świadomością.

Nie jestem pewien, jak Arduino zareaguje na niezainicjalizowany Serial, ale została Ci jeszcze jedna linijka Serial.println().

 

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

@ethanak Usunąłem linijkę Serial.println z kodu oraz na czas wgrywania programu odłączyłem przewód z pinu 1. Nadal układ nie reaguje w żaden sposób na wciśnięcie przycisku. Dzięki za odpowiedzi, nie wiem dlaczego nadal przerwanie nie działa,  może w jakiś inny sposób użycie tego pinu nie jest możliwe. Na przyszłość będę unikał takich sytuacji.

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!

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