Arduino, CapSense и bluetooth

Тема в разделе "Arduino & Shields", создана пользователем vankenshtein, 27 фев 2015.

  1. vankenshtein

    vankenshtein Нерд

    Всем здравствуйте! Вот в чем вопрос, как сделать параллельное управление, т.е. что б можно было управлять и с блютуса и с сенсорной кнопки. По отдельности коды работают, но когда объединяешь диоды реагируют только на кнопки. Не могли бы помочь, что нужно подправить в коде.

    Код (Text):

    #include <IRremote.h>
    #include <dht.h>
    #include <CapacitiveSensor.h>

    IRsend irsend;
    DHT sensor = DHT();

    unsigned int TVPower[68] = {4450 ,4450, 600 ,1600, 600 ,1650, 600 ,1650, 550 ,550, 550 ,550, 600 ,550, 550 ,550, 550 ,550, 550 ,1650, 600 ,1650, 550 ,1650, 600 ,550, 550,550, 550,550, 600 ,550, 550 ,550, 550 ,600, 500 ,1700, 550 ,500 ,600 ,550, 550 ,550, 600 ,500, 600 ,550, 550 ,600, 500 ,1700, 550 ,550, 550,1650, 600 ,1600, 600,1650, 600 ,1600, 600 ,1650, 600 ,1600, 600 };
    unsigned int TVSource[68] = {4500 ,4450, 550 ,1650, 600 ,1650, 550 ,1650 ,600 ,500, 600 ,500 ,600 ,550, 600 ,500 ,600 ,550 ,550 ,1650, 600 ,1600, 600 ,1650, 600 ,500, 600,550, 550 ,550, 550 ,550, 600 ,550, 550 ,1650, 550 ,550 ,550 ,550 ,600 ,550, 550 ,550, 550 ,550 ,600 ,550 ,550 ,550 ,550 ,550 ,550 ,1650, 600,1650, 550 ,1600,650 ,1650 ,550 ,1650, 600 ,1600, 600 ,1650, 600};
    unsigned int TVSoundMinus[68] = {4500 ,4450, 550 ,1650, 600 ,1600, 600 ,1650, 600 ,500, 600 ,500, 600 ,550, 600 ,500, 600 ,550, 550 ,1650, 600 ,1650, 550 ,1650, 600 ,500, 600,550, 550 ,550, 550 ,550, 600 ,500, 600 ,1650, 550 ,1650, 600 ,550, 550 ,1650, 550 ,550, 600 ,550, 550 ,500, 600 ,550, 600 ,550, 550 ,500,600 ,1650, 550 ,550, 600 ,1600, 600 ,1600, 650 ,1650, 550 ,1650, 600};
    unsigned int TVSoundPlus[68] = {4450 ,4500, 550 ,1650, 600 ,1650, 550 ,1650, 600 ,500, 600 ,550, 550 ,550, 550 ,550, 600 ,550, 550 ,1600, 600 ,1650, 600 ,1650, 550 ,550, 600,550 ,550 ,550, 550 ,550, 550 ,600 ,550 ,1650, 550 ,1650 ,600 ,1650, 550 ,500, 600 ,550, 550 ,600, 550 ,550, 550 ,550, 550 ,600, 550 ,550,550 ,550, 550 ,1650,550 ,1650, 600 ,1650 ,550 ,1700, 550 ,1650 ,550};




    int IRledPin = 3; //IR Led pin PWM 3

    String readString;


    int led1 =12;                                        
    int LightPin =11;
    int led3 =10;

    long time1 = 0;
    long time2 = 0;
    long time3 = 0;
    int state1 = HIGH;
    int state2 = HIGH;
    int state3 = HIGH;

    boolean yes1;
    boolean yes2;
    boolean yes3;

    boolean previous1 = false;
    boolean previous2 = false;
    boolean previous3 = false;

    int debounce1 = 200;
    int debounce2 = 200;
    int debounce3 = 200;

    CapacitiveSensor  cs_4_2 = CapacitiveSensor(4,2);    
    CapacitiveSensor  cs_4_6 = CapacitiveSensor(4,6);    
    CapacitiveSensor  cs_4_8 = CapacitiveSensor(4,8);

      void setup() {

      Serial.begin(9600);
     
    cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);

    pinMode(IRledPin,OUTPUT);
    pinMode(LightPin,OUTPUT);
    pinMode(led1, OUTPUT);
    pinMode(led3, OUTPUT);
      sensor.attach(A0);
        delay(1000);

    }

      void loop()
      {
     
          while(Serial.available())
                {
                  delay(3);
                char c = Serial.read();
                readString +=c;
                }
                if(readString.length() > 0){
         
                  //TV
                  if ( readString=="600")  //"power"
                  {
         
                    irsend.sendRaw(TVPower,68,32);
                  }
               
                  if ( readString=="601")  //"tvav"
                  {
                    irsend.sendRaw(TVSource,68,32);
                  }
                                 
                  if (readString=="604")  //"volup"
                  {
                      irsend.sendRaw(TVSoundPlus,68,32);
                  }
                 
                 
                  if (readString=="605")//"voldown"
                  {
                      irsend.sendRaw(TVSoundMinus,68,32);
                    }
                   
                    //DVD            
                    if (readString=="6103")  //usb-sd
                  {
                    irsend.sendNEC(0xFFB847, 32);
                  }
                    if (readString=="6102")  //previous
                  {
                    irsend.sendNEC(0xFF38C7, 32);
                  }
                    if (readString=="6101")  //next
                  {
                    irsend.sendNEC(0xFF28D7, 32);
                  }
                    if (readString=="6104")  //power
                  {
                    irsend.sendNEC(0xFF48B7, 32);
                  }
                 
                    if (readString=="606")  //"stop"
                  {
                    irsend.sendNEC(0xFFE01F, 32);
                  }
               
                  if (readString=="607")  //"play"
                  {
                    irsend.sendNEC(0xFFE817, 32);
                  }
                 
                  if (readString=="6108")//eject
                  {
                    irsend.sendNEC(0xFF6897, 32);
                    }
                   
                  if (readString=="609")//"back"
                  {
                    irsend.sendNEC(0xFFF00F, 32);
                    }
                   
                    if (readString=="610")//"forward"
                  {
                    irsend.sendNEC(0xFF708F, 32);
                    }
                   
                    //LIGHT
                      if (readString=="lighton")//"lighton"
                  {
                      digitalWrite(LightPin, LOW);
                    }
                    if (readString=="lightoff") //"lightoff"
                  {
                    digitalWrite(LightPin, HIGH);
                    }
                                     
            readString="";    
                   
                  }
                 
                  sensor.update();
                  // данные последнего измерения можно считать соответствующими
                // методами
                char msg[128];
                sprintf(msg, "Температура: %dC, Влажность: %d%%",
                        sensor.getTemperatureInt(), sensor.getHumidityInt());
                Serial.println(msg);
               
               
        long total1 =  cs_4_2.capacitiveSensor(30);
        long total2 =  cs_4_6.capacitiveSensor(30);
        long total3 =  cs_4_8.capacitiveSensor(30);
       
        if (total1 > 600){yes1 = true;}
        else {yes1 = false;}  
        if(yes1 == true && previous1  == false && millis() - time1>debounce1){
          if(state1 == LOW){
            state1 = HIGH;
          }
          else
            state1 = LOW;
            time1 = millis();  
        }
          digitalWrite(led1, state1);
          previous1 = yes1;
         
         
          if (total2 > 600){yes2 = true;}
        else {yes2 = false;}  
        if(yes2 == true && previous2  == false && millis() - time2>debounce2){  
          if(state2 == LOW){
            state2 = HIGH;
          }
          else
            state2 = LOW;
            time2 = millis();        
        }
          digitalWrite(LightPin, state2);
          previous2 = yes2;
         
         
          if (total3 > 600){yes3 = true;}
        else {yes3 = false;}    
        if(yes3 == true && previous3  == false && millis() - time3>debounce3){  
          if(state3 == LOW){
            state3 = HIGH;
          }
          else
            state3 = LOW;
            time3 = millis();  
        }
          digitalWrite(led3, state3);
          previous3 = yes3;
     
              }
     
  2. Unixon

    Unixon Оракул Модератор

    А какой кусок кода у вас связывает Bluetooth и светодиоды? Что то здесь такого не наблюдается...
     
  3. vankenshtein

    vankenshtein Нерд

    вот один из них, остальные пока не прописал

    Код (Text):
     if (readString=="lighton")//"lighton"
                  {
                      digitalWrite(LightPin, LOW);
                    }
                    if (readString=="lightoff") //"lightoff"
                  {
                    digitalWrite(LightPin, HIGH);
                    }
     
  4. Unixon

    Unixon Оракул Модератор

    Что тогда это означает?
     
  5. vankenshtein

    vankenshtein Нерд

    После слова объединяешь, надо было запятую поставить) Имелось ввиду после объединения кода капсенс и блютус управления
     
  6. Unixon

    Unixon Оракул Модератор

    Что не работает то, если весь код на месте?
     
  7. vankenshtein

    vankenshtein Нерд

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