Подсветка коридора
- Войдите на сайт для отправки комментариев
Пнд, 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()" (ну и по форуму примеров подобных - много, но не уверен что будет просто найти. хотя все зависит от упорства :)
Можешь помощь дописать скетч?
Я не совсем понял что вы хотите, все-таки.
Что-бы я за вас делал работу (написал скетч) или помог? Я дал вам "наводку" что искать. Каких-то попыток "воспользоватся этим" - пока не видно. И пример в докуметации есть, и на форуме уже неоднократно подобные задачи и кодом и текстом решал/рассказывал.
Помощь - подразумевает что вы сами пытаетесь. Читаете пробуете, показываете что получается. Вам подсказывают "в чем грабли". На что обратить внимание.
Если вы хотите заказать "выполнение работы"? Это тоже возможно, но дорого :)