Skocz do zawartości

piret

Użytkownicy
  • Zawartość

    5
  • Rejestracja

  • Ostatnio

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Koszalin

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

Osiągnięcia użytkownika piret

Młodszy odkrywca

Młodszy odkrywca (3/19)

  • Za 5 postów
  • To już rok!
  • To już 5 lat!

Odznaki

1

Reputacja

  1. Mam pytanie. Na początku artykułu, przy okazji wykresów jest mowa o najnowszej wersji IDE. Która jest nowsza: - 1.6.9 z Arduino.cc - 1.7.10 z Arduino.org Zainstalowałem większy numerek, ale opcji "Monitor portu szeregowego" w niej nie ma, jest tylko "Monitor szeregowy" czyli zwykły terminal. Jak zrobić wykres?
  2. Rozrzut parametrów na poziomie 25%. W tym samym oświetleniu jeden 1010ohm, a drugi 1280ohm. Dokładając 5% oporniki z zestawu raczej trudno o prawidłowy pomiar, ale w układzie docelowym można wprowadzić regulowany dzielnik do ich korekcji. Można trochę więcej o tym "nieszablonowym" podejściu.
  3. zad.4.6 Największym problemem jest dobranie fotorezystorów i ich dzielników tak, aby wskazania były przynajmniej podobne dla podobnego oświetlenia. Niestety, fotorezystory z zestawu mają bardzo duży rozrzut parametrów. Ale dość narzekania: #define zielona 2 // przypisanie kolorów diod do pinów, #define Lzolta 4 // wybór pinów został uależniony #define Lczerwona 7 // od metody obliczeń, #define Pzolta 6 // prosta formuła wybiera nam #define Pczerwona 5 // odpowiednią diodę #define niebieska 3 // sygnalizacja braku oświetlenia int leweOko = 0; // Zmienna do przechowywania odczytu ADC int praweOko = 0; // Zmienna do przechowywania odczytu ADC int czulosc = 100; // współczynnik przeskalowania wartości z ADC float prog = 10.0; // dolny próg oświetlenia jako procent maksymalnej jasności int kierunek = 0; // ustalenie kierunku 0 - na wprost, 1 - lewo, 3 - prawo (3 dla uproszczenia obliczeń) int wielkosc = 0; // wielkość kąta odchylenia od osi 0 - brak, 1 - małe (do np.20 stopni), 2 - duże (np. 45 stopni) void setup() { for( int i = 1; i < 7; i++) // po kolei { pinMode(i, OUTPUT); // ustawiamy piny jako wyjścia digitalWrite(i, LOW); // wygaszamy podpięte do nich diody } Serial.begin(9600); // ustawienie prędkości transmisji prog = (prog * czulosc) / 100.0; // próg czułości układu fotorezystorów } void loop() { leweOko = analogRead(A1); // odczyt z lewego oka leweOko = map(leweOko, 0, 1023, 0, czulosc); praweOko = analogRead(A2); // odczyt z prawego oka praweOko = map(praweOko, 0, 1023, 0, czulosc); if ((leweOko + praweOko) <= prog) // jeżeli jest bardzo ciemno { digitalWrite(niebieska, HIGH); // sygnalizujemy to i program czeka aż będzie jaśniej } else // mamy dość światła do działania { Serial.print("lewe = "); Serial.println(leweOko); Serial.print("prawe = "); Serial.println(praweOko); int roznica = leweOko - praweOko; // ustalenie kierunku if (roznica == 0) // sygnały są równe { kierunek = 0; // kierunek na wprost wielkosc = 0; // odchylenie zero } else if (roznica < 0 && roznica < (czulosc/3)) // różnica ujemna ale mniejsza niż 30% { kierunek = 3; // kierunek prawo wielkosc = 1; // odchylenie małe } else if (roznica < 0 && roznica > -(czulosc/3)) // różnica ujemna ale większa niż 30% { kierunek = 3; // kierunek prawo wielkosc = 2; // odchylenie duże } else if (roznica > 0 && roznica < (czulosc/3)) // różnica dodatnia ale mniejsza niż 30% { kierunek = 1; // kierunek lewo wielkosc = 1; // odchylenie małe } else if (roznica > 0 && roznica > -(czulosc/3)) // różnica dodatnia ale większa niż 30% { kierunek = 1; // kierunek lewo wielkosc = 2; // odchylenie duże } digitalWrite((2 + kierunek + wielkosc), HIGH); // zapalenie odpowiedniej diody z zależności od kierunku i odchylenia delay(500); for( int i = 1; i < 7; i++) // po kolei { digitalWrite(i, LOW); // wygaszamy diody } } } I jak to wygląda?
  4. zad.4.4: int odczytanaWartosc = 0; //Zmienna do przechowywania odczytu ADC int prog = 0; //Próg włączenia światła - ustawiany potencjometrem boolean komunikat = true; // przełącznik decydujący o wyświetlaniu komunikatu void setup() { pinMode(8, OUTPUT); //Konfiguracja wyjść pod diodę LED Serial.begin(9600); // ustawienie prędkości transmisji } void loop() { odczytanaWartosc = analogRead(A5);//Odczytanie wartości z ADC prog = analogRead(A4); //Odczytanie wartości z ADC if (odczytanaWartosc < prog) //Czy jest ciemniej od ustawionego progu? { digitalWrite(8, HIGH); // jeśli tak to włączenie diody if (komunikat) // gdy potrzeby jest komunikat { String napis = "Odczytana wartosc = "; // int volty = odczytanaWartosc * (5.0 / 1023.0); // układanie napisu napis = napis + volty + " V"; // Serial.println(napis); // komunikat do komputera komunikat = false; // następny komunikat nie jest w tym cyklu potrzebny } } else // jest jaśniej { digitalWrite(8, LOW); //Wyłączenie diody komunikat = true; // komunikat znów będzie potrzebny } delay(50); } Jak to wygląda? zad4.5: #define zielona 7 #define zolta 8 #define czerwona 9 #define przycisk 2 #define kreciol A4 int odczytanaWartosc = 0; //Zmienna do przechowywania odczytu ADC int proba = 0; // ilość prób void setup() { pinMode(przycisk, INPUT_PULLUP); // wejście przełącznika pinMode(zielona, OUTPUT); // konfiguracja wyjść pod diodę LED pinMode(zolta, OUTPUT); // konfiguracja wyjść pod diodę LED pinMode(czerwona, OUTPUT); // konfiguracja wyjść pod diodę LED Serial.begin(9600); // ustawienie prędkości transmisji Serial.println("Zagraj! Ustaw potencjometr i nacisnij przycisk"); } void loop() { while(digitalRead(przycisk) == HIGH); // oczekiwanie na przycisk digitalWrite(zielona, LOW); // digitalWrite(czerwona, LOW); // wygaszanie diod digitalWrite(zolta, LOW); // proba = 1; // liczymy od nowa odczytanaWartosc = analogRead(kreciol); // odczyt wartości z potencjometru while(proba < 4) // do trzech razy sztuka { // gracz podaje liczbę String odebranaLiczba = (""); Serial.print("Proba "); Serial.println(proba); Serial.println("Podaj liczbe (od 0 do 1023)"); while(Serial.available() == 0); // oczekiwanie na liczbę odebranaLiczba = Serial.readStringUntil('\n'); // przepisujemy do zmiennej Serial.print("Twoja liczba to: "); Serial.println(odebranaLiczba); int wynik = odebranaLiczba.toInt(); // zwracamy wynik jako INT if ((wynik <= (odczytanaWartosc + 50)) && (wynik >= (odczytanaWartosc - 50))) { // liczba mieści się w granicach błędu Serial.print("Wygrales w probie nr "); Serial.println(proba); digitalWrite(zolta, LOW); digitalWrite(zielona, HIGH); Serial.println("Zagraj jeszcze raz. Ustaw potencjometr i nacisnij przycisk"); proba = 5; // wyjście z while po wygranej } else { // liczba nie mieści się w granicach Serial.println("Za duzy blad"); digitalWrite(zolta, HIGH); delay(100); proba++; } } if(proba == 4) // za dużo prób { Serial.println("Przegrales!"); digitalWrite(zolta, LOW); digitalWrite(czerwona, HIGH); Serial.println("Zagraj jeszcze raz. Ustaw potencjometr i nacisnij przycisk"); } } Nie wstawiałem początkowego opisu bo to tylko dużo pisania a mało nauki!
  5. Witam wszystkich na forum. Wspaniałe podejście do tematu. Proszę tak trzymać dalej! Moje rozwiązanie zad.2.5: Widziałem rozwiązania z dodatkowymi zmiennymi i spróbowałem zrobić to samo bez nich. Oto wynik: #define zielona 9 // dioda zielona #define czerwona 8 // dioda czerwona String odebraneDane = ""; //Pusty ciąg odebranych danych void setup() // ustawienia { Serial.begin(9600); //Uruchomienie komunikacji pinMode(zielona, OUTPUT); //Konfiguracja wyjść pinMode(czerwona, OUTPUT); digitalWrite(zielona, LOW); //Wyłączamy diody digitalWrite(czerwona, LOW); } void loop() //pętla główna programu { if(Serial.available() > 0) //Jeśli Arduino odebrało dane { odebraneDane = Serial.readStringUntil('\n'); // to odczytujemy je do znaku końca linii i zapisujemy w zmiennej odebraneDane if (odebraneDane == "zielona") //Jeśli odebrano słowo "zielona" { if (digitalRead(zielona)) // jeśli włączona { digitalWrite(zielona, LOW); //To wyłączamy diodę zieloną } else // jeśli wyłączona { digitalWrite(zielona, HIGH); // to włączamy } } else { // w innym przypadku if (odebraneDane == "czerwona") //Jeśli odebrano słowo "czerwona" { if (digitalRead(czerwona)) // jeśli włączona { digitalWrite(czerwona, LOW); //To wyłączamy diodę czerwoną } else // jeśli wyłączona { digitalWrite(czerwona, HIGH); // to włączamy } } else // odbieramy coś innego niż "zielona" lub "czerwona" { Serial.println("Niepoprawna nazwa!"); //Wyświetl komunikat } } } } Czy tak może być?
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.