Gieneq Październik 16, 2023 Udostępnij Październik 16, 2023 @Krigor wygląda w porządku. Jakby spadło poniżej 4 to może być problem. Po przełożeniu rezystorów jest poprawa?
LukaszWiktor Listopad 30, 2023 Udostępnij Listopad 30, 2023 Dlaczego na tym schemacie rezystory są przed diodami, tzn. przed anodą? Na wszystkich wcześniejszych schematach rezystory były za diodami, pomiędzy katodą a uziemieniem. Czy to błąd? Nie znam się, ale z tego co rozumiem, to tutaj jest dobrze, a na wszystkich wcześniejszych było źle. Czy to może nie ma znaczenia po której stronie diody jest rezystor?
Gieneq Listopad 30, 2023 Udostępnij Listopad 30, 2023 @LukaszWiktor witam i spieszę z pomocą: https://forbot.pl/blog/czy-kolejnosc-w-polaczeniu-szeregowym-ma-znaczenie-id16788 1
Santiago Listopad 30, 2023 Udostępnij Listopad 30, 2023 Ja z przyzwyczajenia daje pomiędzy uziemieniem a diodą.
LukaszWiktor Listopad 30, 2023 Udostępnij Listopad 30, 2023 @Gieneq dzięki za szybką odpowiedź i za wyjaśnienie!
Aguirre Grudzień 4, 2023 Udostępnij Grudzień 4, 2023 Pytanie: Jakie wartość zwróci przetwornik zbudowany na jednobitowym przetworniku A/C? Odpowiedz: Stosując opisaną w kursie metodę dzielę napięcie 5V przez 2. Dlaczego przez 2? 10-bitowy przetwornik zwraca 1024 różne liczby a 1 bitowy zwraca dwie. Tam podzielono 5V na 1024 ja analogicznie dzielę na 2. 5V / 2 daje wartość 2,5V Mamy więc: 0*2,5V = 0 1*2,5V = 2,5V I to wszystko innych wartości jak 0 lub 1 taki przetwornik nie zwróci. w Tym skrajnym przypadku uciekło nam 2,5V. Dla przetwornika 10 bitowego ta różnica na szczęście jest dużo mniejsza i w przykładach z tego kursu pewnie jest bez znaczenia ale z definicji skazuje nas na niemożność pomiaru napięcia równego 5V i wprowadza systematyczny błąd pomiaru.
binsswanger Grudzień 16, 2023 Udostępnij Grudzień 16, 2023 Dnia 19.01.2022 o 11:48, farmaceuta napisał: Bo nie sprawdzasz pinu analogowego w petli while...gdy zaswiecisz swiatlo to wartosc wzrosnie, ale Ty caly czas znajdujesz sie w while bo sprawdzasz wartosc ktora zostala zapisana przed wejsciem w while...poprostu tworzysz petle nieskonczona...raz wpadniesz i juz nigdy nie wyjdziesz... if(dane < 200){ digitalWrite(6, HIGH); Serial.println(dane); while(analogRead(A5) < 200) {} Tak to ma byc Dobra działa. Dzięki. Przyznaję nie kumam wszystkiego. Zależy mi na sprawdzeniu napięcia w momencie zapalenia diody. Gubi mnie ta pętla while. Dlaczego uzależniamy ją od fotorezystora a nie od zapalenia się diody? Rozumiem że można "wypluć" informację i tak i tak (chyba). Czy mógłby ktoś podesłać kod pod diodę a nie fotorezystor? (Mój kod uzależniony jest jeszcze od potencjometru. Mało to zmienia poza definicją prog zamiast konkretnej sztywnej wartości.) int odczytWartosci = 0; int prog = 0; float napiecie = 0; void setup() { Serial.begin(9600); //uruchomienie połączenia USART pinMode(8, OUTPUT); //dioda wyjście } void loop() { odczytWartosci = analogRead(A5); //odczytanie wartosci z fotorezystora prog = analogRead(A4); //potencjometr napiecie = odczytWartosci * (5.0/1024.0); if (odczytWartosci < prog) { digitalWrite(8, HIGH); //włączenie diody Serial.println(napiecie); //wysłanie napięcia na monit delay(1000); while(analogRead(A5) < prog){} } else { digitalWrite(8, LOW); //wyłączenie diody delay(25); } }
farmaceuta Grudzień 16, 2023 Udostępnij Grudzień 16, 2023 @binsswanger napisz konkretnie co chcesz napisać to coś się napisze 1
binsswanger Grudzień 17, 2023 Udostępnij Grudzień 17, 2023 @farmaceuta Śliczne dzięki! Fotorezystor wykrywa zmianę -> puszcza info na diodę -> dioda świeci się. Wydaje mi się ale chyba w kodzie powyżej to zmiana na fotorezystorze determinuje odczytanie wartości napięcia a nie zapalenie się diody. Chyba że to że Serial.pintln jest zaraz po digitalWrite(8, HIGH) to właśnie świadczy o tym że to moment zapalenia diody jest momentem odczytania wartości V. A drugi temat (jakby Ci się chciało) dlaczego pętla while jest w segmencie if a nie po wszystkim (na końcu) po else? I dlaczego tam jest (odczyt z A5 < wartość ustalona)? Jakoś to dla mnie nie jest intuicyjne. Nie da się tego jakoś inaczej zatrzymać?:) Czasami do zatrzymania używamy delay a czasami while. Siwy dym:D Przydałby się w tym szkoleniu jeden dodatkowy temat o zatrzymywaniu i o tym gdzie w kodzie ładować konkretne pętle i co w tedy uzyskujemy, jaki jest efekt (na początku, na końcu, środku, przed, po itd..)
binsswanger Grudzień 17, 2023 Udostępnij Grudzień 17, 2023 19 godzin temu, farmaceuta napisał: @binsswanger napisz konkretnie co chcesz napisać to coś się napisze Śliczne dzięki! Fotorezystor wykrywa zmianę -> puszcza info na diodę -> dioda świeci się. Wydaje mi się ale chyba w kodzie powyżej to zmiana na fotorezystorze determinuje odczytanie wartości napięcia a nie zapalenie się diody. Chyba że to że Serial.pintln jest zaraz po digitalWrite(8, HIGH) to właśnie świadczy o tym że to moment zapalenia diody jest momentem odczytania wartości V. A drugi temat (jakby Ci się chciało) dlaczego pętla while jest w segmencie if a nie po wszystkim (na końcu) po else? I dlaczego tam jest (odczyt z A5 < wartość ustalona)? Jakoś to dla mnie nie jest intuicyjne. Nie da się tego jakoś inaczej zatrzymać?:) Czasami do zatrzymania używamy delay a czasami while. Siwy dym:D Przydałby się w tym szkoleniu jeden dodatkowy temat o zatrzymywaniu i o tym gdzie w kodzie ładować konkretne pętle i co w tedy uzyskujemy, jaki jest efekt (na początku, na końcu, środku, przed, po itd..)
farmaceuta Grudzień 17, 2023 Udostępnij Grudzień 17, 2023 1 godzinę temu, binsswanger napisał: to właśnie świadczy o tym że to moment zapalenia diody jest momentem odczytania wartości V. Nie jest tak...napięcie jest obliczenie zanim wejdziesz w if'a ale dzie się to tak szybko że można przyjąć że obliczenie napięcia jest wtedy kiedy i zmiana stanu LED... 1 godzinę temu, binsswanger napisał: A drugi temat (jakby Ci się chciało) dlaczego pętla while jest w segmencie if a nie po wszystkim (na końcu) po else? A to już zależy czego aktualnie potrzebujemy...czasem pętlę są zagnieżdżone (pętla w pętli itp) bo tego wymaga sposób działania kodu, a czasem nie... 1 godzinę temu, binsswanger napisał: Nie da się tego jakoś inaczej zatrzymać?:) Raczej tak się pisze kod żeby właśnie nie zatrzymywać się w miejscu, a ewentualnie omijać kawałki kodu które aktualnie nie mają się wykonywać... 1 godzinę temu, binsswanger napisał: Przydałby się w tym szkoleniu jeden dodatkowy temat o zatrzymywaniu i o tym gdzie w kodzie ładować konkretne pętle i co w tedy uzyskujemy, jaki jest efekt (na początku, na końcu, środku, przed, po itd..) Hehe to by było trudne do uzyskania bo krótko mówiąc jest to sztuka budowania kodu...to programista ma wiedzieć jak, czego i gdzie używać...ktoś może Ci doradzić, pokazać parę trików, ale i tak to Ty musisz się sam nauczyć "czarować" tym wszystkim co dostarcza Ci konkretny język Generalnie ta pętla while nie jest tutaj do niczego potrzebna...w kodzie chodzi tylko o odczytanie napięcia i zapalenie diody, więc nic się nie stanie jeśli program będzie chodził w "kółko" gdy wartość fotorezystora < prog... if (odczytWartosci < prog) { digitalWrite(8, HIGH); //włączenie diody Serial.println(napiecie); //wysłanie napięcia na monit delay(1000); } else { digitalWrite(8, LOW); //wyłączenie diody delay(25); } 1 godzinę temu, binsswanger napisał: I dlaczego tam jest (odczyt z A5 < wartość ustalona)? Jakoś to dla mnie nie jest intuicyjne. Musi tak być żeby pętla while była skończona...zwróć uwagę że jest tam w warunku funkcja analogRead()..dzięki temu podczas każdego sprawdzania warunku pętli jest pobierana AKTUALNA! wartość z pinu analogowego i jeśli jego wartość osiągnie > prog pętla będzie mogła się zakończyć...gdyby tam była zmienna która nie jest aktualizowana w while, to wtedy while nigdy się nie zakończy, wpadniesz raz i już tam zostaniesz...może trochę zawile tłumaczę..jak coś to pytaj dalej
FTNewbie Marzec 12, 2024 Udostępnij Marzec 12, 2024 Moje solucje. Zapewne nie najlepsze Zadanie 4.5: #define GREEN_LED 8 #define YELLOW_LED 9 #define RED_LED 10 #define BUTTON 13 int readValuePotent = 0; int userTries = 0; String userInput = ""; bool isOver = false; bool isPotent = false; void setup() { pinMode(GREEN_LED, OUTPUT); pinMode(YELLOW_LED, OUTPUT); pinMode(RED_LED, OUTPUT); pinMode(BUTTON, INPUT_PULLUP); Serial.begin(9600); digitalWrite(GREEN_LED, LOW); digitalWrite(YELLOW_LED, LOW); digitalWrite(RED_LED, LOW); } void loop() { if (digitalRead(BUTTON) == LOW){ digitalWrite(GREEN_LED, LOW); digitalWrite(YELLOW_LED, LOW); digitalWrite(RED_LED, LOW); readValuePotent = analogRead(A4); Serial.println(readValuePotent); isPotent = true; } if(isPotent){ Serial.println("Podaj liczbę: "); while(Serial.available() == 0){} if (Serial.available() > 0){ userInput = Serial.readStringUntil('/n'); } while(!isOver){ if (readValuePotent - userInput.toInt() <= 50 && readValuePotent - userInput.toInt() >= -50){ digitalWrite(GREEN_LED, HIGH); digitalWrite(YELLOW_LED, LOW); isOver = true; }else if ((readValuePotent - userInput.toInt() >= 50 || readValuePotent - userInput.toInt() <= -50) && userTries < 2){ digitalWrite(YELLOW_LED, HIGH); Serial.println("Podaj liczbę: "); userTries = userTries + 1; while(Serial.available() == 0){}; userInput = Serial.readStringUntil('/n'); }else if (userTries == 2){ digitalWrite(YELLOW_LED, LOW); digitalWrite(RED_LED, HIGH); isOver = true; } } } isPotent = false; isOver = false; userTries = 0; delay(50); } Zadanie 4.6: #define LEFT_RED_LED 9 #define LEFT_YELLOW_LED 10 #define CENTER_GREEN_LED 11 #define RIGHT_YELLOW_LED 12 #define RIGHT_RED_LED 8 float readLeftPSensor = 0; float readRightPSensor = 0; int mapLeftPSensor = 0; int mapRightPSensor = 0; void setup() { Serial.begin(9600); pinMode(LEFT_RED_LED, OUTPUT); pinMode(LEFT_YELLOW_LED, OUTPUT); pinMode(CENTER_GREEN_LED, OUTPUT); pinMode(RIGHT_YELLOW_LED, OUTPUT); pinMode(RIGHT_RED_LED, OUTPUT); digitalWrite(LEFT_RED_LED, LOW); digitalWrite(LEFT_YELLOW_LED, LOW); digitalWrite(CENTER_GREEN_LED, LOW); digitalWrite(RIGHT_YELLOW_LED, LOW); digitalWrite(RIGHT_RED_LED, LOW); } void loop() { mapLeftPSensor = map(readLeftPSensor, 0, 910, 1, 100); mapRightPSensor = map(readRightPSensor, 0, 910, 1, 100); readLeftPSensor = analogRead(A5); readRightPSensor = analogRead(A4); if(mapLeftPSensor > mapRightPSensor && (mapLeftPSensor >= 0 && mapLeftPSensor < 50)){ digitalWrite(LEFT_YELLOW_LED, HIGH); // Turn on the main LED for this condition // Clear other LEDs digitalWrite(LEFT_RED_LED, LOW); digitalWrite(CENTER_GREEN_LED, LOW); digitalWrite(RIGHT_RED_LED, LOW); digitalWrite(RIGHT_YELLOW_LED, LOW); }else if(mapLeftPSensor > mapRightPSensor && (mapLeftPSensor > 50 && mapLeftPSensor <= 100)){ digitalWrite(LEFT_RED_LED, HIGH); // Turn on the main LED for this condition digitalWrite(LEFT_YELLOW_LED, LOW); digitalWrite(CENTER_GREEN_LED, LOW); digitalWrite(RIGHT_RED_LED, LOW); digitalWrite(RIGHT_YELLOW_LED, LOW); }else if(mapRightPSensor > mapLeftPSensor && (mapRightPSensor > 0 && mapRightPSensor <= 50)){ digitalWrite(RIGHT_YELLOW_LED, HIGH); // Turn on the main LED for this condition // Clear other LEDs digitalWrite(RIGHT_RED_LED, LOW); digitalWrite(CENTER_GREEN_LED, LOW); digitalWrite(LEFT_YELLOW_LED, LOW); digitalWrite(LEFT_RED_LED, LOW); }else if(mapRightPSensor > mapLeftPSensor && (mapRightPSensor > 50 && mapRightPSensor <= 100)){ digitalWrite(RIGHT_RED_LED, HIGH); // Turn on the main LED for this condition // Clear other LEDs digitalWrite(RIGHT_YELLOW_LED, LOW); digitalWrite(CENTER_GREEN_LED, LOW); digitalWrite(RIGHT_YELLOW_LED, LOW); digitalWrite(LEFT_RED_LED, LOW); }else if(mapRightPSensor == mapLeftPSensor){ digitalWrite(CENTER_GREEN_LED, HIGH); // Turn on the main LED for this condition // Clear other LEDs digitalWrite(LEFT_RED_LED, LOW); digitalWrite(LEFT_YELLOW_LED, LOW); digitalWrite(RIGHT_RED_LED, LOW); digitalWrite(RIGHT_YELLOW_LED, LOW); } Serial.println("Left Sensor: " + String(readLeftPSensor)); Serial.println("map Left Sensor: " + String(mapLeftPSensor)); Serial.println("Right Sensor: " + String(readRightPSensor)); Serial.println("map Right Sensor: " + String(mapRightPSensor)); delay(1000); } 1
Elendil Czerwiec 5, 2024 Udostępnij Czerwiec 5, 2024 Bardziej epicki "wskaźnik na diodach" #define NUMBER_OF_LEDS 7 #define RED_HIGH 7 #define RED_LOW 6 #define YELLOW_HIGH 5 #define YELLOW_LOW 4 #define GREEN_HIGH 3 #define GREEN_LOW 2 #define BLUE 1 #define ANALOG_IN A5 void setup() { pinMode(RED_HIGH, OUTPUT); pinMode(RED_LOW, OUTPUT); pinMode(YELLOW_HIGH, OUTPUT); pinMode(YELLOW_LOW, OUTPUT); pinMode(GREEN_HIGH, OUTPUT); pinMode(GREEN_LOW, OUTPUT); pinMode(BLUE, OUTPUT); resetLeds(); } void loop() { int value = analogRead(ANALOG_IN); /* Read the Input */ resetLeds(); /* Temporarly (or not) set LOW to all LEDs */ value = map(value, 0, 1023, 1, NUMBER_OF_LEDS); /* Scale to scopes */ switch(value) { case 7: digitalWrite(RED_HIGH, HIGH); /* Intentional fall-through */ case 6: digitalWrite(RED_LOW, HIGH); /* Intentional fall-through */ case 5: digitalWrite(YELLOW_HIGH, HIGH); /* Intentional fall-through */ case 4: digitalWrite(YELLOW_LOW, HIGH); /* Intentional fall-through */ case 3: digitalWrite(GREEN_HIGH, HIGH); /* Intentional fall-through */ case 2: digitalWrite(GREEN_LOW, HIGH); /* Intentional fall-through */ case 1: digitalWrite(BLUE, HIGH); } delay(50); /* Time to enjoy */ } void resetLeds(){ digitalWrite(RED_HIGH, LOW); digitalWrite(RED_LOW, LOW); digitalWrite(YELLOW_HIGH, LOW); digitalWrite(YELLOW_LOW, LOW); digitalWrite(GREEN_HIGH, LOW); digitalWrite(GREEN_LOW, LOW); digitalWrite(BLUE, LOW); } 1
T101 Wrzesień 19, 2024 Udostępnij Wrzesień 19, 2024 int leftValue = 0; int rightValue = 0; int roznica = 0; void setup() { Serial.begin(9600); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); } void loop() { leftValue = analogRead(A5); rightValue = analogRead(A2); Serial.println(leftValue); Serial.println(rightValue); if (leftValue > rightValue && leftValue - rightValue > 500) { digitalWrite(6, HIGH); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } else if (rightValue - leftValue && rightValue - leftValue > 500) { digitalWrite(10, HIGH); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(6, LOW); } else if (leftValue > rightValue && leftValue - rightValue < 500 && leftValue - rightValue > 50 ) { digitalWrite(7, HIGH); digitalWrite(6, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } else if (rightValue > leftValue && rightValue - leftValue < 500 && rightValue - leftValue > 50 ) { digitalWrite(9 ,HIGH); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(6, LOW); digitalWrite(10, LOW); } else { digitalWrite(8, HIGH); digitalWrite(7, LOW); digitalWrite(6, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } delay(2000); } Witam. W zadaniu 4.6 powiązałem zapalanie diod z natężeniem światła. Czy mniej więcej na tym polegało zadanie 4.6?
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ę »