Подсветка коридора

ZyyyRu
ZyyyRu аватар
Offline
Зарегистрирован: 24.09.2012

Всем привет с толкнулся с проблемой в написании скетча.

Есть коридор, светодиодная лента, Arduino, 3 Ультразвуковой дальномера (HC-SR04) и 1 Реле 5V 2-Channel Relay Shield.

вот изоброжение примерной схемы коридора и расположение датчиков

также есть не доделанный скетч

#define ON 0
#define OFF 1
int echoPin = 31;
int initPin = 30;
int relePin = 22;
int distance = 0;
unsigned long pulseTime = 0;

int echoPin2 = 41;
int initPin2 = 40;
int relePin2 = 23;
int distance2 = 0;
unsigned long pulseTime2 = 0;

int echoPin3 = 51;
int initPin3 = 50;
int distance3 = 0;
unsigned long pulseTime3 = 0;
const long lightHold = 5000;

void setup() 
{
 pinMode(initPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(relePin, OUTPUT);
 pinMode(initPin2, OUTPUT);
 pinMode(echoPin2, INPUT);
 pinMode(relePin2, OUTPUT);
 pinMode(initPin3, OUTPUT);
 pinMode(echoPin3, INPUT);
 digitalWrite(relePin, OFF); 
 digitalWrite(relePin2, OFF);  
 Serial.begin(9600);
}

void loop() 
{
 digitalWrite(initPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(initPin, LOW);
 pulseTime = pulseIn(echoPin, HIGH);
 distance = pulseTime/58;

 digitalWrite(initPin2, HIGH);
 delayMicroseconds(10);
 digitalWrite(initPin2, LOW);
 pulseTime2 = pulseIn(echoPin2, HIGH);
 distance2 = pulseTime2/58;
 
 Serial.print("SRF05_1: ");
 Serial.print(distance, DEC);
 Serial.print("cm  ");
 Serial.print("SRF05_2: ");
 Serial.print(distance2, DEC);
 Serial.println("cm  ");
 
if (distance <= 10)
{
  digitalWrite(relePin, LOW);
  delay(lightHold);
}
  else
{
   digitalWrite(relePin, HIGH); 
}
 if (distance2 <= 20)
  {
    digitalWrite(relePin2, LOW);
    delay(lightHold);
  }
  else
  {
     digitalWrite(relePin2, HIGH); 
  }
if (distance3 <= 10)
{
  digitalWrite(relePin, LOW);
  digitalWrite(relePin2, LOW);
  delay(lightHold);
}
  else
{
   digitalWrite(relePin, HIGH); 
   digitalWrite(relePin2, HIGH); 
}
}

проблема в этом скетче при проходе 1 датчика лента (relePin) загораеться а когда проходишь 2 датчик (relePin2) не загораеться до тех пор пока не перестанет гореть 1 лента! как это исправить?

 

ZyyyRu
ZyyyRu аватар
Offline
Зарегистрирован: 24.09.2012

 Разъясняю если кто то не понял действия должны быть такими:
1) если заходишь в коридор и задеваешь сенсор 1 то включается первая половина коридора подсветки и при прохождение сенсора 2 вдобавок к 1 половине коридора включается 2 половина коридора
2) если заходишь в коридор и задеваешь сенсор 2 то включается вторая половина коридора подсветки
3) если выходишь из задней комнаты и задеваешь сенсор 3 то включается весь коридор и в этом случае 1 и 2 сенсор не должны срабатывать!
4) при прохождение каждого датчика отправляется команда на загорание ленты на 5 секунд но если кто то проходит этот датчик повторно то должно добавляться по 5 секунд!

leshak
Offline
Зарегистрирован: 29.09.2011

 Сильно не вникал, но сразу бросаются в глаза использование delay(). Его в принципе нельзя использовать в любой системе реального времени. На нем скетч останавливается и "тупит". Ничего не смотрит, ничего не делает.

Идите в раздел "Программирование" и смотрите пример "мигаем диодом без delay()"  (ну и по форуму примеров подобных - много, но не уверен что будет просто найти. хотя все зависит от упорства :)

ZyyyRu
ZyyyRu аватар
Offline
Зарегистрирован: 24.09.2012

 Можешь помощь дописать скетч?

leshak
Offline
Зарегистрирован: 29.09.2011

Я не совсем понял что вы хотите, все-таки.

Что-бы я за вас делал работу (написал скетч) или помог?  Я дал вам "наводку" что искать. Каких-то попыток "воспользоватся этим" - пока не видно. И пример в докуметации есть, и на форуме уже неоднократно подобные задачи и кодом и текстом решал/рассказывал.

Помощь - подразумевает что вы сами пытаетесь. Читаете пробуете, показываете что получается. Вам подсказывают "в чем грабли". На что обратить внимание.

Если вы хотите заказать "выполнение работы"? Это тоже возможно, но дорого :)