Pomoc przy kodzir - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Pomoc przy kodzir (/watek-pomoc-przy-kodzir) |
Pomoc przy kodzir - serrfman - 13-12-2020 Witam jestem początkujący w tej dziedzinie. Napisałem kod dla schodów wzorując się filmikiem z YouTube ale nie mogę go zamknąć. Co jest nie tak. Zarys jest taki że mam arduino uno dwa czuiniki pir i 16 kanałowy przekaźnik. Ma się to włączać a później gasić czasy jeszcze do ustawienia więc się tym nie sugerowac jaki błąd popełniam w tym kodzie. void setup() { pinMode(A0, OUTPUT); //dioda jako wyjscie pinMode(A1, OUTPUT); //dioda jako wyjscie pinMode(A2, OUTPUT); //dioda jako wyjscie pinMode(A3, OUTPUT); //dioda jako wyjscie pinMode(A4, OUTPUT); //dioda jako wyjscie pinMode(A5, OUTPUT); //dioda jako wyjscie pinMode(1, OUTPUT); //dioda jako wyjscie pinMode(2, OUTPUT); //dioda jako wyjscie pinMode(3, OUTPUT); //dioda jako wyjscie pinMode(4, OUTPUT); //dioda jako wyjscie pinMode(5, OUTPUT); //dioda jako wyjscie pinMode(6, OUTPUT); //dioda jako wyjscie pinMode(7, OUTPUT); //dioda jako wyjscie pinMode(8, OUTPUT); //dioda jako wyjscie pinMode(9, OUTPUT); //dioda jako wyjscie pinMode(12, INPUT_PULLUP); //wejscie dół pinMode(13, INPUT_PULLUP); //wejscie góra } void loop() { if (digitalRead(12) == HIGH){ digitalWrite(A0, LOW); //wlacz diode Serial.print ("diody wlaczone 12"); delay (500); digitalWrite(A1, LOW); //wlacz diode delay (600); digitalWrite(A2, LOW); //wlacz diode delay (700); digitalWrite(A3, LOW); //wlacz diode delay (800); digitalWrite(A4, LOW); //wlacz diode delay (900); digitalWrite(A5, LOW); //wlacz diode delay (1000); digitalWrite(1, LOW); //wlacz diode delay (1100); digitalWrite(2, LOW); //wlacz diode delay (1200); digitalWrite(3, LOW); //wlacz diode delay (1400); digitalWrite(4, LOW); //wlacz diode delay (1500); digitalWrite(5, LOW); //wlacz diode delay (1600); digitalWrite(6, LOW); //wlacz diode delay (1800); digitalWrite(7, LOW); //wlacz diode delay (1900); digitalWrite(8, LOW); //wlacz diode delay (2000); digitalWrite(9, LOW); //wlacz diode Serial.print ("diody wlaczone 12"); delay (400); digitalWrite(A1, HIGH); //wylacz diode delay (500); digitalWrite(A2, HIGH); //wylacz diode delay (500); digitalWrite(A3, HIGH); //wylacz diode delay (500); digitalWrite(A4, HIGH); //wylacz diode delay (500); digitalWrite(A5, HIGH); //wylacz diode delay (500); digitalWrite(1, HIGH); //wylacz diode delay (500); digitalWrite(2, HIGH); //wylacz diode delay (500); digitalWrite(3, HIGH); //wylacz diode delay (500); digitalWrite(4, HIGH); //wylacz diode delay (500); digitalWrite(5, HIGH); //wylacz diode delay (500); digitalWrite(6, HIGH); //wylacz diode delay (500); digitalWrite(7, HIGH); //wylacz diode delay (500); digitalWrite(8, HIGH); //wylacz diode delay (500); digitalWrite(9, HIGH); //wylacz diode } if (digitalRead(13) == HIGH){ digitalWrite(9, LOW); //wlacz diode Serial.print ("diody wlaczone 13"); delay (500); digitalWrite(8, LOW); //wlacz diode delay (600); digitalWrite(7, LOW); //wlacz diode delay (700); digitalWrite(6, LOW); //wlacz diode delay (800); digitalWrite(5, LOW); //wlacz diode delay (900); digitalWrite(4, LOW); //wlacz diode delay (1000); digitalWrite(3, LOW); //wlacz diode delay (1100); digitalWrite(2, LOW); //wlacz diode delay (1200); digitalWrite(1, LOW); //wlacz diode delay (1400); digitalWrite(A5, LOW); //wlacz diode delay (1500); digitalWrite(A4, LOW); //wlacz diode delay (1600); digitalWrite(A3, LOW); //wlacz diode delay (1800); digitalWrite(A2, LOW); //wlacz diode delay (1900); digitalWrite(A1, LOW); //wlacz diode delay (2000); digitalWrite(A0, LOW); //wlacz diode Serial.print ("diody wlaczone 13"); delay (400); digitalWrite(9, HIGH); //wylacz diode delay (500); digitalWrite(8, HIGH); //wylacz diode delay (500); digitalWrite(7, HIGH); //wylacz diode delay (500); digitalWrite(6, HIGH); //wylacz diode delay (500); digitalWrite(5, HIGH); //wylacz diode delay (500); digitalWrite(4, HIGH); //wylacz diode delay (500); digitalWrite(3, HIGH); //wylacz diode delay (500); digitalWrite(2, HIGH); //wylacz diode delay (500); digitalWrite(1, HIGH); //wylacz diode delay (500); digitalWrite(A5, HIGH); //wylacz diode delay (500); digitalWrite(A4, HIGH); //wylacz diode delay (500); digitalWrite(A3, HIGH); //wylacz diode delay (500); digitalWrite(A2, HIGH); //wylacz diode delay (500); digitalWrite(A1, HIGH); //wylacz diode delay (500); digitalWrite(A0, HIGH); //wylacz diode } Za wszelką pomoc dziękuję RE: Pomoc przy kodzir - kaczakat - 13-12-2020 Zrób kurs Arduino. Używaj millis zamiast delay. Pinów 0 i 1 używaj w ostateczności, one służą do UART0 i wgrywania programu. Jakikolwiek kurs C/C++ i będziesz klepał mniej kodu. Np. piny led można ułożyć w tablice Kod: uint8_t led[]= {2,3,4,5,6,7,8,9,10,14,15,16,17,18,19}; //A0 to 14, itd W Twoim kodzie brakuje } na końcu by zamknąć loop(), jakbyś miał mniej linii kodu, to klikasz przy nawiasach {} i podświetla się jego druga część do pary, ale jak masz naklepane 50 linii zamiast 5 to ciężko to zauważyć. RE: Pomoc przy kodzir - serrfman - 13-12-2020 Myślałem też żeby użyć cd74hc4067 wtedy zostanie użyte tylko 4 piny na arduino plus 2x czujki. Czy to dobry pomysł czy lepiej zostać przy obecnej konfiguracji RE: Pomoc przy kodzir - kaczakat - 13-12-2020 Na tym etapie to nie ma znaczenia. Na pewno warto umieć wykorzystywać takie układy. RE: Pomoc przy kodzir - serrfman - 20-12-2020 int pin[14]={4,5,6,7,8,9,10,11,12,13,14,15,16,17}; int q = 0; byte s = 0; void setup() { Serial.begin(9600); pinMode( 2 , INPUT); pinMode( 3 , INPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(14, OUTPUT); pinMode(15, OUTPUT); pinMode(16, OUTPUT); pinMode(17, OUTPUT); } void loop() { // dół if (digitalRead(2) == LOW and s == 0){ for( q = 0; q < 13; q++ ){ digitalWrite( pin[q], HIGH );delay(500);} s = 1; } if (digitalRead(2) == LOW and s == 1 ){ for( q = 13; q >= 0; q-- ){ digitalWrite( pin[q], LOW );delay(200);} s = 0; } // góra if (digitalRead(3) == LOW and s == 0){ for( q = 13; q >= 0; q-- ){ digitalWrite( pin[q], HIGH );delay(500);} s = 1; } if (digitalRead(3) == LOW and s == 1){ for( q = 0; q < 13; q++ ){ digitalWrite( pin[q], LOW );delay(200);} s = 0; } } To stworzyem z pomoca forum, ale zawsze jest ale. Program wyzwala sie samoczynie i wpada w petle chodz czuiniki pir sr501 wogóle nie działają, dołaczyłem diody led do pir by widziec kiedy przekazują sygnał. Jeszcze chciałbym dopisac jeden pin który podczas odpalania pir właczał by zasilanie ledów i działał tak długo by zakonczyc wyłoczenie lub wyłaczenie wszystkich stopni. Ten pin miałyby priorytet jako pierwsszy i ostani. dziekuje wszytkim za pomoc |