#include <Servo.h>
#define coef 10 //(коэффициент соответствия 10 градусов на 1см)
#define dead_zone 10
#define max_value 30
#define servoPin 6
#define Trig 13
#define Echo 12
Servo myservo;
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
void setup()
{
pinMode(Trig, OUTPUT); //инициируем как выход
pinMode(Echo, INPUT); //инициируем как вход
myservo.attach(servoPin);
myservo.write(0);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
unsigned int impulseTime=0;
unsigned int distance_sm=0;
void loop()
{
digitalWrite(Trig, HIGH); /* Подаем импульс на вход
trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(Trig, LOW); // Отключаем
impulseTime = pulseIn(Echo, HIGH); // Замеряем длину импульса
distance_sm = impulseTime/58; // Пересчитываем в сантиметры
if (distance_sm < dead_zone)// если дистанция менее 4 см, серва в положении ноль градусов
{
myservo.write(90);
setColor(100, 0, 0); // красный
}
else
{
myservo.write(0);
setColor(0, 0, 0);
}
delay(100); /* ждем 0.1 секунды,
Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. Это время называется периодом цикла (cycle period). Рекомендованный период между импульсами должен быть не менее 50 мс.
*/
}
void setColor(int red, int green, int blue)
{
#ifdef COMMON_ANODE
red = 255 - red;
green = 255 - green;
blue = 255 - blue;
#endif
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}