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