Сенсорная "кнопка"
- Войдите на сайт для отправки комментариев
Пт, 25/12/2015 - 19:13
Всем привет. Уважаемые программисты, помогите новичку. Три дня назад купил Ардуино-хотел сделать сенсорное управление включение света в "туалете-ванна-коридор" ( они все от одного трехклавишного выключателя). Дома маленький ребенок и, мне кажется, что уж громко они щелкают (ну это так--шутка юмора). А вообще хочу сделать "умный дом" на голосовом управлении(easyVR). Ну это все позже, а пока собрал и загрузил скетч
http://compcar.ru/forum/showthread.php?t=4771
но, это не совсем то. Как вы понимаете, надо чтоб при одном касании свет включился и горел, а при следующим касании свет погас.
для начала сколько тебе лет?
40, как это влияет?
думал помогать или нет
пробуй
#include <CapSense.h> // подключить библиотеку boolean state=0; boolean old_state=0; long temp1; CapSense Sensor1 = CapSense(4,2); // назначить пины для сенсора void setup(){ Serial.begin(115200); // настроить скорость порта } void loop(){ temp(); old_state=temp1; temp(); state=temp1; if(state==old_state) digitalWrite(13,state); Serial.println(temp1); // для клибровки вашего датчика } void temp(){ temp1 = Sensor1.capSense(30); // измерить емкость и сохранить в temp1 delay(300); //пауза }странно я написал))) под виски по другому пишется код)))
неа, не работает. Я даже признаюсь, что не пойму, как она работает. Мой сенсор при касании показывает от 2000,
а без от 0 до 600. В той прог-мме я поменял значение 60 на 700, а тут даже не знаю...извини. у меня опыт программирования 2 года(школа)-бейсик и 2 дня для ардуино.
пробуй. там мой косяк был
#include <CapSense.h> // подключить библиотеку boolean state=0; boolean old_state=0; long temp1; CapSense Sensor1 = CapSense(4,2); // назначить пины для сенсора void setup(){ Serial.begin(115200); // настроить скорость порта } void loop(){ temp(); (temp1>700)? old_state=1 : old_state=0; temp(); (temp1>700)? state=1 : state=0; if(state==old_state) digitalWrite(13,state); Serial.println(temp1); // для клибровки вашего датчика } void temp(){ temp1 = Sensor1.capSense(30); // измерить емкость и сохранить в temp1 delay(300); //пауза }коснулся-горит, отпустил-погас
рано или поздно у меня получится)) сначала без защиты дополнительной (кроме 300мс)
#include <CapSense.h> // подключить библиотеку boolean state=0; boolean old_state=0; long temp1; CapSense Sensor1 = CapSense(4,2); // назначить пины для сенсора void setup(){ Serial.begin(115200); // настроить скорость порта } void loop(){ temp(); if(temp1>700){ state!=state; digitalWrite(13,state) } Serial.println(temp1); // для клибровки вашего датчика } void temp(){ temp1 = Sensor1.capSense(30); // измерить емкость и сохранить в temp1 delay(300); //пауза }ща попробую
что то как-то много ошибок выскакивает.
закрой среду. еще раз открой и код вставь, и откомпилируй. если ошибки будут пиши сюда какие
ok
да точно точку с запятой забыл. пришлось либу качать))
#include <CapSense.h> // подключить библиотеку boolean state=0; boolean old_state=0; long temp1; CapSense Sensor1 = CapSense(4,2); // назначить пины для сенсора void setup(){ Serial.begin(115200); // настроить скорость порта } void loop(){ temp(); if(temp1>700){ state!=state; digitalWrite(13,state); } Serial.println(temp1); // для клибровки вашего датчика } void temp(){ temp1 = Sensor1.capSense(30); // измерить емкость и сохранить в temp1 delay(300); //пауза }неа, теперь даже и не загорается
ладно, большое спасибо. направление я понял--попробую сам.
супруга уже злится-время-то 3 ночи.
значит только начал заниматься этим делом. моя уже спокойнее относится, разве что ругает что опздно ложусь и не высплюсь перед работой
Меня опыты с CapSense убедили в том, что лучше купить TTP223, благо ей цена пол юаня. Правда корпус маленький и это однозначный минус.
jeka_tm.
state!=state; почемуто не работало, переписал вот так
state=1-state; и заработало.
Теперь вот такой вопрос: как сделать, что б светодиод не моргал ( delay(300))?, если долго держишь палец на сенсоре. Можно ли как-то просто остановить прог-му пока temp1>700?
std
мой сенсор работает прекрасно. Интересно, а если к ТТР223 припаять проводок с , ну я не знаю, с куском фольги- будет ли работать?
jeka_tm.
state!=state; почемуто не работало, переписал вот так
Отчего же "не работало". Это тождественная false.
state=1-state; и заработало.
А это - совсем другое. В большинстве случаев (но не во всех) будет работать как
state = !state;
Теперь вот такой вопрос: как сделать, что б светодиод не моргал ( delay(300))?, если долго держишь палец на сенсоре. Можно ли как-то просто остановить прог-му пока temp1>700?
Делается на основе blink without delay.
Остановить на времся программу? delay() именно это и делает. Вы уверены, что это то, что Вам нужно?
В принципе:
while(temp1>700);
Это будет работать в точности так, как Вы описали, но не уверен, что так, как Вам бы хотелось.
#include <CapSense.h> // подключить библиотеку boolean state=0; boolean old_state=0; long temp1; CapSense Sensor1 = CapSense(4,2); // назначить пины для сенсора void setup(){ Serial.begin(115200); // настроить скорость порта } void loop(){ temp(); if(temp1>700){ state = !state; digitalWrite(13,state); } Serial.println(temp1); // для клибровки вашего датчика } void temp(){ temp1 = Sensor1.capSense(30); // измерить емкость и сохранить в temp1 delay(300); //пауза }