IR remote т светодиод.

f0rZzZ
Offline
Зарегистрирован: 31.01.2015

Здравствуйте. Имеется код. В нём по нажатию одной кнопки включается светодиод, по нажатию другой - выключается. Что на что поменять или что добавть чтоб это всё происходило от одной кнопки ? Просьба конкретно указать как надо сделать. 
 



#include <IRremote.h>

int RECV_PIN = A0; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
int LED = 11;

void setup()

{
irrecv.enableIRIn(); // включить приемник
pinMode(LED, OUTPUT);
}

void loop() {

if (irrecv.decode(&results))
{
  if (results.value == 0x866BB847) //код кнопки
  {
    digitalWrite(LED, HIGH);
  }
    if (results.value == 0x866B38C7)//код кнопки
    {
      digitalWrite(LED, LOW);
    }
 irrecv.resume();
}
}

 

bwn
Offline
Зарегистрирован: 25.08.2014

digitalWrite(LED, !digitalRead(LED));  

Вроде так. Это 21 строка.

Строки 23-26 выкинуть. Вместо 26 добавить delay(500);

f0rZzZ
Offline
Зарегистрирован: 31.01.2015

Спасибо, работает. А ещё вопрос, а если испоьзовать вместо светодиода модуль реле для управление какими-либо нашрузками, что-то менять надо ? 

bwn
Offline
Зарегистрирован: 25.08.2014

f0rZzZ пишет:

Спасибо, работает. А ещё вопрос, а если испоьзовать вместо светодиода модуль реле для управление какими-либо нашрузками, что-то менять надо ? 

Если модуль для дуины, то нет. Если просто реле, то транзисторный ключ.

f0rZzZ
Offline
Зарегистрирован: 31.01.2015

Да, модуль типо такого. (Если картинку нужно убрать под спойлер, извините, не получилось.)

bwn
Offline
Зарегистрирован: 25.08.2014

Входы in1, in2. VCC - 5в, но лучше от отдельного источника питания. GND источника и дуины соединить. Управление возможно инверсное, надо пробовать.

f0rZzZ
Offline
Зарегистрирован: 31.01.2015

Чтоб не создавать тему, решил написать тут.
Решил подключить Siemens A70 у китайсткой меге по этой статье. http://lukjanow.ru/2012/04/send-sms-arduino-siemens-s45/

Столкнулся со следующими проблемами:
Этот код, для старой версии ардуино и пишет: Начиная с версии Arduino 1.0, дескриптор 'BYTE' больше не поддерживается. Пожалуйста, используйте Serial.write() вместо него.  Помогите изменить. 
 

#include <NewSoftSerial.h>
#include <string.h>
 
NewSoftSerial mySerial(2, 3);
 
#define num_to_char(number)   ((number) < 10 ?                           \
                                               ('0' + (number)) :        \
                                               (('A' - 10) + (number)) )
 
#define first_four(byte)       (0x0F & (byte))
#define  last_four(byte)      ((0xF0 & (byte)) >> 4)
#define hexdump_a(byte)  num_to_char( last_four(byte))
#define hexdump_b(byte)  num_to_char(first_four(byte))
 
char inData[100];
 
char unitID_in[10];
char telnumb_in[14];
char textsms_in[100];
void setup()
{
  Serial.begin(9600);
  Serial.println("Go SMS Send");
  mySerial.begin(9600);
}
 
void loop()
{
 int i=0;
 char buffer[100];
//если есть данные - читаем
  if(Serial.available()){
     delay(100);
     //загоняем прочитанное в буфер
     while( Serial.available() && i< 99) {
        buffer[i++] = Serial.read();
     }
     //закрываем массив
     buffer[i++]='\0';
  }
//если буфер наполнен отправляем смс
  if(i>0){
    //разбираем буфер на части отделенные запятой через сериал монитор отправляем - sms,19731429764F4,text sms
    sscanf(buffer, "%[^','],%[^','],%[^',']", &unitID_in, &telnumb_in, &textsms_in);
 
    if ((String)unitID_in == "sms"){  //определяем команду отправки смс
    char *indata=textsms_in;
    send_sms(indata);
    unitID_in [0] = '\0';
    telnumb_in [0] = '\0';
    }
  }
}
 
void send_sms(char *data)
{
  size_t data_length, x;
  char c, l;
  long i;
  long n;
  data_length = strlen(data);
  i = data_length * 7;
  if (i & 0x07) i = (i & ~0x07) + 0x08;
  i = i / 8;
  mySerial.println("AT+CMGF=0");
  delay(50);
  mySerial.print("AT+CMGS=");
  delay(50);
  mySerial.println(i + 14);
  delay(50);
  mySerial.print("0011000B9");
  delay(5);
  mySerial.print(telnumb_in);
  delay(5);
  mySerial.print("0000AA");
  hexdump_byte(data_length & 0xFF);
  l = 0;
  n = 0;
  for (x = 0; x < data_length; x++)
  {
    if (data[x] == '$')  data[x] = 0x02;
    n |= (data[x] & 0x7F) << l;
    l += 7;
    if ( l >= 8 )
    {
      hexdump_byte(n & 0xFF);
      l -= 8;
      n >>= 8;
    }
  }
  if (l != 0)
  {
    hexdump_byte(n & 0xFF);
  }
  mySerial.write(26);
}
void hexdump_byte(unsigned char byte)
{
  mySerial.print(hexdump_a(byte), BYTE);
  mySerial.print(hexdump_b(byte), BYTE);
}

Вторая проблемма в том, что у моего телефона контакты Tx Rx распологаются немного по другому, распиновку я нашёл (думаю это ничего страшного, они же всё равно остались Tx и Rx :) ), и я не понимаю, куда их подключить к самой ардуине. 
Помогите пожалуйста. 

bwn
Offline
Зарегистрирован: 25.08.2014

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