HC-SR04 и LCD 1602

zugni
Offline
Зарегистрирован: 14.06.2015

 HC-SR04 вывести показания на LCD 1602 почему-то ошибок нту а на экране пусто 

может есть мысли из за чего так ?

 

#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int pingPin = 7; //output 10us pulse to this pin
int inPin = 6; //measure return pulse width from this pin
long duration, inches, cm;
int indec, cmdec;
int inchconv = 147; // ratio between puls width and inches
int cmconv = 59; // ratio between pulse width and cm
String s1, s2;

// initialise LCD library and pins
void setup() {
  lcd.begin(16, 2);
  pinMode(pingPin, OUTPUT);
  pinMode(inPin, INPUT);
}

void loop()
{
  // Send a short LOW followed by HIGH pulse to Trigger input:
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(pingPin, LOW);

  // read the length of the return pulse on Echo output
  duration = pulseIn(inPin, HIGH);

  // convert the time into a distance (non-floating point with decimals
  inches = microsecondsToInches(duration);
  indec = (duration - inches * inchconv) * 10 / inchconv;
  cm = microsecondsToCentimeters(duration);
  cmdec = (duration - cm * cmconv) * 10 / cmconv;
  s1 = String(inches) + "." + String(indec) + "in" + "     ";
  s2 = String(cm) + "." + String(cmdec) + "cm" + "     ";
  lcd.setCursor(0, 0); // print inches on top line of LCD
  lcd.print(s1);
  lcd.setCursor(0,1); // print cm on second line of LCD
  lcd.print(s2);

  delay(100);
}

long microsecondsToInches(long microseconds)
{
  return microseconds / inchconv;
}

long microsecondsToCentimeters(long microseconds)
{
  return microseconds / cmconv;
}

 

zugni
Offline
Зарегистрирован: 14.06.2015

Источник вот :    http://www.4tronix.co.uk/arduino/Ultra-Sonic.php

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

в строку 18:  lcd.print("Display test"); delay (5000);

Работает?

zugni
Offline
Зарегистрирован: 14.06.2015

нет

 

Arhat109
Offline
Зарегистрирован: 26.05.2015

Попробуйте этот вариант. Я так у себя калибровал HC-SR04. Почему-то делить пришлось не на 59 как везде а на 76. Это для Меги. Ножки - выставьте свои.

int ledPin = 13;
int trigPin = 4;
int echoPin = 3;

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
 
void loop() {
  long duration;
  int   cm, mm;

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 76;
  mm = (duration - cm*76)*1000/76;
  Serial.println(duration);
  
  Serial.print(cm);
  Serial.print(".");
  Serial.print(mm);
  Serial.println(" cm");
  delay(150);
/*
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(150);              // wait for a second
  digitalWrite(ledPin, LOW);   // set the LED on
  delay(150);              // wait for a second
  digitalWrite(ledPin, HIGH);    // set the LED off
  delay(150);              // wait for a second
  digitalWrite(ledPin, LOW);   // set the LED on
  delay(500);              // wait for a second
  digitalWrite(ledPin, HIGH);    // set the LED off
  delay(150);              // wait for a second
  digitalWrite(ledPin, LOW);    // set the LED off
  delay(1000);              // wait for a second
  */
}

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

1. Верхняя строка индикатора тёмная, а нижняя светлая?
Тогда не прошла инициализация из-за неправильного подключения.

2. Если нет- крутите потенциометр. И дальше пункт 1.

Arhat109
Offline
Зарегистрирован: 26.05.2015

А вот этим кодом проверялась связка этого датчика с LCD1602. Тоже для Меги 2560. У меня дисплей на шине I2C (scl, sda - ножки).

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

int ledPin = 13;

int redPin = 5;
int greenPin = 6;
int bluePin   = 7;

int trigPin = 4;
int echoPin = 3;
int dist1 = 80;
int dist2 = 40;
int dist3 = 20;

//задаем адрес LCD экрана 0x27, 16 символов, 2 строки
LiquidCrystal_I2C lcd(0x27,16,2); 

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

  lcd.init();                          // Инициализируем экран
  lcd.backlight();                 //включаем подсветку
  lcd.setCursor(2,0);            // поз.=3, строка=1 (0,0)
  lcd.print("Hi, I am work!"); // //выводим строку 1
}

void loop() {
  long duration;
  int   cm, mm;

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 76;
  mm = (duration - cm*76)*1000/76;

  if( cm<dist1 ){
    digitalWrite(redPin, HIGH);
  }
  if( cm<dist2 ){
    digitalWrite(greenPin, HIGH);
  }
  if( cm<dist3 ){
    digitalWrite(bluePin, HIGH);
  }
  delay(150);
  digitalWrite(redPin, LOW);
  digitalWrite(greenPin, LOW);
  digitalWrite(bluePin, LOW);
  
  Serial.println(duration);
  Serial.print(cm);
  Serial.print(".");
  Serial.print(mm);
  Serial.println(" cm");
//  delay(150);

  digitalWrite(ledPin, HIGH);
  delay(150);
  digitalWrite(ledPin, LOW);
  delay(150);
  digitalWrite(ledPin, HIGH);
  delay(150);
  digitalWrite(ledPin, LOW);

  lcd.setCursor(0, 1);
  lcd.print("                ");
  lcd.setCursor(0, 1);
  lcd.print(cm);
  lcd.setCursor(3, 1);
  lcd.print('.');
  lcd.setCursor(4, 1);
  lcd.print(mm);
  lcd.setCursor(8, 1);
  lcd.print("cm.");
}

 

zugni
Offline
Зарегистрирован: 14.06.2015

Спасибо с последнем примером хорошо а состальными ругается мол библиотека не та для lcd  а с последним все гуд ( фантастика какая то 

Radjah
Offline
Зарегистрирован: 06.08.2014

В скетче из оппоста дисплей надо подключать к указанным ногам 3 строки. В #6 код для i2c.

zugni
Offline
Зарегистрирован: 14.06.2015

всеь спасибо))

ua3msi
Offline
Зарегистрирован: 07.05.2017