Подскажите пожалуйста по HC-SR04

metdet93
Offline
Зарегистрирован: 27.01.2016

Хочу модернизировать две настольные лампы на ВКЛ и ВЫКЛ проводя под ними рукой на расстоянии около 20-25 см, не знаю как правильно написать, нужно чтобы "когда расстояние к предмету будет меньше 30 см то включается релюшка, в следующий раз наоборот". Пока код такой:

//Тестировалось на Arduino IDE 1.0.1
#define Trig 9
#define Echo 8
#define ledPin 13

void setup() 
{  
  pinMode(Trig, OUTPUT); //инициируем как выход 
  pinMode(Echo, INPUT); //инициируем как вход 
  pinMode(ledPin, OUTPUT); 
  Serial.begin(9600); 
  /* задаем скорость общения. В нашем случае с компьютером */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; // Пересчитываем в сантиметры 
  Serial.println(distance_sm); // Выводим на порт 
  if (distance_sm<30) // Если расстояние менее 30 сантиметром 
  {     
    digitalWrite(ledPin, HIGH); // Светодиод горит 
  }  
  else 
  {   
    digitalWrite(ledPin, LOW); // иначе не горит 
  }   
  delay(100); 
Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Весь код переписывать не буду, приведу только кусок, где видно основную идею:

boolean state = 0; 
byte flag = 0;

void setup()
{
  digitalWrite(ledPin, state);
}

void loop()
{
  if (distance_sm < 30 && flag == 0)
  {
    state = ~state;
    digitalWrite(ledPin, state);
    flag = 1;
  }

  if (distance_sm > 30 && flag == 1)
  {
    flag = 2;
  } 

  if (distance_sm < 30 && flag == 2)
  {
    state = ~state;
    digitalWrite(ledPin, state);
    flag = 3;
  }

  if (distance_sm > 30 && flag == 3)
  {
    flag = 0;
  } 
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

А еще лучше  создать классы. 1 - светодиода , который по фунции invert() меняет состояние. 2- класс , который при опросе датчика переходе дальше 30- ближе 30 становится 1.

ПС:  Вы же видете кругом микросхемы. Так почему не проектировать свои "программые микросхемы"- классы.