Подсветка коридора
- Войдите на сайт для отправки комментариев
Пнд, 24/09/2012 - 13:55
Всем привет с толкнулся с проблемой в написании скетча.
Есть коридор, светодиодная лента, 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 лента! как это исправить?
Разъясняю если кто то не понял действия должны быть такими:
1) если заходишь в коридор и задеваешь сенсор 1 то включается первая половина коридора подсветки и при прохождение сенсора 2 вдобавок к 1 половине коридора включается 2 половина коридора
2) если заходишь в коридор и задеваешь сенсор 2 то включается вторая половина коридора подсветки
3) если выходишь из задней комнаты и задеваешь сенсор 3 то включается весь коридор и в этом случае 1 и 2 сенсор не должны срабатывать!
4) при прохождение каждого датчика отправляется команда на загорание ленты на 5 секунд но если кто то проходит этот датчик повторно то должно добавляться по 5 секунд!
Сильно не вникал, но сразу бросаются в глаза использование delay(). Его в принципе нельзя использовать в любой системе реального времени. На нем скетч останавливается и "тупит". Ничего не смотрит, ничего не делает.
Идите в раздел "Программирование" и смотрите пример "мигаем диодом без delay()" (ну и по форуму примеров подобных - много, но не уверен что будет просто найти. хотя все зависит от упорства :)
Можешь помощь дописать скетч?
Я не совсем понял что вы хотите, все-таки.
Что-бы я за вас делал работу (написал скетч) или помог? Я дал вам "наводку" что искать. Каких-то попыток "воспользоватся этим" - пока не видно. И пример в докуметации есть, и на форуме уже неоднократно подобные задачи и кодом и текстом решал/рассказывал.
Помощь - подразумевает что вы сами пытаетесь. Читаете пробуете, показываете что получается. Вам подсказывают "в чем грабли". На что обратить внимание.
Если вы хотите заказать "выполнение работы"? Это тоже возможно, но дорого :)