bartleo Styczeń 17, 2018 Udostępnij Styczeń 17, 2018 Witam serdecznie..., takie coś mi wyszło z zadania 4.4, być może było, ale działa..., postaram się powalczyć z 4.5 #define dioda 8 //definiowanie pinu 8 int swiatlo = 0; //zmienna czujnika swiatla float prog = 0; //zmienna potencjometru String v = ""; //zmienna napięcia boolean swieci = false; //sprawdzamy czy swieci void setup() { pinMode(dioda, OUTPUT); //inicjujemy diode Serial.begin(9600); //inicjujemy UART } void loop() { swiatlo = analogRead(A5); //odczyt swiatla prog = analogRead(A4); //odczyt napięcia v = (prog * (5.0 / 1023.0)); // przeliczenie voltów if (swieci == false) { //sprawdzmy czy swieci if (swiatlo < prog) { //jesli wartosc napiecia na dzielniku jest mniejsza od wartosci potencjometru digitalWrite(dioda, HIGH); //dioda wlaczona Serial.println(v); // wyswietl na monitorze napiecie swieci = true; //wlaczona czyli prawda delay(250); // opoznienie 250 } } else if (swiatlo > prog) { //jeszcze jesli wartosc napiecia na dzielniku jest wieksza od potencjometru digitalWrite(dioda, LOW); //dioda wylaczona swieci = false; //wylaczona czyli falsz } } Pozdrawiam PS Swietny kurs .
Treker (Damian Szymański) Styczeń 18, 2018 Udostępnij Styczeń 18, 2018 bartleo, witam na forum, cieszę się, że kurs się podoba - powodzenia w dalszej nauce
peter-wawa1 Luty 21, 2018 Udostępnij Luty 21, 2018 int foto1 = 0; //zmienna do przechowywania adc fotorezystora1 int foto2 = 0; //zmienna do przechowywania adc fotorezystora2 byte foto1map = 0; byte foto2map = 0; void setup() { for(int x=2; x<=6; x++) { pinMode(x, OUTPUT); } //ustawienie portów od 2 do 6 jako wyjscia for(int x=2; x<=6; x++) { digitalWrite(x, HIGH); } //ustawienie wyjsc na stan wysoki Serial.begin(9200); } void loop() { foto1 = analogRead(A5);// wartosc czujnika swiatla foto2 = analogRead(A4); // wartosc potencjometru Serial.print("Napiecie czujnika1 : "); Serial.println(foto1*(5.0/1023.0)); Serial.print("Napiecie czujnika2 : "); Serial.println(foto2*(5.0/1023.0)); //wyswietlenie wartosc napiecia czujnikow delay(200); foto1map = map(foto1, 100, 700, 4, 2); foto2map = map(foto2, 100, 700, 4, 6); //mapowanie czujnikow Serial.print("mapowanie czujnika1 : "); Serial.println(foto1map); Serial.print("mapowanie czujnika2 : "); Serial.println(foto2map); //wyswietlenie wartosc mapowania czujnikow delay(200); if(foto1map == foto2map) { digitalWrite(4, LOW); for(int x=2; x<=6; x++) { digitalWrite(x, HIGH); }} if((foto1map <= 4) && (foto1map <= foto2map)) { //ustawienie linijki w prawo for(int a=4; a>=2; a--) { digitalWrite(a, HIGH); } digitalWrite(foto1map, LOW); } if((foto2map >= 4) && (foto2map >= foto1map)) { //ustawienie linijki w lewo for(int b=4; b<=6; b++) { digitalWrite(b, HIGH); } digitalWrite(foto2map, LOW); } } Witam, nie rozumiem dlaczego w (ustawienie linijki w prawo) dioda led 4 nie jest w stanie wysokim, a w (ustawienie linijki w lewo) jest w ok.
Treker (Damian Szymański) Marzec 6, 2018 Udostępnij Marzec 6, 2018 peter-wawa1, trochę ciężko analizować Twój program przy takim formatowaniu i braku komentarzy. Możesz dokładniej opisać jakiego efektu się spodziewałeś, a co dokładnie się dzieje inaczej?
Daggett Marzec 11, 2018 Udostępnij Marzec 11, 2018 Może ktoś powiedzieć mi jaka jest odpowiedź do zadania 4.1 bo nie znalazłem w komentarzach. Zauważyłem, że jak potencjometr je na "maxa" obrócony i delay wynosi 0 to dioda świeci słabiej tylko nie wiem dlaczego tak się dzieje.
Daggett Marzec 13, 2018 Udostępnij Marzec 13, 2018 Przy okazji możecie sprawdzić moje pozostałe zadania. Chyba jedyny problem jaki z nimi mam to z 4.6 gdyż dioda najbardziej po lewej czyli na pinie 12 nie chce mi się zaświecić. Nie wiem czy to problem z programem czy po prostu nie osiągnąłem takiej różnicy na dzielnikach, żeby się zaświeciła. Z góry bardzo dziękuję 4.4 int odczytanaWartosc = 0; int naszLimit = 0; float napiecie = 0; void setup() { pinMode(8, OUTPUT); Serial.begin(9600); } void loop() { odczytanaWartosc = analogRead(A5); naszLimit = analogRead(A4); napiecie = odczytanaWartosc * (5.0/1023.0); if (odczytanaWartosc < naszLimit) { digitalWrite(8, HIGH); Serial.println(napiecie); while (odczytanaWartosc < naszLimit){ odczytanaWartosc = analogRead(A5); naszLimit = analogRead(A4); delay(50); } } else { digitalWrite(8, LOW); } delay(50); } 4.5 #define zielona 8 #define zolta 9 #define zolta2 10 #define czerwona 11 #define przycisk 7 String odebraneDane = ""; int naszaLiczba = 0; boolean reset = true; int proby = 0; int liczba = 0; void setup () { Serial.begin(9600); pinMode(zielona,OUTPUT); pinMode(zolta,OUTPUT); pinMode(zolta2,OUTPUT); pinMode(czerwona,OUTPUT); pinMode(7,INPUT_PULLUP); } void loop () { if(reset == true){ reset = !reset; proby = 0; Serial.println("Przekręć potencjometr i wciśnij przycisk"); liczba = analogRead(A5); while(digitalRead(przycisk) == HIGH) {} digitalWrite(zielona,LOW); digitalWrite(zolta,LOW); digitalWrite(zolta2,LOW); digitalWrite(czerwona,LOW); Serial.println("Podaj liczbę:"); } if(Serial.available()>0){ odebraneDane = Serial.readStringUntil('\n'); naszaLiczba = odebraneDane.toInt(); if(naszaLiczba>liczba-50 and naszaLiczba<liczba+50){ digitalWrite(zielona,HIGH); digitalWrite(zolta,LOW); digitalWrite(zolta2,LOW); reset = !reset; } if(naszaLiczba<liczba-50 or naszaLiczba>liczba+50){ proby = proby+1; if(proby==1) digitalWrite(zolta,HIGH); if(proby==2) digitalWrite(zolta2,HIGH); if(proby==3){ digitalWrite(czerwona,HIGH); reset = !reset; } } } } 4.6 void setup(){ Serial.begin(9600); pinMode(8,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT); } void loop(){ czujnikLewy = analogRead(A3); czujnikPrawy = analogRead(A5); roznica = czujnikLewy - czujnikPrawy; naszaSkala = map(roznica,-1023,1023,1,5); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); if(naszaSkala == 1) //1 oznacza ze duzo wiecej swiatla po prawej stronie digitalWrite(8,HIGH); if(naszaSkala == 2) digitalWrite(9,HIGH); if(naszaSkala == 3) digitalWrite(10,HIGH); // 3 oznacza ze mniej wiecej po rowno swiatla if(naszaSkala == 4) digitalWrite(11,HIGH); if(naszaSkala == 5) //5 oznacza ze duzo wiecej swiatla po lewej stronie digitalWrite(12,HIGH); delay(50); }
Treker (Damian Szymański) Marzec 15, 2018 Udostępnij Marzec 15, 2018 Daggett, układ nie radzi sobie zbyt dobrze z pomiarem napięcia, gdy jest one bliskie napięciu zasilania (5V). Mogą wtedy wystąpić pewne zakłamania w odczytach przy maksymalnie skręconym potencjometrze. Jeśli chodzi o pozostałe programy to pamiętaj na przyszłość o większej liczbie komentarzy - będzie wtedy jeszcze lepiej Powodzenia w dalszej nauce!
nightwalker24 Kwiecień 5, 2018 Udostępnij Kwiecień 5, 2018 witam mam pytanie czy wejścia analogowe można wykorzystać do przycisków we czujnika ruchu
Lukaszm Kwiecień 5, 2018 Udostępnij Kwiecień 5, 2018 Tak, wejścia analogowe można bez problemu wykorzystywać jako wejścia cyfrowe (trzeba odpowiednio skonfigurować pin).
Iwanow Czerwiec 10, 2018 Udostępnij Czerwiec 10, 2018 Ciekawostka co do układu: "Lampka uruchamiana w ciemności", śmiesznym efekt otrzymamy gdy wygniemy diodę w stronę fotorezystora (w nocy to piszę gdy panuje ciemność) otrzymamy migającą diodę. Niby bzdura a cieszy, bo dioda sama daje światło które ją wyłącza a później fotorezystor sam ja włącza 1
Treker (Damian Szymański) Czerwiec 11, 2018 Udostępnij Czerwiec 11, 2018 Iwanow, witam na forum! Dokładnie tak, dlatego podkreślam zawsze, że warto robić wiele własnych eksperymentów (również tych nieopisane w kursie) - zawsze można znaleźć coś ciekawego. Gratuluję spostrzegawczości!
Irena Wrzesień 5, 2018 Udostępnij Wrzesień 5, 2018 Może jest już gdzies odpowiedź na moje pytanie ale nawet nie wiem gdzie jej szukać. Wykonując kolejne ćwiczenia z Arduino składam układ z płytką potem wpisuję program na komputerze, podłączam Arduino do komputera, kompiluję i wgrywam. Mam pytanie czy można tak robić cały czas? Czy nie trzeba by zresetować Arduino po zakończonym jednym ćwiczeniu? Arduino ma wgrany poprzedni program a połączenia układu z kolejnego ćwiczenia. Czy nie trafi się tak, że się coś uszkodzi?
marek1707 Wrzesień 5, 2018 Udostępnij Wrzesień 5, 2018 Masz rację, trzeba na to zwracać uwagę. Szczególnie zagrożone są projekty w których procesor może zrobić coś poważnie głupiego sterując swoimi wyjściami w nieprawidłowy (w sensie układu) sposób. Oczywistym przykładem jest prosty driver silnika, w którym żądanie jednoczesnej jazdy w prawo i w lewo powoduje zwarcie zasilania i spalenie tranzystorów. Niemiła będzie też sytuacja w której wyjście procesora w dawnym układzie jest wejściem w nowym. Sygnał doprowadzony np. z przycisku czy innego scalaka napotyka wtedy sygnał z procesora i mamy konflikt, w którym nikt nie wygrywa a duży prąd może zniszczyć delikatną strukturę krzemową chipu. Robiąc też coraz większe konstrukcje istnieje możliwość, że nawet poprawne elektrycznie sygnały, ale wysyłane do innego układu spowodują uszkodzenia mechaniczne, np. ramię robota wyposażone w serwa może połamać im tryby gdy procesor sterowany dziwnym programem zacznie wysyłać komendy ustawiania poszczególnych stawów w położenia nieprzewidziane projektem. Masz dwa wyjścia - albo wgrywać nowy program zanim zmontujesz kolejny układ, albo po zakończeniu zabawy z jednym wgrywać pusty kod. Możesz po prostu zażądać w IDE pusty program (tylko setup i loop nie robiące nic), skompilować to i wgrać. Coś takiego nie aktywuje żadnego pinu procesora i na to nowy układ powinien być odporny. 2
Tangman Wrzesień 13, 2018 Udostępnij Wrzesień 13, 2018 Cześć, zaczynam dopiero przygodę z programowaniem: starałem się używać instrukcji, które do tej pory poznałem podczas kursu: // definiowanie #define red_1 2 #define yellow_1 3 #define green 4 #define yellow_2 5 #define red_2 6 // zmienne int fotorez_1 = 0; // wartość fotorezystora pierwszego A4 int fotorez_2 = 0; // wartość fotorezystora drugiego A5 int fotorez; // wynik dzielenia int prog_1 = 2; // próg dla załaczenia pierwszej diody int prog_2 = 4; // próg dla załaczenia drugiej diody void setup() { // przypisanie zdefiniowanych wyżej pinów jako WYJŚCIA pinMode(red_1, OUTPUT); pinMode(yellow_1, OUTPUT); pinMode(green, OUTPUT); pinMode(yellow_2, OUTPUT); pinMode(red_2, OUTPUT); Serial.begin(9600); // prędkość przesyłania } void loop() { fotorez_1 = analogRead(A5); // przypisz wartość wejścia A4 do zmiennej fotorez_2 = analogRead(A4); // przypisz wartość wejścia A5 do zmiennej Serial.print(fotorez_1); //wartości wyswietlone na monitorze Serial.print(" "); //dla lepszej czytelności Serial.print(fotorez_2); Serial.print(" "); Serial.println(fotorez); delay(200); // FOTOREZYSTOR 1 if (fotorez_1 > fotorez_2) { // WARUNEK OGÓLNY 1 Jeżeli wartość pierwszego fotorezystora większa. fotorez = fotorez_1 / fotorez_2; // Obliczenie wartości zmiennej dla powyższego przypadku digitalWrite(yellow_2, 0); //jeżeli fotorezystor 1 ma większę wartość diody po prawej muszę zgasnąć digitalWrite(red_2, 0); if (fotorez < prog_1) { //ZIELONA digitalWrite(green, 1); digitalWrite(yellow_1, 0); digitalWrite(red_1, 0); } if (fotorez < prog_2 & fotorez >= prog_1) { //ZIELONA, ŻÓŁTA digitalWrite(green, 1); digitalWrite(yellow_1, 1); digitalWrite(red_1, 0); } if (fotorez >= prog_2) { //ZIELONA, ŻÓŁTA, CZERWONA digitalWrite(green, 1); digitalWrite(yellow_1, 1); digitalWrite(red_1, 1); } } // FOTOREZYSTOR 2 if (fotorez_2 > fotorez_1) { // WARUNEK OGÓLNY 2 Jeżeli wartość pierwszego fotorezystora większa. fotorez = fotorez_2 / fotorez_1; // Obliczenie wartości zmiennej dla powyższego przypadku digitalWrite(yellow_1, 0); digitalWrite(red_1, 0); if (fotorez < prog_1) { //ZIELONA digitalWrite(green, 1); digitalWrite(yellow_2, 0); digitalWrite(red_2, 0); } if (fotorez < prog_2 & fotorez >= prog_1) { //ZIELONA, ŻÓŁTA digitalWrite(green, 1); digitalWrite(yellow_2, 1); digitalWrite(red_2, 0); } if (fotorez >= prog_2) { //ZIELONA, ŻÓŁTA, CZERWONA digitalWrite(green, 1); digitalWrite(yellow_2, 1); digitalWrite(red_2, 1); } } }
Pomocna odpowiedź
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ę »