HC-SR04 и LCD 1602
- Войдите на сайт для отправки комментариев
Пнд, 06/07/2015 - 19:36
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;
}
Источник вот : http://www.4tronix.co.uk/arduino/Ultra-Sonic.php
в строку 18: lcd.print("Display test"); delay (5000);
Работает?
нет
Попробуйте этот вариант. Я так у себя калибровал 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 */ }1. Верхняя строка индикатора тёмная, а нижняя светлая?
Тогда не прошла инициализация из-за неправильного подключения.
2. Если нет- крутите потенциометр. И дальше пункт 1.
А вот этим кодом проверялась связка этого датчика с 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."); }Спасибо с последнем примером хорошо а состальными ругается мол библиотека не та для lcd а с последним все гуд ( фантастика какая то
В скетче из оппоста дисплей надо подключать к указанным ногам 3 строки. В #6 код для i2c.
всеь спасибо))
https://www.youtube.com/watch?v=oOdoP3dniYA