Страница 5 из 5 ПерваяПервая 12345
Показано с 41 по 48 из 48
  1. #41
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Применение емкостных Touch кнопок на Carduino.

    Напрямую точно долго не проработает

  2. #42
    Продвинутый
    Регистрация
    03.06.2012
    Возраст
    38
    Сообщений
    210
    Вес репутации
    196

    По умолчанию Re: Применение емкостных Touch кнопок на Carduino.

    Попробовал поработать с 6-ю метрами провода))) Приобрел в радио магазине экранированный многожильный провод написал простейший скетч. На просторах интернета нашел даташит на at42qt1010 (одноканальный емкостный датчик)
    Нажмите на изображение для увеличения. 

Название:	news_110411.gif 
Просмотров:	2927 
Размер:	5.4 Кб 
ID:	17464
    и в даташите выяснил емкости конденсаторв Сs от 2 до 50 nF и Cх от 2 до 50 pF

    в своем случае я взял Сх 5 pF

    провод у меня 4-х жильный 3 жилы я замкнул на массу и оставил только одну а ее через конденсатор на массу.

    PHP код:
    #include <CapacitiveSensor.h>
    int Light 12;
    CapacitiveSensor   Sensor1 CapacitiveSensor(4,2); // назначить пины для сенсора 

    void setup()                      
    {  
       
    Serial.begin(115200);   // настроить скорость порта 
         
    pinMode(LightOUTPUT);
    }  

    void loop()                      
    {  
        
    long temp1 =  Sensor1.capacitiveSensor(30); // измерить емкость и сохранить в temp1 
       

        
    if (temp1 1000)    // изменяя значение 60 мы регулируем чуствительность сенсора  
        
    digitalWrite(12HIGH);   }    // включить светодиод  
      
    else { digitalWrite(12LOW); } // выключить светодиод] 
       
       
       
        
    Serial.println(temp1);  // для клибровки вашего датчика   // или для использования этого значения в компьютере
                                

    в видео видно на мониторе порта что при касаниях число вазростает от 150 до 9 тысяч когда провод я держал в руке то чисто было где то 150 может чуть больше когда я его положил то от 25 до 80 а потом я положил локоть на все провода число поднялось

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

    так же я экспериментировал с 2-мя жилами в одном экране так не получается так как один провод даст наводку на другой внутри экрана и загорятся 2 диода одновременно. Продолжаем экспериментировать)))

  3. #43
    Продвинутый
    Регистрация
    03.06.2012
    Возраст
    38
    Сообщений
    210
    Вес репутации
    196

    По умолчанию Re: Применение емкостных Touch кнопок на Carduino.

    не знаю где спрашивать так что спрошу тут хочу сделать кнопки многофункциональными например однократное нажатие двойное нажатие (как на мышке) и зажатие более 1 секунды при этом будут выполняться разные действия как это можно реализовать более простым способом или нужно вводить таймер в скетч ?

  4. #44
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Применение емкостных Touch кнопок на Carduino.

    Можно использовать функцию millis

  5. #45
    Продвинутый
    Регистрация
    03.06.2012
    Возраст
    38
    Сообщений
    210
    Вес репутации
    196

    По умолчанию Re: Применение емкостных Touch кнопок на Carduino.

    ага а с 9-ю кнопками прокатит?

  6. #46
    Продвинутый
    Регистрация
    03.06.2012
    Возраст
    38
    Сообщений
    210
    Вес репутации
    196

    По умолчанию Re: Применение емкостных Touch кнопок на Carduino.

    вот скетч по многофункциональности нашел на английской версии сайта Arduino

    http://forum.arduino.cc/index.php/topic,14479.0.html

    благодаря manu_245 он помог мне совместить все это в один скетч

    PHP код:
    /* 4-Way Button:  Click, Double-Click, Press+Hold, and Press+Long-Hold Test Sketch

    By Jeff Saltzman
    Oct. 13, 2009

    To keep a physical interface as simple as possible, this sketch demonstrates generating four output events from a single push-button.
    1) Click:  rapid press and release
    2) Double-Click:  two clicks in quick succession
    3) Press and Hold:  holding the button down
    4) Long Press and Hold:  holding the button for a long time 
    */

    #define buttonPin 19        // analog input pin to use as a digital input
    #define ledPin1 18          // digital output pin for LED 1
    #define ledPin2 17          // digital output pin for LED 2
    #define ledPin3 16          // digital output pin for LED 3
    #define ledPin4 15          // digital output pin for LED 4


    // LED variables
    boolean ledVal1 false;    // state of LED 1
    boolean ledVal2 false;    // state of LED 2
    boolean ledVal3 false;    // state of LED 3
    boolean ledVal4 false;    // state of LED 4

    // Button timing variables
    int debounce 20;          // ms debounce period to prevent flickering when pressing or releasing the button
    int DCgap 250;            // max ms between clicks for a double click event
    int holdTime 1000;        // ms hold period: how long to wait for press+hold event
    int longHoldTime 3000;    // ms long hold period: how long to wait for press+hold event




    int checkButton();   

     
        
    // Button variables
    boolean buttonVal HIGH;   // value read from button
    boolean buttonLast HIGH;  // buffered value of the button's previous state
    boolean DCwaiting false;  // whether we're waiting for a double click (down)
    boolean DConUp false;     // whether to register a double click on next release, or whether to wait and click
    boolean singleOK true;    // whether it's OK to do a single click
    long downTime = -1;         // time the button was pressed down
    long upTime = -1;           // time the button was released
    boolean ignoreUp false;   // whether to ignore the button release because the click+hold was triggered
    boolean waitForUp false;        // when held, whether to wait for the up event
    boolean holdEventPast false;    // whether or not the hold event happened already
    boolean longHoldEventPast false;// whether or not the long hold event happened already


    //=================================================

    void setup() {
        
    // Set button input pin
        
    pinMode(buttonPinINPUT);
        
    digitalWrite(buttonPinHIGH );
        
    // Set LED output pins
        
    pinMode(ledPin1OUTPUT);
        
    digitalWrite(ledPin1ledVal1);
        
    pinMode(ledPin2OUTPUT);
        
    digitalWrite(ledPin2ledVal2);
        
    pinMode(ledPin3OUTPUT);    
        
    digitalWrite(ledPin3ledVal3);
        
    pinMode(ledPin4OUTPUT);    
        
    digitalWrite(ledPin4ledVal4);
        


    }

    void loop() 

      {
       
    int b checkButton();
        
        if (
    == 1clickEvent();
        if (
    == 2doubleClickEvent();
        if (
    == 3holdEvent();
        if (
    == 4longHoldEvent();
      }
        
    // Get button event and act accordingly
        
      
    int checkButton()
        {  
        
    int event 0;
        
    buttonVal digitalRead(buttonPin);

       
        
        
    // Button pressed down
        
    if (buttonVal == LOW && buttonLast == HIGH && (millis() - upTime) > debounce)
        {
            
    downTime millis();
            
    ignoreUp false;
            
    waitForUp false;
            
    singleOK true;
            
    holdEventPast false;
            
    longHoldEventPast false;
            if ((
    millis()-upTime) < DCgap && DConUp == false && DCwaiting == true)  DConUp true;
            else  
    DConUp false;
            
    DCwaiting false;
        }
        
    // Button released
        
    else if (buttonVal == HIGH && buttonLast == LOW && (millis() - downTime) > debounce)
        {        
            if (
    not ignoreUp)
            {
                
    upTime millis();
                if (
    DConUp == falseDCwaiting true;
                else
                {
                    
    event 2;
                    
    DConUp false;
                    
    DCwaiting false;
                    
    singleOK false;
                }
            }
        }
        
    // Test for normal click event: DCgap expired
        
    if ( buttonVal == HIGH && (millis()-upTime) >= DCgap && DCwaiting == true && DConUp == false && singleOK == true && event != 2)
        {
            
    event 1;
            
    DCwaiting false;
        }
        
    // Test for hold
        
    if (buttonVal == LOW && (millis() - downTime) >= holdTime) {
            
    // Trigger "normal" hold
            
    if (not holdEventPast)
            {
                
    event 3;
                
    waitForUp true;
                
    ignoreUp true;
                
    DConUp false;
                
    DCwaiting false;
                
    //downTime = millis();
                
    holdEventPast true;
            }
            
    // Trigger "long" hold
            
    if ((millis() - downTime) >= longHoldTime)
            {
                if (
    not longHoldEventPast)
                {
                    
    event 4;
                    
    longHoldEventPast true;
                }
            }
        }
        
    buttonLast buttonVal;
        return 
    event;
    }





    //=================================================
    // Events to trigger

     
    void clickEvent()

     {
        
    ledVal1 = !ledVal1;
        
    digitalWrite(ledPin1ledVal1);
    }
    void doubleClickEvent() {
        
    ledVal2 = !ledVal2;
        
    digitalWrite(ledPin2ledVal2);
    }
    void holdEvent() {
        
    ledVal3 = !ledVal3;
        
    digitalWrite(ledPin3ledVal3);
    }
    void longHoldEvent() {
        
    ledVal4 = !ledVal4;
        
    digitalWrite(ledPin4ledVal4);



    только работает он с обыкновенной кнопкой а мне нужно с сенсором
    Последний раз редактировалось Omigovolt; 13.02.2014 в 01:28.

  7. #47
    Продвинутый
    Регистрация
    03.06.2012
    Возраст
    38
    Сообщений
    210
    Вес репутации
    196

    По умолчанию Re: Применение емкостных Touch кнопок на Carduino.

    Вчера вечером дописав несколько строк с manu_245 все заработало с сенсором )
    PHP код:
    /* 4-Way Button:  Click, Double-Click, Press+Hold, and Press+Long-Hold Test Sketch

    By Jeff Saltzman
    Oct. 13, 2009

    To keep a physical interface as simple as possible, this sketch demonstrates generating four output events from a single push-button.
    1) Click:  rapid press and release
    2) Double-Click:  two clicks in quick succession
    3) Press and Hold:  holding the button down
    4) Long Press and Hold:  holding the button for a long time 
    */

    #include <CapacitiveSensor.h>

    CapacitiveSensor   Sensor1 CapacitiveSensor(4,2);
    #define buttonPin 19        // analog input pin to use as a digital input
    #define ledPin1 18          // digital output pin for LED 1
    #define ledPin2 17          // digital output pin for LED 2
    #define ledPin3 16          // digital output pin for LED 3
    #define ledPin4 15          // digital output pin for LED 4


    // LED variables
    boolean ledVal1 false;    // state of LED 1
    boolean ledVal2 false;    // state of LED 2
    boolean ledVal3 false;    // state of LED 3
    boolean ledVal4 false;    // state of LED 4

    // Button timing variables
    int debounce 20;          // ms debounce period to prevent flickering when pressing or releasing the button
    int DCgap 250;            // 
    int holdTime 1000;        // ms hold period: how long to wait for press+hold event
    int longHoldTime 3000;    // ms long hold period: how long to wait for press+hold event



    boolean flag=false;
    int checkButton();   

     
        
    // Button variables
    boolean buttonVal HIGH;   // value read from button
    boolean buttonLast HIGH;  // buffered value of the button's previous state
    boolean DCwaiting false;  // whether we're waiting for a double click (down)
    boolean DConUp false;     // whether to register a double click on next release, or whether to wait and click
    boolean singleOK true;    // whether it's OK to do a single click
    long downTime = -1;         // time the button was pressed down
    long upTime = -1;           // time the button was released
    boolean ignoreUp false;   // whether to ignore the button release because the click+hold was triggered
    boolean waitForUp false;        // when held, whether to wait for the up event
    boolean holdEventPast false;    // whether or not the hold event happened already
    boolean longHoldEventPast false;// whether or not the long hold event happened already


    //=================================================

    void setup() {
      
      
    Serial.begin(115200);
      
        
    // Set button input pin
        
    pinMode(buttonPinINPUT);
        
    digitalWrite(buttonPinHIGH );
        
    // Set LED output pins
        
    pinMode(ledPin1OUTPUT);
        
    digitalWrite(ledPin1ledVal1);
        
    pinMode(ledPin2OUTPUT);
        
    digitalWrite(ledPin2ledVal2);
        
    pinMode(ledPin3OUTPUT);    
        
    digitalWrite(ledPin3ledVal3);
        
    pinMode(ledPin4OUTPUT);    
        
    digitalWrite(ledPin4ledVal4);
        


    }


    void loop()                      
    {  
        
     
       
       
       
    int b checkButton();
        
        if (
    == 1clickEvent();
        if (
    == 2doubleClickEvent();
        if (
    == 3holdEvent();
        if (
    == 4longHoldEvent();
      }
        
    // Get button event and act accordingly
        
      
    int checkButton()
        {  
        
    int event 0;
        
        
    long temp1 =  Sensor1.capacitiveSensor(30);
        
    Serial.println(temp1);
        if(
    temp1>1000)
        
    {
      
    buttonVal=0;
    }
    else 
    buttonVal=1;

       
        
        
    // Button pressed down
        
    if (buttonVal == LOW && buttonLast == HIGH && (millis() - upTime) > debounce )
        {
            
    downTime millis();
            
    ignoreUp false;
            
    waitForUp false;
            
    singleOK true;
            
    holdEventPast false;
            
    longHoldEventPast false;
            if ((
    millis()-upTime) < DCgap && DConUp == false && DCwaiting == true )  DConUp true;
            else  
    DConUp false;
            
    DCwaiting false;
        }
        
    // Button released
        
    else if (buttonVal == HIGH && buttonLast == LOW && (millis() - downTime ) > debounce)
        {        
            if (
    not ignoreUp)
            {
                
    upTime millis();
                if (
    DConUp == falseDCwaiting true;
                else
                {
                    
    event 2;
                    
    DConUp false;
                    
    DCwaiting false;
                    
    singleOK false;
                }
            }
        }
        
    // Test for normal click event: DCgap expired
        
    if ( buttonVal == HIGH && (millis()-upTime) >= DCgap && DCwaiting == true && DConUp == false && singleOK == true && event != )
        {
            
    event 1;
            
    DCwaiting false;
        }
        
    // Test for hold
        
    if (buttonVal == LOW && (millis() - downTime) >= holdTime ) {
            
    // Trigger "normal" hold
            
    if (not holdEventPast)
            {
                
    event 3;
                
    waitForUp true;
                
    ignoreUp true;
                
    DConUp false;
                
    DCwaiting false;
                
    //downTime = millis();
                
    holdEventPast true;
            }
            
    // Trigger "long" hold
            
    if ((millis() - downTime) >= longHoldTime)
            {
                if (
    not longHoldEventPast)
                {
                    
    event 4;
                    
    longHoldEventPast true;
                }
            }
        }
        
    buttonLast buttonVal;
        return 
    event;

      }





    //=================================================
    // Events to trigger

     
    void clickEvent()

     {
        
    ledVal1 = !ledVal1;
        
    digitalWrite(ledPin1ledVal1);
    }
    void doubleClickEvent() {
        
    ledVal2 = !ledVal2;
        
    digitalWrite(ledPin2ledVal2);
    }
    void holdEvent() {
        
    ledVal3 = !ledVal3;
        
    digitalWrite(ledPin3ledVal3);
    }
    void longHoldEvent() {
        
    ledVal4 = !ledVal4;
        
    digitalWrite(ledPin4ledVal4);
        
        
         
    Serial.println (buttonVal);


  8. #48
    Новичок
    Регистрация
    21.12.2015
    Сообщений
    1
    Вес репутации
    0

    По умолчанию Re: Применение емкостных Touch кнопок на Carduino.

    Если кто будет тут проходить, может кто вспомнит эту штуку:
    С этим методом возникла проблема. Я пытаюсь померять с помощью этих сенсорных кнопок уровень воды, не сенсоры разумеется с наружи пластикового бака. С самим измерением проблем, все можно откалибровать и замерить. Но возникла проблема после перезагруки уструстойства или сбросе - показания с датчиков падают в 0, и что бы вернуть систему к жизни, надо разорвать линию между контроллером и "сенсорной кнопкой". Причем разорвать физически, я даже пробовал при помощи реле, но выяснил, что если между реле и контроллером есть гальваническая связь - эффекта не будет. Пришлось брать второй контроллер с другим питанием что бы был четкий разрыв! Если землей связать 2 контроллера - эффекта от разрыва опять не будет!
    Кто может подсказать что это за фигня такая???

Страница 5 из 5 ПерваяПервая 12345

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •