Сенсорная "кнопка"

Basic40
Offline
Зарегистрирован: 25.12.2015

 Всем привет. Уважаемые программисты, помогите новичку. Три дня назад купил Ардуино-хотел сделать сенсорное управление включение света в "туалете-ванна-коридор" ( они все от одного трехклавишного выключателя). Дома маленький ребенок и, мне кажется, что уж громко они щелкают (ну это так--шутка юмора). А вообще хочу сделать "умный дом" на голосовом управлении(easyVR). Ну это все позже, а пока собрал и загрузил скетч

http://compcar.ru/forum/showthread.php?t=4771

но, это не совсем то. Как вы понимаете, надо чтоб при одном касании свет включился и горел, а при следующим касании свет погас.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

для начала сколько тебе лет?

Basic40
Offline
Зарегистрирован: 25.12.2015

 40, как это влияет?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

думал помогать или нет

пробуй

#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);                       //пауза 
}

странно я написал))) под виски по другому пишется код)))

Basic40
Offline
Зарегистрирован: 25.12.2015

неа, не работает. Я даже признаюсь, что не пойму, как она работает. Мой сенсор при касании показывает от 2000,

а без от 0 до 600. В той прог-мме я поменял значение 60 на 700, а тут даже не знаю...извини. у меня опыт программирования 2 года(школа)-бейсик и 2 дня для ардуино.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

пробуй. там мой косяк был

#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);                       //пауза 
}

 

Basic40
Offline
Зарегистрирован: 25.12.2015

коснулся-горит, отпустил-погас

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

рано или поздно у меня получится)) сначала без защиты дополнительной (кроме 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);                       //пауза 
}

 

Basic40
Offline
Зарегистрирован: 25.12.2015

ща попробую

Basic40
Offline
Зарегистрирован: 25.12.2015

что то как-то много ошибок выскакивает.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

закрой среду. еще раз открой и код вставь, и откомпилируй. если ошибки будут пиши сюда какие

Basic40
Offline
Зарегистрирован: 25.12.2015

ok

Basic40
Offline
Зарегистрирован: 25.12.2015
Arduino: 1.6.4 (Windows 8.1), Плата"Arduino Uno"
 
sensor3.ino: In function 'void loop()':
sensor3:17: error: expected ';' before '}' token
expected ';' before '}' token
 
  Это сообщение будет содержать больше информации чем
  "Отображать вывод во время компиляции"
  включено в Файл > Настройки
 
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да точно точку с запятой забыл. пришлось либу качать))

#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);                       //пауза 
}

 

Basic40
Offline
Зарегистрирован: 25.12.2015

неа, теперь даже и не загорается

Basic40
Offline
Зарегистрирован: 25.12.2015

ладно, большое спасибо. направление я понял--попробую сам.

супруга уже злится-время-то 3 ночи.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

значит только начал заниматься этим делом. моя уже спокойнее относится, разве что ругает что опздно ложусь  и не высплюсь перед работой

std
Offline
Зарегистрирован: 05.01.2012

Меня опыты с CapSense убедили в том, что лучше купить TTP223, благо ей цена пол юаня. Правда корпус маленький и это однозначный минус.

Basic40
Offline
Зарегистрирован: 25.12.2015

jeka_tm.

state!=state;  почемуто не работало, переписал вот так

state=1-state;    и заработало.

Теперь вот такой вопрос: как сделать, что б светодиод не моргал ( delay(300))?, если долго держишь палец на сенсоре. Можно ли как-то просто остановить прог-му пока temp1>700?

Basic40
Offline
Зарегистрирован: 25.12.2015

std

мой сенсор работает прекрасно. Интересно, а если к ТТР223 припаять проводок с , ну я не знаю, с куском фольги- будет ли работать?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Basic40 пишет:

jeka_tm.

state!=state;  почемуто не работало, переписал вот так

Отчего же "не работало". Это тождественная false.

Цитата:

state=1-state;    и заработало.

А это - совсем другое. В большинстве случаев (но не во всех) будет работать как

state = !state;

Цитата:

Теперь вот такой вопрос: как сделать, что б светодиод не моргал ( delay(300))?, если долго держишь палец на сенсоре. Можно ли как-то просто остановить прог-му пока temp1>700?

Делается на основе blink without delay.

Остановить на времся программу? delay() именно это и делает. Вы уверены, что это то, что Вам нужно?

В принципе:

while(temp1>700);

Это будет работать в точности так, как Вы описали, но не уверен, что так, как Вам бы хотелось.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
#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);                       //пауза 
}