Skocz do zawartości

Tablica liderów


Popularna zawartość

Pokazuje zawartość z najwyższą reputacją 06.11.2016 we wszystkich miejscach

  1. 1 punkt
    Poprawione #define BUZZER 11 #define KONTAKTRON 10 #define PIR 12 #define ukryty 2 #include <Keypad.h> //biblioteka od klawiatury #include <Adafruit_NeoPixel.h> //biblioteka od linijki LED const byte ROWS = 4; // ile wierszy const byte COLS = 4; //ile kolumn byte rowPins[ROWS] = {5, 4, 3, 1}; //piny wierszy byte colPins[COLS] = {6, 7, 8, 9}; //piny kolumn 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 Adafruit_NeoPixel linijka = Adafruit_NeoPixel(8, A0, NEO_GRB + NEO_KHZ800); //konfiguracja linijki LED volatile int stanAlarmu = 1; int pinAlarmuPozycja = 1; char pinCyfra1 = '1'; char pinCyfra2 = '2'; char pinCyfra3 = '3'; char pinCyfra4 = '4'; void setup() { pinMode(BUZZER, OUTPUT); pinMode(KONTAKTRON, INPUT_PULLUP); pinMode(PIR, INPUT_PULLUP); pinMode(ukryty, INPUT_PULLUP); linijka.begin(); //inicjalizacja linijki linijka.show(); attachInterrupt(digitalPinToInterrupt(ukryty), stanAlarmu = 5, RISING); } void loop() { char klawisz = 0; //zmienna do przetrzymywania znakow z klawiatury int i = 0; //zmienna pomocnicza do pętli switch(stanAlarmu) { //Wykonywania akcji odpowiedniej dla danego stanu case 1: //Czuwanie linijka.setPixelColor(0, linijka.Color(0, 15, 0)); //Dioda nr 1 świeci na zielono linijka.show(); klawisz = klawiatura.getKey(); if (klawisz == 'A') { //Czy zubroic alarm? tone(BUZZER, 800); delay(100); tone(BUZZER, 900); delay(100); noTone(BUZZER); for (i = 1; i < 8; i++) { linijka.setPixelColor(i, linijka.Color(0, 0, 15)); //Dioda nr i świeci na niebiesko linijka.show(); delay(710); } // wykonanie tej petli zajmie okolo 5 sekund for (i = 1; i < 8; i++) { linijka.setPixelColor(i, linijka.Color(15, 0, 0)); //Dioda nr i świeci na czerwono linijka.show(); delay(710); } // wykonanie tej petli zajmie okolo 5 sekund wylaczDiody(); tone(BUZZER, 900); delay(100); tone(BUZZER, 800); delay(100); noTone(BUZZER); stanAlarmu = 2; } break; case 2: //Monitorowanie linijka.setPixelColor(7, linijka.Color(15, 0, 0)); //Dioda nr 8 świeci na czerwono linijka.show(); delay(50); linijka.setPixelColor(7, linijka.Color(0, 0, 0)); //Dioda nr 8 wylaczona linijka.show(); delay(50); if (digitalRead(PIR) == HIGH) { stanAlarmu = 4; //Natychmiast uruchamiamy alarm } else if (digitalRead(KONTAKTRON) == HIGH) { stanAlarmu = 3; //Szansa na rozbrojenie } break; case 3: //Rozbrajanie klawisz = klawiatura.getKey(); if (klawisz) { //Czy kolejna podana cyfra jest poprawna? if (pinAlarmuPozycja == 1 && klawisz == pinCyfra1) { //Jesli sprawdzamy 1 pozycje PINu pinAlarmuPozycja++; //Cyfra poprawna, mozna sprawdzic na kolejna tone(BUZZER, 1000, 50); } else if (pinAlarmuPozycja == 2 && klawisz == pinCyfra2) { //Jesli sprawdzamy 2 pozycje PINu pinAlarmuPozycja++; //Cyfra poprawna, mozna sprawdzic na kolejna tone(BUZZER, 1050, 50); } else if (pinAlarmuPozycja == 3 && klawisz == pinCyfra3) { //Jesli sprawdzamy 3 pozycje PINu pinAlarmuPozycja++; //Cyfra poprawna, mozna sprawdzic na kolejna tone(BUZZER, 1100, 50); } else if (pinAlarmuPozycja == 4 && klawisz == pinCyfra4) { //Jesli sprawdzamy 4 pozycje PINu tone(BUZZER, 1150, 50); delay(50); stanAlarmu = 1; //Wszystkie 4 cyfry kodu sa poprawne } else { stanAlarmu = 4; //Blad w kodzie PIN - wlacz alarm } } break; case 4: //Sygnalizacja alarmu for (i = 0; i < 8; i++) { if (i < 4) { linijka.setPixelColor(i, linijka.Color(255, 0, 0)); //Dioda nr i świeci na wybrany kolor tone(BUZZER, 3500, 100); } else { linijka.setPixelColor(i, linijka.Color(0, 0, 255)); //Dioda nr i świeci na wybrany kolor tone(BUZZER, 3000, 100); } linijka.show(); delay(100); } linijka.clear(); break; case 5: //Wylaczenie alarmu stanAlarmu = 1; break; } } void wylaczDiody() { int i = 0; for (i = 0; i < 8; i++){ linijka.setPixelColor(i, linijka.Color(0, 0, 0)); //Dioda nr 1 wylaczona } linijka.show(); } Ciekawa rzecz się wydarzyła kiedy dodałem przerwanie bez tego "case 5" (a w poleceniu dałem stanAlarmu = 1)
  2. 1 punkt
    tomekm, układ ten występuje w różnych wersjach (literki na końcu), można znaleźć wersje z zakresu 3,5-30V, 5-15V, 5-30V itd. Akurat nasza wersja LM311P może być zasilana napięciem z zakresu 3,5-30V, więc dziękuję za czujność - poprawiam w tekście Rutusowiec, najlepiej zrozumieć ten temat w praktyce Jeśli nie masz możliwości zbudowania takiego układu, to proponuję skorzystać z programu, w którym stworzyłem animację widoczną na poprzedniej stronie tego tematu: http://www.yenka.com/technology/ Będziesz mógł zbudować tam odpowiedni układ i pomierzyć wszystkie napięcia. Wtedy całość powinna być jasna
  3. 1 punkt
    Cześć! Na wstępie muszę pogratulować, bo fajny materiał dla początkujących (i dla tych bardziej zaawansowanych też, bo przecież zdarzy się czegoś zapomnieć) wyszedł. Mam wątpliwość co do opisu układu LM311, albo jest błąd, albo ja się mylę (cyfrowo tak 0 albo 1) Napisałeś, że napięcie zasilania może wynieść od 5V do 30V. Z kolei tutaj na 4 stronie dokumentacji od TI są podane rekomendowane wartości z zakresu 3.5V do 30V. Drobny błąd? Czy może po prostu korzystałeś z układu innego producenta, innej noty katalogowej? Wiem, że to raczej szczegół, ale rzucił mi się w oczy.
Tablica liderów jest ustawiona na Warszawa/GMT+01:00
×
×
  • Utwórz nowe...