Skocz do zawartości

Kurs Arduino - #9 - Czujnik odległości HC-SR04, funkcje


Komentator

Pomocna odpowiedź

21 minut temu, ARDIP napisał:

Czy taka sytuacja wynika z błędów w programie, czy czego innego ?

Co się stanie, jeżeli howFar jest równy idealnie 50 (dla przytoczonego przez Ciebie przykładu)? [przeanalizuj kod]

Edytowano przez H1M4W4R1
  • Lubię! 1
Link do komentarza
Share on other sites

#define trigPin 12
#define echoPin 11
#define Red2 3
#define Red1 4
#define Yellow2 5
#define Yellow1 6
#define Green2 7
#define Green1 8

void setup() {
  Serial.begin(9600); //UART speed transmission set
  pinMode(trigPin, OUTPUT); //Pin that trig is setting as output
  pinMode(echoPin, INPUT); //Pin that echo is setting as input
  pinMode(2, OUTPUT); //Pin that buzzer is setting as output
  pinMode(Red1, OUTPUT); //Diodes pins show the distance by displaying colours
  pinMode(Red2, OUTPUT);
  pinMode(Yellow1, OUTPUT);
  pinMode(Yellow2, OUTPUT);
  pinMode(Green1, OUTPUT);
  pinMode(Green2, OUTPUT);
}

void loop() {
  range(0, 60); //Turn on alarm if in distance 0-60 cm from sensor is any object
  delay(10); //Time delay
}

int distanceMeasure() {
  long time, distance; //Define variables for distance and time 

  digitalWrite(trigPin, LOW); //Turn off trigPin
  delayMicroseconds(2); //Time delay
  digitalWrite(trigPin, HIGH); //Turn on trigPin 
  delayMicroseconds(10); //Time delay
  digitalWrite(trigPin, LOW); //Turn off trigPin

  time = pulseIn(echoPin, HIGH); //Time count
  distance = time/58; //Distance count
  
  return distance;
}

void range(int a, int b) {
  int howFar = distanceMeasure(); //Assignment to howFar variable
  if((howFar > 50) && (howFar < b)) { //Distance between 50-60 cm
    Led1(); //Function call
    Buzz1(); //Function call
  } else if((howFar > 40) && (howFar <= 50)) { //Distance between 40-50 cm
    Led2(); //Function call
    Buzz2(); //Function call
  } else if((howFar > 30) && (howFar <= 40)) { //Distance between 30-40 cm
    Led3(); //Function call
    Buzz3(); //Function call
  } else if((howFar > 20) && (howFar <= 30)) { //Distance between 20-30 cm
    Led4(); //Function call
    Buzz4(); //Function call
  } else if((howFar > 10) && (howFar <= 20)) { //Distance between 10-20 cm
    Led5(); //Function call
    Buzz5(); //Function call
  } else if((howFar > a) && (howFar <= 10)) { //Distance between 0-10 cm
    Led6(); //Function call
    Buzz6(); //Function call
  } else { //Distance more than 60 cm
    Led7(); //Function call
    Buzz7(); //Function call
  }
}

void Led1() { //Distance between 50-60 cm
  digitalWrite(Green1, HIGH); //Turn on only diode Green1 
  digitalWrite(Green2, LOW);
  digitalWrite(Yellow1, LOW);
  digitalWrite(Yellow2, LOW);
  digitalWrite(Red1, LOW);
  digitalWrite(Red2, LOW);
}
void Led2() { //Distance between 40-50 cm
  digitalWrite(Green1, HIGH); //Turn on diodes Green1 & Green2 
  digitalWrite(Green2, HIGH);
  digitalWrite(Yellow1, LOW);
  digitalWrite(Yellow2, LOW);
  digitalWrite(Red1, LOW);
  digitalWrite(Red2, LOW);
}
void Led3() { //Distance between 30-40 cm
  digitalWrite(Green1, HIGH); //Turn on diodes Green1, Green2 & Yellow1 
  digitalWrite(Green2, HIGH);
  digitalWrite(Yellow1, HIGH);
  digitalWrite(Yellow2, LOW);
  digitalWrite(Red1, LOW);
  digitalWrite(Red2, LOW);
}
void Led4() { //Distance between 20-30 cm
  digitalWrite(Green1, HIGH); //Turn on diodes Green1, Green2, Yellow1 & Yellow2 
  digitalWrite(Green2, HIGH);
  digitalWrite(Yellow1, HIGH);
  digitalWrite(Yellow2, HIGH);
  digitalWrite(Red1, LOW);
  digitalWrite(Red2, LOW);
}
void Led5() { //Distance between 10-20 cm
  digitalWrite(Green1, HIGH); //Turn on diodes Green1, Green2, Yellow1, Yellow2 & Red1 
  digitalWrite(Green2, HIGH);
  digitalWrite(Yellow1, HIGH);
  digitalWrite(Yellow2, HIGH);
  digitalWrite(Red1, HIGH);
  digitalWrite(Red2, LOW);
}
void Led6() { //Distance between 0-10 cm
  digitalWrite(Green1, HIGH); //Turn on diodes Green1, Green2, Yellow1, Yellow2, Red1 & Red2 
  digitalWrite(Green2, HIGH);
  digitalWrite(Yellow1, HIGH);
  digitalWrite(Yellow2, HIGH);
  digitalWrite(Red1, HIGH);
  digitalWrite(Red2, HIGH);
}
void Led7() { //Distance more than 60 cm
  digitalWrite(Red1, LOW); //Turn off all diodes
  digitalWrite(Red2, LOW);
  digitalWrite(Yellow1, LOW);
  digitalWrite(Yellow2, LOW);
  digitalWrite(Green1, LOW);
  digitalWrite(Green2, LOW);
}

void Buzz1() { //Distance between 50-60 cm
  digitalWrite(2, HIGH); //Buzzer on
  delay(300); //Interval time between impulses
  digitalWrite(2, LOW); //Buzzer off
  delay(300); //Interval time between impulses
}
void Buzz2() { //Distance between 40-50 cm
  digitalWrite(2, HIGH); //Buzzer on
  delay(150); //Interval time between impulses
  digitalWrite(2, LOW); //Buzzer off
  delay(150); //Interval time between impulses
}
void Buzz3() { //Distance between 30-40 cm
  digitalWrite(2, HIGH); //Buzzer on
  delay(100); //Interval time between impulses
  digitalWrite(2, LOW); //Buzzer off
  delay(100); //Interval time between impulses
}
void Buzz4() { //Distance between 20-30 cm
  digitalWrite(2, HIGH); //Buzzer on
  delay(50); //Interval time between impulses
  digitalWrite(2, LOW); //Buzzer off
  delay(50); //Interval time between impulses
}
void Buzz5() { //Distance between 10-20 cm
  digitalWrite(2, HIGH); //Buzzer on
  delay(35); //Interval time between impulses
  digitalWrite(2, LOW); //Buzzer off
  delay(35); //Interval time between impulses
}
void Buzz6() { //Distance between 0-10 cm
  digitalWrite(2, HIGH); //Buzzer on
}
void Buzz7() { //Distance more than 60 cm
  digitalWrite(2, LOW); //Buzzer off
}

Zadanie 9.3 - drobne poprawki 🙂

  • Lubię! 2
Link do komentarza
Share on other sites

Praca domowa 9.1

Napisz funkcję, która sprawia, że dioda będzie  pulsować (stopniowe przygaszanie i rozjaśnianie). Skorzystaj oczywiście z wiadomości zdobytych podczas lekcji o sygnale PWM.

int jasnoscdiody = 0; //jasnosc diody od 0-255 
int zmiana = 5; // zmiana jasnosci o 5

void setup() {
  pinMode(11, OUTPUT); //Konfiguracja pinu 13 jako wyjście PWM
  Serial.begin(9600);
}

void loop() {
  zamigajLED(); // uruchomienie void zamigajLED 
}

void zamigajLED() { //funkcja zamigaj led
	for (jasnoscdiody; jasnoscdiody <= 255; jasnoscdiody += zmiana) { // jezeli jasnosc diody jest ponizej 255 czyli 100% to jasnosc diody +5
	analogWrite(11, jasnoscdiody); //Spokojne rozświetlanie diody
	Serial.println(jasnoscdiody); // podglad w porcie szeregowym wysokosci wypelnienia 0-255
delay(50);
}
	for (jasnoscdiody >= 255; jasnoscdiody >= 0; jasnoscdiody -= zmiana) { // jezeli jasnosc diody =255 lub wiecej
	analogWrite(11, jasnoscdiody); //Spokojne sciemnianie diody
	Serial.println(jasnoscdiody); // podglad w porcie szeregowym wysokosci wypelnienia 0-255
delay(50);
}}
  

 

  • Lubię! 1
Link do komentarza
Share on other sites

@PanMajster Czy ty przekopiowujesz niektóre funkcje? Pytam bo w tym i w innych kodach widzę funkcje z dołączonymi komentarzami nie na temat np. ta linijka:

pinMode(11, OUTPUT); //Konfiguracja pinu 13 jako wyjście PWM

 

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

Dnia 23.01.2025 o 18:14, BeeKeyPro napisał:

@PanMajster Czy ty przekopiowujesz niektóre funkcje? Pytam bo w tym i w innych kodach widzę funkcje z dołączonymi komentarzami nie na temat np. ta linijka:

pinMode(11, OUTPUT); //Konfiguracja pinu 13 jako wyjście PWM

 

Hej . Tak przyspieszam sobie prace korzystając z poprzednich prac domowych.  Czasem mam takie kwiatki jak w twoim cytacie 😛

Link do komentarza
Share on other sites

(edytowany)

@PanMajster Nie polecam Ci czegoś takiego (przynajmniej na początku). Przepisując możesz sobie wbić do głowy nazwę funkcji - nie musisz jej potem szukać w poprzednich kodach, lub na internecie. 😉 

Edytowano przez BeeKeyPro
Link do komentarza
Share on other sites

Zadanie 9.2

void setup() {
 
zamigajLED(150, 50, 15, 11);
}
void loop() {
}
void zamigajLED(int czasON, int czasOFF, int ile, int NumerPin){
  pinMode(NumerPin, OUTPUT); //Konfiguracja pinu x jako wyjście
  for (int i=0; i < ile; i++) {
    digitalWrite(NumerPin, LOW); //Włączenie diody pinem x
    delay(czasON); //Odczekanie czasu włączenia
    digitalWrite(NumerPin, HIGH); //Wyłączenie diody pinem x
    delay(czasOFF); //Odczekanie czasu wyłączenia
  }
}

 

Link do komentarza
Share on other sites

Hej. Tym razem zadanie nr 9.3

Jak by ktoś rzucił okiem czy jest w miare OK

 

#define trigPin 12 // zdefiniowanie Pinu 12 jako trigger
#define echoPin 11 // zdefiniowanie Pinu 11 jako echo
int odczytanaWartosc = 0;

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście
  pinMode(echoPin, INPUT); //echo, jako wejście

  pinMode(5, OUTPUT);//Konfiguracja wyjść pod diody LED
  pinMode(6, OUTPUT);//Konfiguracja wyjść pod diody LED
  pinMode(7, OUTPUT);//Konfiguracja wyjść pod diody LED
  pinMode(8, OUTPUT);//Konfiguracja wyjść pod diody LED
  pinMode(9, OUTPUT);//Konfiguracja wyjść pod diody LED
  pinMode(10, OUTPUT);//Konfiguracja wyjść pod diody LED


}
void loop() {  
 
  Serial.print(zmierzOdleglosc()); //podglad wartości zmierzodleglosc
  Serial.println(" odleglosc");
  delay(200);

  odczytanaWartosc = zmierzOdleglosc(); 
  odczytanaWartosc = map(odczytanaWartosc, 5, 500, 1, 6); //Przeskalowanie wartości do 500cm ( czujnik łapie do ok 500 a potem skacze na 1200 (max). Nie zczytuje wartości pomiedzy 500 a 1200 stad takie skalowanie


  switch (odczytanaWartosc) { // funkcja linijki odleglości diody LED (im dalej tym wiecej diod świeci)
    case 1:
      digitalWrite(5, HIGH); 
      digitalWrite(6, LOW); 
      digitalWrite(7, LOW); 
      digitalWrite(8, LOW); 
      digitalWrite(9, LOW); 
      digitalWrite(10, LOW); 
    break;
    case 2:
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, LOW); 
      digitalWrite(8, LOW); 
      digitalWrite(9, LOW); 
      digitalWrite(10, LOW);  
    break;
    case 3:
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, LOW); 
      digitalWrite(9, LOW); 
      digitalWrite(10, LOW);  
    break;
    case 4:
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, LOW); 
      digitalWrite(10, LOW);     
    break;
    case 5:
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      digitalWrite(10, LOW);    
    break;
    case 6:
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      digitalWrite(10, HIGH);   
    break;
    default: //Kod wykonywany jeśli żaden warunek nie był spełniony (czasem nie działał case6)
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      digitalWrite(10, HIGH);  
  break;
  }

  delay(50); //Opóźnienie
}


int zmierzOdleglosc() { //odczyt z czujnika odległości
  long czas, dystans;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(15);
  digitalWrite(trigPin, LOW);
  czas = pulseIn(echoPin, HIGH);
  dystans = czas / 58;
  return dystans;
}

 

Link do komentarza
Share on other sites

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

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.