Skocz do zawartości

Kurs Arduino - #4 - Przetwornik ADC


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 😃

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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);

  } 

}

Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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);
}

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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