Skocz do zawartości

Pomocna odpowiedź

Cześć;

Chciałbym Was prosić o pomoc z zadaniem 4.5. Z programowaniem nie miałem zbyt wiele doświadczenia. Poprzeglądałem trochę internet i w głowie stworzyła mi się jakaś wizia tego programu, ale wizja nie bardzo działa.

Możecie coś podpowiedzieć? Co powinienem poprawić ewentualnie czy to co stworzyłem zmierza w dobrym kierunku czy lepiej skasować i zacząć od nowa?😂

#define zielona 8
#define zolta 9
#define czerwona 10
#define przycisk 7

int i=0;
String odczytanaWartosc = ""; //wartosc wpisana przez użytkownika
int odczytanaWartosc_int = 0; //wartosc wpisana przez użytkownika
int wartoscPot = 0; //wartosc odczytana z potencjometru

void setup() {
  Serial.begin(9600);

  pinMode(zielona, OUTPUT);
  pinMode(zolta, OUTPUT);
  pinMode(czerwona, OUTPUT);
  pinMode(przycisk,INPUT_PULLUP);
  
  digitalWrite(zielona, LOW);
  digitalWrite(zolta, LOW);
  digitalWrite(czerwona, LOW);
  
}

void loop() {
  if (digitalRead(7) == LOW){ //jeśli przycisk wcisniety
   
    Serial.println("Podaj liczbe:"); 
    
	 for (i=1; i <= 3; i++){ //wykonujemy 3 proby
       
       odczytanaWartosc = Serial.readStringUntil('\n'); // odczyt wartości i zamianan na INT
       odczytanaWartosc_int = odczytanaWartosc.toInt();    
        
       if (Serial.available()>0){ //jeśli wprowadzone dane sa wieksze od 0
              wartoscPot = analogRead(A5); //odczytujemy wartość z potencjometru
            if (odczytanaWartosc_int == wartoscPot || odczytanaWartosc_int <= wartoscPot+50 && odczytanaWartosc_int >= wartoscPot-50){
              digitalWrite(zielona, HIGH);
              digitalWrite(zolta, LOW);
              digitalWrite(czerwona, LOW);
              Serial.println("Gratulacje, wygrales");
              break; //przerywamy for w przypadku trafienia
              
           }else {
              digitalWrite(zielona, LOW);
              digitalWrite(zolta, HIGH);
              digitalWrite(czerwona, LOW);
              Serial.println("Zla liczba");//jeśli dobrz rozumiem wracm na początek pętli for
           }   
          }
         Serial.println("Przegrałes, sprobuj ponownie"); 
      }
  
  }
 }

 

@Maszynyodsrodka, wygląda ładnie, idziesz w dobrym kierunku 😉 Powodzenia w dalszych eksperymentach! W razie problemów możesz zawsze podejrzeć jak z zadaniem poradziły sobie inne osoby (w tym temacie znajdziesz sporo przykładowych programów).

  • 3 tygodnie później...

Witam. Rozwiązałem zadanie 4.6 i nawet działa. Jest jednak pewno ale... Wszystko działa tak jak powinno jednak jedna z diod świeci bardzo bardzo słabo, sprawdziłem prąd jakim jest zasilana podczas świecenia i jest to 0,08mA. Rezystory wszędzie jednakowe, skrypt wydaje się ok. W czym może tkwić problem? Zamieszczam nieco chaotyczne zdjęcie połączeń i skrypt. 

#define redLedL 8
#define yellowLedL 9
#define greenLed 10
#define yellowLedR 11
#define redLedR 12

int fotoRez1 = 0;
int fotoRez2 = 0;
byte value = 100;

void setup() {
  pinMode(redLedL, OUTPUT);
  pinMode(yellowLedL, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(redLedR, OUTPUT);
  pinMode(redLedR, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  fotoRez1 = analogRead(A5);
  fotoRez2 = analogRead(A4);
  
  Serial.print("Fotorezystor 1: ");
  Serial.println(fotoRez1);
  Serial.print("Fotorezystor 2: ");
  Serial.println(fotoRez2);
  
  if (abs(fotoRez1 - fotoRez2) <= 50) {
    digitalWrite(redLedL, LOW);
    digitalWrite(yellowLedL, LOW);
    digitalWrite(greenLed, HIGH);
    digitalWrite(yellowLedR, LOW);
    digitalWrite(redLedR, LOW);
  }
  else if (fotoRez1 > fotoRez2 + value) {
    digitalWrite(redLedL, HIGH);
    digitalWrite(yellowLedL, LOW);
    digitalWrite(greenLed, LOW);
    digitalWrite(yellowLedR, LOW);
    digitalWrite(redLedR, LOW);  
  }
  else if (fotoRez1 > fotoRez2) {
    digitalWrite(redLedL, LOW);
    digitalWrite(yellowLedL, HIGH);
    digitalWrite(greenLed, LOW);
    digitalWrite(yellowLedR, LOW);
    digitalWrite(redLedR, LOW);
  }
    else if (fotoRez2 > fotoRez1) {
    digitalWrite(redLedL, LOW);
    digitalWrite(yellowLedL, LOW);
    digitalWrite(greenLed, LOW);
    digitalWrite(yellowLedR, HIGH);
    digitalWrite(redLedR, LOW);
  }
  else if (fotoRez2 > fotoRez1 + value) {
    digitalWrite(redLedL, LOW);
    digitalWrite(yellowLedL, LOW);
    digitalWrite(greenLed, LOW);
    digitalWrite(yellowLedR, LOW);
    digitalWrite(redLedR, HIGH);
  }
  delay(1000);
}

IMG_20190202_144514384.thumb.jpg.2a274c73939fdd2954735c62f11ee058.jpg

Mowa o prawej żółtej diodzie, pin 11 na Arduino.

@TheProrok29 zostaw podłączenie takie jak masz i wgraj zwykły program, który miga diodą na pinie numer 11. Będziesz wiedział, czy to problem sprzętowy (uszkodzone Arduino, błędne połączenie), czy coś z programem. Daj znać jaki efekt 🙂

ZAD 4.5

Nie mam pojęcia dlaczego, przy wpisaniu błędnej odpowiedzi, gdy program po raz drugi prosi użytkownika o podanie liczby, program zachowuje się tak jakbym po raz kolejny wpisał liczbę(tą starą), a za trzecim razem ta sytuacja już nie występuje, ktoś mógłby mi pomóc?

int wartoscADC=0;
int liczba;
int i=0;

void setup() {
  // put your setup code here, to run once:
    pinMode(2,INPUT_PULLUP);
    Serial.begin(9600);
    pinMode(8,OUTPUT);
    pinMode(9,OUTPUT);
    pinMode(10,OUTPUT);

    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
    
    if(digitalRead(2)==LOW)
    {
      wartoscADC=analogRead(A5);
    }
      if(wartoscADC>0)
      {
        
        Serial.println(liczba);
        
        Serial.println("Podaj liczbe: ");
        

        while(Serial.available()==0){}

        
        
        if(Serial.available()>0)
        {
            liczba=Serial.parseInt();
    
            if(liczba>(wartoscADC-50) && liczba<(wartoscADC+50))
            {
              Serial.println("WYGRALES");
              digitalWrite(8,LOW);
              digitalWrite(9,LOW);
              digitalWrite(10,HIGH);
              while(liczba>(wartoscADC-50) && liczba<(wartoscADC+50)){}
            }
            else
              {
                  i=i+1;
                  if(i<3)
                    {
                      Serial.println("ZLE,ALE MASZ JESZCZE SZANSE: ");
                      Serial.println(3-i);
                      digitalWrite(9,HIGH);
                      delay(2000);
                      digitalWrite(9,LOW);
      
                     }
                  else
                  {
                    digitalWrite(8,HIGH);
                    Serial.println("PRZEGRALES");
                    while(i=3){}
                  }
              }
        }
      }
}

 

Cześć, potrzebuję pomocy bo nie wiem jak zatrzymać program do czasu aż wejdą jakieś dane i chodzi o to by zatrzymywał przy każdym przejściu przez pętle void loop(). To mój kod do zad 4.5 (jeszcze niedokończony).

int podanaWartosc = 2;
int odczytanaWartosc = 0;
void setup() {
pinMode(4, INPUT_PULLUP);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
Serial.begin(9600);
}

void loop() {
  Serial.println("Proszę przekręcić potencjmoter i podać liczbę od 1 do 5");
  while(Serial.available() == 0) {}
  Serial.println(podanaWartosc);
    podanaWartosc = Serial.parseInt();
    Serial.println(podanaWartosc);
while(digitalRead(4) ==  HIGH) {
  odczytanaWartosc = analogRead(A5);
  odczytanaWartosc = map(odczytanaWartosc, 0, 1023, 1, 5);
}
if(podanaWartosc == odczytanaWartosc) {
  digitalWrite(5,HIGH);
  Serial.println("Gratuluję!");
}
}

po pierwszym wpisaniu liczby wszystko jest okej ale potem jak wraca program do początku to przeskakuje pętle while(Serial.available() ==0) {}.

Witam wszystkich na forum, jest to mój pierwszy post. Otóż w poradniku mam problem z zadaniem z fotorezystorem. Na wstępie napiszę, że program na arduino dla pewności wgrałem przekopiowany z kursu. Problem wygląda następująco. W kursie na schemiacie do fotorezystora i rezystora podłączony jest + i - i u mnie taki układ nie działa. Ale po odłączeniu tych przewodów zaczyna działać(po całkowitym zakryciu fotorezystora dioda miga, nie świeci ciągle) . Dlaczego tak się dzieje? Dołączam rysunek. 

 

Zrobiłem wersję z potencjomatrem, działa, ale zbudowałem jeszcze raz tą bez potencjometru i znowu ten sam problem. Wartość przełączania próbowałem też różną.

ard_3_4-650x419.png ard_3_4-650x4191.png

51979937_794764554233755_4749712544900317184_n.jpg 52510858_340333823246303_8893451834794967040_n.jpg

@25pawel, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

Dnia 9.02.2019 o 11:42, 25pawel napisał:

Nie mam pojęcia dlaczego, przy wpisaniu błędnej odpowiedzi, gdy program po raz drugi prosi użytkownika o podanie liczby, program zachowuje się tak jakbym po raz kolejny wpisał liczbę(tą starą), a za trzecim razem ta sytuacja już nie występuje, ktoś mógłby mi pomóc?

To powinno dać Ci do myślenia, że albo nie czyścisz zmiennej lub robisz to w złym momencie. Zacznijmy jednak od czegoś innego. Jak masz ustawiony monitor portu szeregowego? Czy do wysyłanych danych doklejasz jakieś znaki końca linii?

@Karliko to samo pytanie, co wyżej - czy doklejasz do wysyłanych danych jakież znaki końca linii?

@CharlesX, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

Dnia 11.02.2019 o 18:16, CharlesX napisał:

Zrobiłem wersję z potencjomatrem, działa, ale zbudowałem jeszcze raz tą bez potencjometru i znowu ten sam problem. Wartość przełączania próbowałem też różną.

Twoja "działająca" wersja jest na 100% zła, tutaj nie ma co dyskutować. Coś tam działa, bo przypadkiem zbiera jakieś "elektrośmieci" z powietrza. Spójrz jeszcze raz na swój układ i na schemat z kursu. Nie pokazałeś zdjęcia całej swojej płytki, ale według mnie układ masz podłączony inaczej (nie widać zasilania). Po trzecie nie masz chyba naszego zestawu, więc problemem może być np. zły fotorezystor lub rezystor (który ma jakieś dziwne kolorki) lub jakiś inny element. Nie mam pojęcia czym dokładnie dysponujesz, więc ciężko zdalnie pomóc.

  • Lubię! 1

@Karliko wiem, że Ty nic nie dopisujesz - pytam o ustawienia terminala, bo może tam masz wybraną taką opcję, która mogłaby powodować właśnie podobne błędy 🙂

@Karliko czyli przy wysyłaniu dodajesz znaki nowej linii. Ustaw na "Brak zakończenia linii" i sprawdź jeszcze raz działanie programu 🙂

Zasilanie po dwóch stronach na pewno dobrze, bo zmierzyłem multimetrem i robiłem już inne prpjekty na tym samym podłączeniu. Może i sprawa tego fotorezystora. Ważne, że na wersji z potencjometrem działa 😄

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ę »
×
×
  • Utwórz nowe...