Приключилась беда слабо понимаемая, а потому великая и непреодолимая.
Дано:
Ардуино уно, HC-SR04, LCD дисплей 2004.
Задумка такова: Датчик должен отправлять на ардуину данные о расстоянии, которые впоследствии должны быть вывдены на дисплей. В прицнипе, задача выполнена, за исключением одного НО...
когда расстояние до объекта становится меньше метра, то на дисплее показатели "умножаются на 10". Т.е. при реальном расстоянии, допустим, сантиметров в 20, дисплей показывает 200..

Сорри, под кат спрятать не получилось.
Вот код:
- Код: Выделить всё
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // подключаем библиотеки датчика, и дисплея
#include "Ultrasonic.h"
Ultrasonic ultrasonic(4, 3);
LiquidCrystal_I2C lcd(0x27,20,4);
void setup()
{
Serial.begin(9600); //запись для КОМ порта
lcd.init();
lcd.backlight(); //надписи на дисплее, подсветка, инициализация
lcd.setCursor(0,1);
lcd.print("Dalnost");
}
void loop()
{
lcd.setCursor(8, 1);
float dist_cm = ultrasonic.Ranging(CM);
lcd.print (ultrasonic.Ranging(CM));
Serial.println (dist_cm); // Вывод для КОМ порта
delay(1500);
}
Метод Ranging
- Код: Выделить всё
long Ultrasonic::Ranging(int sys)
{
Timing();
distacne_cm = duration /29 / 2 ;
distance_inc = duration / 74 / 2;
if (sys)
return distacne_cm;
else
return distance_inc;
}
Метод Timing
- Код: Выделить всё
long Ultrasonic::Timing()
{
digitalWrite(Trig_pin, LOW);
delayMicroseconds(2);
digitalWrite(Trig_pin, HIGH);
delayMicroseconds(10);
digitalWrite(Trig_pin, LOW);
duration = pulseIn(Echo_pin, HIGH);
return duration;
}
Содержимое библиотеки ultrasonic.h
- Код: Выделить всё
/*
Ultrasonic.h - Library for HR-SC04 Ultrasonic Ranging Module.
Created by ITead studio. Alex, Apr 20, 2010.
iteadstudio.com
updated by noonv. Feb, 2011
http://robocraft.ru
*/
#ifndef Ultrasonic_h
#define Ultrasonic_h
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#define CM 1
#define INC 0
class Ultrasonic
{
public:
Ultrasonic(int TP, int EP);
long Timing();
long Ranging(int sys);
private:
int Trig_pin;
int Echo_pin;
long duration,distacne_cm,distance_inc;
};
#endif //#ifndef Ultrasonic_h
В конечном итоге, что делать с такими неточностями в работе, мне неизвестно. Может, кто-то сталкивался?