matixseo Napisano Grudzień 17, 2015 Udostępnij Napisano Grudzień 17, 2015 Zwracam sie z prośbą o mozliwoś stworzenia kodu programu na arduino. Przez naciśniecie przycisku ma zaczac mrugac dioda a po ponownym nacisnięciu ma sie ona wyłączyc. Cytuj Link do komentarza Share on other sites More sharing options...
piter161 Grudzień 17, 2015 Udostępnij Grudzień 17, 2015 Polecam ten kurs. Tam się dowiesz jak podłączyć i zaprogramować układ. 1 Cytuj Link do komentarza Share on other sites More sharing options...
FDS Styczeń 13, 2016 Udostępnij Styczeń 13, 2016 Może i banalnie sprawa wygląda. Kurs przeczytałem, jednak dla zabawy i nauki chciałem napisać taki program... i szczeka mi opadła bo nie wychodziło mi to. Podpowiecie jak to powinno wyglądac? Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Styczeń 13, 2016 Udostępnij Styczeń 13, 2016 Ile ciebie tam jest? Wklej co masz i co ci nie działa, zobaczymy co się z tym da zrobić. Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
prevud Styczeń 18, 2016 Udostępnij Styczeń 18, 2016 Może i banalnie sprawa wygląda. Kurs przeczytałem, jednak dla zabawy i nauki chciałem napisać taki program... i szczeka mi opadła bo nie wychodziło mi to. Podpowiecie jak to powinno wyglądac? Strzelam że nie uwzględniłeś drgań styków: http://mikrokontrolery.blogspot.com/2011/04/przycisk-drgania-stykow-debouncing.html Ta pętla wykonuje się pewnie tysiące razy na sekundę, jeśli więc przytrzymasz przycisk nawet przez 1 ms, to stan diody być może zmieni się wielokrotnie. Musisz napisać program tak, aby reagował na zmianę stanu przycisku, a nie na jego położenie. Drugi problem z jakim się zetkniesz to drgania, trzeba więc zrobić tzw. debouncing. Cytuj Link do komentarza Share on other sites More sharing options...
FDS Styczeń 19, 2016 Udostępnij Styczeń 19, 2016 Poradziłem sobie z tym. Podzielilem to na etapy. Pierwszy to taki który tylko włącza i wyłącza diodę. Drugi to ten który powoduje miganie Led. Działa ale tylko w pewnym przedziale opóźnienia. Doszkole się jeszcze i myślę że poradzę sobie z tym. Musiałbym zastosować przerwanie wywołane z przycisku. A co najgorsze, bardzo denerwuje mnie używanie funkcji delay, z wiadomych względów. Nie ukrywam że w programowaniu jestem zielony, zależy mi aby się nauczyć programować, nie dla zysków, nie dla pracy, ale dla samego siebie, dla hobby. Cytuj Link do komentarza Share on other sites More sharing options...
koik Styczeń 25, 2016 Udostępnij Styczeń 25, 2016 void setup() { pinMode(8, OUTPUT); //Dioda jako wyjście pinMode(7, INPUT_PULLUP); //Przycisk jako wejście digitalWrite(8, LOW); //Wyłączenie diody } void loop() { while (digitalRead(7) == HIGH){} { //Jeśli przycisk jest wciśnięty digitalWrite(8, LOW); //Czerwona wyłącz delay(1000); while (digitalRead(7) == HIGH){} digitalWrite(8, HIGH); //Czerwona włącz delay(1000); }} __________ Komentarz dodany przez: Treker Kod programu, dla lepszej czytelności, należy umieszczać w tagach . Proszę to poprawić. Cytuj Link do komentarza Share on other sites More sharing options...
smokehead Luty 25, 2016 Udostępnij Luty 25, 2016 Właśnie tego tematu szukałem, problem w tym że: while (digitalRead(7) == HIGH){} { //Jeśli przycisk jest wciśnięty digitalWrite(8, LOW); //Czerwona wyłącz delay(1000); zamiast delay 1s mam delay opisany przez potencjometr, który steruje częstotliwością migania diód while (digitalRead(7) == HIGH){} digitalWrite(8, HIGH); //Czerwona włącz delay(1000); zamiast delay 1s mam delay opisany przez potencjometr, który steruje częstotliwością migania diód Co w takim przypadku? __________ Komentarz dodany przez: Treker Kod programu, dla lepszej czytelności, należy umieszczać w tagach . Proszę to poprawić. Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Luty 25, 2016 Udostępnij Luty 25, 2016 Kolego, może Ty wiesz dokładnie o co Ci chodzi, ale przyznaj, że pytanie "Co w takim przypadku?" nie mówi zbyt wiele o tym co chcesz zrobić, prawda? Czy problemem jest to, że: - nie wiesz jak prosty delay() zamienić na opóźnienie zależne od potencjometru? - na to wskazują wytłuszczenia? - algorytm nie działa jak chcesz a wytłuszczeniami tylko wskazujesz różnice między tym co pokazujesz a Twoim rzeczywistym kodem w którym obsługujesz potencjometr? - program jest nieresponsywny, bo delay(1000) zamulają go dokumentnie? - a może jeszcze coś innego na co nie wpadłem? Cytuj Link do komentarza Share on other sites More sharing options...
smokehead Luty 25, 2016 Udostępnij Luty 25, 2016 Więc kod wygląda tak: int diodaPin = 7; int diodaPin1 = 6; int potPin = 0; int pot; int przerwa; int swit = 5; void setup() { pinMode(diodaPin, OUTPUT); pinMode(diodaPin1, OUTPUT); pinMode(swit, INPUT_PULLUP); digitalWrite(diodaPin, LOW); digitalWrite(diodaPin1, LOW); } void loop() { pot = analogRead(potPin); // odczytujemy A0 i zapisujemy w zmiennej pot przerwa = map(pot, 0, 1023, 50, 1000); while (digitalRead(swit) == HIGH){} { //Jeśli przycisk jest wciśnięty delay(500); digitalWrite(diodaPin, HIGH); delay(przerwa); // przerwa zależna od położenia potencjometru digitalWrite(diodaPin1, HIGH); delay(przerwa); // przerwa zależna od położenia potencjometru } //while (digitalRead(swit) == LOW){} { //Jeśli przycisk jest wciśnięty // delay(500); digitalWrite(diodaPin, LOW); delay(przerwa); // przerwa zależna od położenia potencjometru digitalWrite(diodaPin1, LOW); delay(przerwa); // przerwa zależna od położenia potencjometru //} } Aktualnie jak wcisne przycisk to wszystko działa w pętli, jak puszcze to przestaje. Ale nie wiem czego brakuje żeby wciśnięcie i puszczenie przycisku było inicjatorem do rozpoczęcia pętli a kolejne wciśnięcie i puszczenie przycisku do wyłączenia układu. __________ Komentarz dodany przez: Treker Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Luty 25, 2016 Udostępnij Luty 25, 2016 🙂 Teraz wszystko jasne. Jak pewnie już sam zrozumiałeś, Twój główny program musi pracować w dwóch stanach: mrugania i niemrugania. Przejście z jednego stanu do drugiego ma następować na skutek zdarzenia jakim jest naciśnięcie przycisku. Masz więc do zrobienia dwie (a może więcej, i to równolegle wykonywane) rzeczy:- - nadzorowanie przycisku czyli wczytywanie jego stanu, detekcja przyciśnięć i wygenerowanie zdarzenia "wciśnięto",- w reakcji na zdarzenie "wciśnięto" zmiana stanu programu/procesu mrugania,- proces mrugania który w zależności od aktulanego stanu ma mrugać lub nie. Jest to książkowy przykład bardzo prostego problemu nierozwiązywalnego jednak dobrze bez zmieny sposobu myślenia o tym co robi procesor. W sumie dobrze, że wymyśliłeś sobie takie zadanie teraz, bo być może nie będziesz kolejnym, który obchodzi takie rzeczy bokiem wstawiając nawet w duże, rozgałęzione programy z uporem maniaka delay() gdzie się da i próbując w międzyczasie sprawdzać przyciski. Masz dwa wyjścia: albo skorzystać z gotowego rozwiązania (nie najbardziej eleganckiego, ale działającego), albo wymyślić to (inaczej) samemu - być może z naszą pomocą. Gotowiec leży tutaj: https://learn.adafruit.com/multi-tasking-the-arduino-part-1/overview Jeśli chcesz samodzielnie nad tym popracować, daj znać a jeśli nie, napisz co zrozumiałeś ze wskazanego opisu i czy jesteś w stanie na tej podstawie rozwiązać swój problem mrugających diodek. Cytuj Link do komentarza Share on other sites More sharing options...
smokehead Luty 25, 2016 Udostępnij Luty 25, 2016 Dzięki za wyczerpującą informacje. Tak jak pisałem wcześniej jestem początkujący i w sumie rozumiem w czym tkwi problem, próbowałem obejść to na kilka sposobów lecz bezskutecznie, przycisk to jednak nie włącznik światła ON/OFF, na początku jak go podłączyłem to sam się zdziwiłem że działa to dwu stopniowo a nie jak przysłowiowy pstryczek. Raczej byłem pewien że wynika to z mojej nie wiedzy co oczywiście jest faktem, no ale Ty rozwiałeś wątpliwości w pewien sposób, jak najbardziej postaram się do czegoś dojść, bo nie mam zamiaru w sumie iść dalej skoro tu się zatrzymałem. Do lektury oczywiście się zabiorę i dam znać co zrozumiałem. Mam jeszcze jedno być może głupie pytanie, chodzi mi o schemat wyjście>rezystor>dioda>masa, widziałem inny schemat tego samego zagadnienia który zamieniał miejscami rezystor z diodą i odpowiedź padła że nie ma to znaczenia. Czyli wystarczy że w obiegu będzie rezystor bez znaczenia czy przed czy za diodą to i tak spełni swoje zadanie? Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Luty 25, 2016 Udostępnij Luty 25, 2016 Tak, kolejność jest bez znaczenia. Programowanie tzw. systemów wbudowanych (embedded systems) leży tak blisko drutów, diodek i tranzystorów, że niewiele zdziałasz bez choćby podstawowej znajomości elektroniki. W wolnym (np. od programowania Arduino 🙂 ) czasie zajrzyj może do naszych kursów. Są tam podstawy podstaw - na pewno się przydadzą. Dorosły PC od razu jest uzbrojony w monitory, klawiatury, myszy, głośniki i całą resztę tego dobytku. Właściwie można usiąść i od razu pisać kod który robi coś sensownego. Tutaj, by płyteczka z procesorem stała się użytecznym urządzeniem trzeba do niej coś podłączyć, bo sama stanowi jedynie martwy gadżet. No i to nie jest już takie proste jak wetknięcie wtyczki do gniazda USB w PC. Wtedy przydaje się wiedza z fizyki, mechaniki, elektroniki itd. Być może właśnie dlatego jest to takie ciekawe 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
smokehead Luty 25, 2016 Udostępnij Luty 25, 2016 Jak najbardziej:) Zanim doszedłem do Arduino(co w sumie długo nie trwało) to wziąłem w ręke lutownice i jakiś zestaw DIY - więc staram się rozwijać w każdym z potrzebnych kierunków. Akurat mam tak że jak się czymś zainteresuje to staram się zgłębiać wiedze dość sumiennie. Dodatkowo jestem użytkownikiem znanego forum e papierosowego i tam jak najbardziej tematy związane z elektroniką nie są obojętne, zresztą jak się podszkole troche w tych sprawach to pewnie nie omieszkam spróbować może nawet sklecić układ operujący w stopniu zadowalającym napięciem/mocą, może temperaturą i ogolnie prawem ohma bo to podstawa w tym temacie. Cytuj Link do komentarza Share on other sites More sharing options...
Gamer_1998 Kwiecień 20, 2021 Udostępnij Kwiecień 20, 2021 (edytowany) Witam. Ułożyłem tak kabelki i inne takie. Napisałem taki program jak poniżej. I po naciśnięciu przycisku nie zapala się dioda. Czy mógłby mi ktoś pomóc? const int przycisk1 = 1; // Definicja pinu do którego podłączony jest przycisk const int dioda = 2; // Definicja pinu do którego podłączona jest dioda int buttonState = 0; /* Stan niski (dioda zgaszona) w momencie gdy przycisk nie jest wcisniety*/ void setup() { pinMode(dioda, OUTPUT); // Ustawienie pinu 10 jako wyjście pinMode(przycisk, INPUT); // Ustawienie pinu 3 jako wejście } void loop() { if (digitalRead(przycisk) == HIGH) { // Sprawdzamy czy przycisk jest wciśnięty digitalWrite(dioda, HIGH); // Jeśli tak, zapala diodę } else { // W innym przypadku // Dioda zgaszona digitalWrite(dioda, LOW); } } Edytowano Kwiecień 21, 2021 przez Gieneq Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!