Skocz do zawartości

Pomocna odpowiedź

Po przeczytaniu jednej z części kursu o tworzeniu własnych funkcji postanowiłem zastosować zdobytą wiedzę aby skomplikować zadanie domowe z odcinka o ADC. Problem polega na tym iż po wpisaniu odpowiedniej liczby w monitor portu szeregowego program i tak wysyła wiadomość o błędzie , zapala się żółta dioda i zostaje odjęte jedno życie 😃

PS. Wszystkie części kursu są naprawdę świetnie napisane 😃

Dziękuje za tak szybką diagnozę problemu 😃 Teraz rzutowanie działa tak jak powinno 😃

Mam jeszcze jedno pytanie jak działa funkcja Serial.parseInt() ?

  • 3 tygodnie później...
  • 3 tygodnie później...

G1T, niestety w tej chwili nie mam tej informacji. Najlepiej zapytaj w Botlandzie - oni odpowiadają za to, aby wszystkie zestawy zawierały poprawne elementy 🙂

  • 1 miesiąc później...

Cześć wszystkim ! Doszedłem do zadania 4.6. Udało mi się je zrobić w poniższy sposób.

Dajcie znać czy można jakoś - prościej, lepiej itd...

#define zielona1 12
#define zielona2 11
#define zolta1 10
#define zolta2 9
#define czerwona1 8
#define czerwona2 7

int odczytfoto1 = 0;
int odczytfoto2 = 0;
float napiecie1 = 0;
float napiecie2 = 0;
float proporcja = 0;

void setup(){

 pinMode(zielona1, OUTPUT); 
 pinMode(zielona2, OUTPUT); 
 pinMode(zolta1, OUTPUT); 
 pinMode(zolta2, OUTPUT); 
 pinMode(czerwona1, OUTPUT); 
 pinMode(czerwona2, OUTPUT);

 digitalWrite(zielona1, LOW);
 digitalWrite(zielona2, LOW);
 digitalWrite(zolta1, LOW);
 digitalWrite(zolta2, LOW);
 digitalWrite(czerwona1, LOW);
 digitalWrite(czerwona2, LOW);

}

void loop() {

 odczytfoto1 = analogRead(A4);
 odczytfoto2 = analogRead(A5);

 napiecie1 = odczytfoto1 * (5.0/1023.0);
 napiecie2 = odczytfoto2 * (5.0/1023.0);
 proporcja = (napiecie1/napiecie2);

 if ((napiecie1 > napiecie2) and (proporcja > 1.2) ) {

 digitalWrite(czerwona1, HIGH);
 digitalWrite(czerwona2, HIGH);
 digitalWrite(zolta1, LOW);
 digitalWrite(zolta2, LOW);

 }

 if ((napiecie2 > napiecie1) and (proporcja < 0.8) ) {

 digitalWrite(zielona1, HIGH);
 digitalWrite(zielona2, HIGH);
 digitalWrite(zolta1, LOW);
 digitalWrite(zolta2, LOW);

 }

 if ((proporcja > 0.7) and (proporcja < 1.3)) {
 digitalWrite(zolta1, HIGH);
 digitalWrite(zolta2, HIGH);
 digitalWrite(czerwona1, LOW);
 digitalWrite(czerwona2, LOW);
 digitalWrite(zielona1, LOW);
 digitalWrite(zielona2, LOW);

  } 

}

klewik, ciekawe rozwiązanie - ważne, że działa 🙂

Pamiętaj tylko, aby dodawać komentarze. Za jakiś czas zapomnisz sam, jak to wszystko działa.

  • 2 tygodnie później...

witam,

mam problem przy kompilacji programu dotyczącego Wskaźnika na diodach wyskakuje mi błąd :

collect2.exe: error: ld returned 5 exit status

exit status 1
Błąd kompilacji.

nie zależnie czy napisałem program sam, czy skopiowałem jest to samo, dlaczego?

Witam.

Oto moje rozwiązanie zadnia 4.6. Napisane trochę chaotycznie ale działa. 🙂 Dodałem jeden element, mianowicie gdy nie pada na czujniki żadne światło miga jedna dioda.

int wartosc1 = 0;
int wartosc2 = 0;
int wartosc_1 = 0;
int wartosc_2 = 0;

void setup () { 
 Serial.begin(9600);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
}

void loop() {
 wartosc1 = analogRead(A5);
 wartosc2 = analogRead(A0);
 Serial.print("Czujnik 1: ");
 Serial.print(wartosc1);
 Serial.print("          Czujnik 2: ");
 Serial.println(wartosc2);

 wartosc_1 = map(wartosc1, 0, 1023, 0, 50);
 wartosc_2 = map(wartosc2, 0, 1023, 0, 50);

 if (wartosc2 < 20) {
   digitalWrite(3, LOW);
   digitalWrite(4, LOW);
   digitalWrite(5, LOW);
   digitalWrite(6, LOW);
   digitalWrite(7, LOW); 
  delay(500);
   digitalWrite(5, HIGH);
  delay(550);
 } else {
 if (wartosc1 < 20) {
   digitalWrite(3, LOW);
   digitalWrite(4, LOW);
   digitalWrite(5, LOW);
   digitalWrite(6, LOW);
   digitalWrite(7, LOW); 
  delay(500);
   digitalWrite(5, HIGH);
   delay(550);
 } else {
 if(wartosc_1 >> wartosc_2) {
   digitalWrite(3, HIGH);
   digitalWrite(4, LOW);
   digitalWrite(5, LOW);
   digitalWrite(6, LOW);
   digitalWrite(7, LOW);
 } else {
 if(wartosc_1 == wartosc_2) {
   digitalWrite(3, LOW);
   digitalWrite(4, LOW);
   digitalWrite(5, HIGH);
   digitalWrite(6, LOW);
   digitalWrite(7, LOW);
 } else {  
 if(wartosc_2 >> wartosc_1) {
   digitalWrite(3, LOW);
   digitalWrite(4, LOW);
   digitalWrite(5, LOW);
   digitalWrite(6, LOW);
   digitalWrite(7, HIGH);
 } else {
   if (wartosc_2 > wartosc_1) {
   digitalWrite(3, LOW);
   digitalWrite(4, LOW);
   digitalWrite(5, LOW);
   digitalWrite(6, HIGH);
   digitalWrite(7, LOW);
 } else {
   if (wartosc_1 > wartosc_2) {
   digitalWrite(3, LOW);
   digitalWrite(4, HIGH);
   digitalWrite(5, LOW);
   digitalWrite(6, LOW);
   digitalWrite(7, LOW);      
 }      
 }
 }
 }
 }
}
}
delay(50);
}

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...