Skocz do zawartości

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


Komentator

Pomocna odpowiedź

int trigPin = 12;
int echoPin = 11;
int green1 = 3;
int green2 = 7;
int red1 = 5;
int red2 = 2;
int yellow1 = 6;
int yellow2 = 4;
void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(2, OUTPUT);
  pinMode(green1, OUTPUT);  //zielona
  pinMode(green2, OUTPUT);
  pinMode(red1, OUTPUT);  //czerwona
  pinMode(red2, OUTPUT);
  pinMode(yellow1, OUTPUT);
  pinMode(yellow2, OUTPUT);  //żółta
}

void loop() {
  zakresgreen1(6);    //odleglosc 5cm świeci
  zakresgreen2(10);   //odleglosc 10cm świeci
  zakresyellow1(15);  //odleglosc 15cm świeci
  zakresyellow2(20);  //odleglosc 20cm świeci
  zakresred1(25);     //odleglosc 25cm świeci
  zakresred2(30);     //odleglosc 30cm świeci

  Serial.print(zmierzOdleglosc());
  Serial.println(" cm");
  delay(100);
}
int zmierzOdleglosc() {
  long czas, dystans;

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  czas = pulseIn(echoPin, HIGH);
  dystans = czas / 58;

  return dystans;
}

void zakresgreen1(int a) {
  int jakDaleko = zmierzOdleglosc();
  if ((jakDaleko >= a)) {  //jakDaleko większe lub równe 6cm świeci green1
    digitalWrite(green1, HIGH);
  } else {
    digitalWrite(green1, LOW);  //jesli jest mniejsze to gaśnie
  }
}
void zakresgreen2(int b) {
  int jakDaleko = zmierzOdleglosc();
  if ((jakDaleko >= b)) {  //jakDaleko większe lub równe 10cm świeci green2
    digitalWrite(green2, HIGH);
  } else {
    digitalWrite(green2, LOW);  //jesli jest mniejsze to gaśnie
  }
}
void zakresyellow1(int c) {
  int jakDaleko = zmierzOdleglosc();
  if ((jakDaleko >= c)) {  //jakDaleko większe lub równe 15cm świeci yellow1
    digitalWrite(yellow1, HIGH);
  } else {
    digitalWrite(yellow1, LOW);  //jesli jest mniejsze to gaśnie
  }
}
void zakresyellow2(int d) {
  int jakDaleko = zmierzOdleglosc();
  if ((jakDaleko >= d)) {  //jakDaleko większe lub równe 20cm świeci yellow2
    digitalWrite(yellow2, HIGH);
  } else {
    digitalWrite(yellow2, LOW);  //jesli jest mniejsze to gaśnie
  }
}
void zakresred1(int e) {
  int jakDaleko = zmierzOdleglosc();
  if ((jakDaleko >= e)) {  //jakDaleko większe lub równe 25cm świeci red1
    digitalWrite(red1, HIGH);
  } else {
    digitalWrite(red1, LOW);  //jesli jest mniejsze to gaśnie
  }
}
void zakresred2(int f) {
  int jakDaleko = zmierzOdleglosc();
  if ((jakDaleko >= f)) {  //jakDaleko większe lub równe 30cm świeci red2
    digitalWrite(red2, HIGH);
  } else {
    digitalWrite(red2, LOW);  //jesli jest mniejsze to gaśnie
  }
}

Moje rozwiązanie do zadania 9.4 to była super przygoda z nauką lecę poszerzać swoją wiedzę z kursem nr 2 :)))

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

include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

int trig = 3;
int echo = 2;
int redled = 8;
int yellowled = 9;
int greenled = 10;
int buzzer = 11;

#define NEOPIXEL_PIN 6
#define NUM_PIXELS 30

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_PIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);

long czas;
int odleglosc;
int poprzednieOdczyty[10];
int indeksOdczytu = 0;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(redled, OUTPUT);
  pinMode(yellowled, OUTPUT);
  pinMode(greenled, OUTPUT);
  pinMode(buzzer, OUTPUT);
  Serial.begin(9600);

  strip.begin();
  strip.show();

  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Odleglosc:");
}

void loop() {
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);

  czas = pulseIn(echo, HIGH);
  odleglosc = czas / 58;

  poprzednieOdczyty[indeksOdczytu] = odleglosc;
  indeksOdczytu = (indeksOdczytu + 1) % 10;
  int sumaOdczytow = 0;
  for (int i = 0; i < 10; i++) {
    sumaOdczytow += poprzednieOdczyty[i];
  }
  odleglosc = sumaOdczytow / 10;

  Serial.print("Odleglosc wynosi: ");
  Serial.print(odleglosc);
  Serial.println(" cm");

  lcd.setCursor(11, 1); // Ustaw kursor po słowie "Odleglosc"
  lcd.print("   "); // Wyczyść poprzednie dane
  lcd.setCursor(11, 1);
  lcd.print(odleglosc);
  lcd.print(" cm"); // Dodaj jednostkę po odległości

  if (odleglosc <= 30) {
    digitalWrite(redled, HIGH);
    digitalWrite(yellowled, LOW);
    digitalWrite(greenled, LOW);
    tone(buzzer, 900);
    for (int i = 0; i < NUM_PIXELS; i++) {
      strip.setPixelColor(i, strip.Color(255, 0, 0));
    }
    strip.show();
  } else if (odleglosc <= 50) {
    digitalWrite(redled, LOW);
    digitalWrite(yellowled, HIGH);
    digitalWrite(greenled, LOW);
    tone(buzzer, 400);
    for (int i = 0; i < NUM_PIXELS; i++) {
      strip.setPixelColor(i, strip.Color(255, 255, 0));
    }
    strip.show();
  } else {
    digitalWrite(redled, LOW);
    digitalWrite(yellowled, LOW);
    digitalWrite(greenled, HIGH);
    noTone(buzzer);
    for (int i = 0; i < NUM_PIXELS; i++) {
      strip.setPixelColor(i, strip.Color(0, 255, 0));
    }
    strip.show();
  }

  delay(100);

Hejka,

Mam delikatną sprawę, zrobiłem czujnik ultradźwiękowy plus wyświetlacz LCD plus diody led, neopixel8 oraz buzzer. Wszystko działa,  podam kod ale moja prośba brzmi czy może mnie ktoś poratować kodem np do Processing abym mógł dostać wizualny obraz tego co wykryje czujnik. Jestem początkującym elektronikiem, wiem że dużo pracy jeszcze przede mną ale taka pomoc na samym początku z pewnością by mi się przydała. Z góry dziękuję a teraz kod:

 

Edytowano przez jnowak
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

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.