Помогите новичку
- Войдите на сайт для отправки комментариев
Втр, 09/10/2012 - 15:24
Осваиваю азы. HC-SR04 как переключатель светодиода.
// work 1 Включает диод и пишет состояние при приближении #include "Ultrasonic.h" // sensor connected to: // Trig - 12, Echo - 13 Ultrasonic ultrasonic(12, 13); int led = 11; //int val; int state = LOW; // 0 = LED off while 1 = LED on int dist1 = 0; int dist2 = 0; void setup() { Serial.begin(9600); // start the serial port pinMode(led, OUTPUT); state = LOW; // темнота digitalWrite(led, state); } void loop() { dist1 = ultrasonic.Ranging(CM); if ((dist2-dist1)>10); // на датчике движение { if (state = HIGH) state = LOW; else state = HIGH; } Serial.println(dist1-dist2); // проверка на мониторе Serial.println(state); dist2 = dist1; digitalWrite(led, state); delay(100); } }
монитор показывает, что расстояние от сенсора до руки меняется, но state постоянно 0. Что неправильно?
Я что-то логику не понял. По какому условию должен переключиться светодиод? Или загораться? Или тухнуть? Напишите алгоритм и приведите содержимое монитора.
И прочитайте правила, называйте тему нормально, а не "спасите-помогите"!
Уберите из 23 строки ; (точку с запятой).
Уберите из 23 строки ; (точку с запятой).
БЛИН! А я ее не заметил, котя текст прочитал.
И в 25 строке нужно не присваивать = , а сравнивать ==
Логика: при движении около датчика переключается светодиод.
Содержимое монитора в момент "движения"
1
0
-200
0
199
0
0
0
т.е. присвоение dist1 и dist2 происходит, а state не меняет своего состояния..
== супер. спасибо
Быстрая же у вас рука, если вы можете переместить ее на 10 см за 100 мс. ) сделайте delay(500); или даже delay(1000);.
А если у вас dist1 будет больше dist2, то условие не выполнится, поэтому разница должна быть по модулю
попробовал с abs(). светодиод не гаснет при движении руки над датчиком. при увеличении задержки вообще не срабатывает. в случае баз abs() срабатывание идет только при удалении объекта от датчика. т.е. задача переключения выполняется..
На счет "переключится". После переключения просится пауза, иначе при продолжении движения он так и будет переключаться туда-сюда.
Добавил в цикл паузу. Переключение стало более отчетливым. Спасибо за советы.
попробовал с abs(). светодиод не гаснет при движении руки над датчиком.
Что-то не так делаете условие должно выполнять при изменении дистанции на 10 см в любую сторону.
Лучше все же, чтобы срабатывало при движении в одну сторону, а то вместо простого взмаха придется выполнять "сложный" - быстро вперед, медленно назад :)
Это зависит от того для каких целей и где установлен датчик.
На данном этапе все работает как и было задумано. (цель выполнена). Спасибо.
Придумываю следующую задачу и буду с Вашей помошью ее героически решать.