Помогите обеденить 2 скетча в один

krepton85
Offline
Зарегистрирован: 02.02.2016

Помогите обеденить 2 скетча Дмитрия Осипова в 1. 

1 скетч - ДУ управление по ithernet:

/* Дмитрий Осипов. http://www.youtube.com/user/d36073?feature=watch
 v.01 Управляем Arduino с Web страницы Webserver Ethernet ENC28J60 Enternet HR911105A Pin ON OF Relays. 
 ----- 
 Что нам понадобится:
 1). ENC28J60 Ethernet LAN / Network Module. 
 http://www.ebay.com/sch/i.html?_from=R40&_sacat=0&_nkw=ENC28J60&rt=nc&LH...
 
 2). Библиотека / Library - "ethercard".
 EtherCard is a driver for the ENC28J60 chip, compatible with Arduino IDE.
 https://github.com/jcw/ethercard
 или берем здесь. https://yadi.sk/d/R57sVoglbhTRN
 3).
 Скачать sketch.
 v.01 Управляем Arduino с Web страницы Webserver Ethernet ENC28J60 Enternet HR911105A Pin ON OF Relays.
 
 -----------------------
 
 Подключаем Pins "ENC28J60 Module" к Arduino Uno.
 VCC -   3.3V
 GND -    GND
 SCK - Pin 13
 SO  - Pin 12
 SI  - Pin 11
 CS  - Pin 10 Можно выбрать любой. 
 
 Подключаем  "ENC28J60 Module" например к Router, загружаем sketch, открываем страницу
 в браузере например 192.168.1.222 , на странице можем включать выключат Pins / реле. 
 ---------
 Примечание: "ENC28J60 Module" питается от 3.3 volts, и потребляет по документации 250mA.
 Arduino Uno Максимальный допустимый ток, получаемый с 3V3 контакта — 50 мА.
 У меня прекрасно всё работает с 3V3 контакта Arduino Uno.
 На всякий случай, предупреждаю.
 ------------------
 */

#include <EtherCard.h>  // Подключаем скачанную библиотеку. https://yadi.sk/d/R57sVoglbhTRN

// MAC Address должен быть уникальным в вашей сети. Можно менять. 
static byte mymac[] = { 
  0x5A,0x5B,0x5C,0x5F,0x5A,0x5A };

// ip статический / постоянный Address нашей Web страницы.  
static byte myip[] = { 
  192,168,0,128 };

// Буфер, чем больше данных на Web странице, тем больше понадобится значения буфера.
byte Ethernet::buffer[900];
BufferFiller bfill;

// Массив задействованных номеров Pins Arduino, для управления например 8 реле.
int LedPins[] = {
  2,3,4,5,6,7,8,9};

// Массив для фиксации изменений.
boolean PinStatus[] = {
  1,2,3,4,5,6,7,8};

//-------------

const char http_OK[] PROGMEM =
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n\r\n";

const char http_Found[] PROGMEM =
"HTTP/1.0 302 Found\r\n"
"Location: /\r\n\r\n";

const char http_Unauthorized[] PROGMEM =
"HTTP/1.0 401 Unauthorized\r\n"
"Content-Type: text/html\r\n\r\n"
"<h1>401 Unauthorized</h1>";

//------------

// Делаем функцию для оформления нашей Web страницы. 
void homePage()
{
  bfill.emit_p(PSTR("$F"
    "<title>ArduinoPIN Webserver</title>" 
    "ArduinoPIN 1: <a href=\"?ArduinoPIN1=$F\">$F</a><br />"
    "ArduinoPIN 2: <a href=\"?ArduinoPIN2=$F\">$F</a><br />"  
    "ArduinoPIN 3: <a href=\"?ArduinoPIN3=$F\">$F</a><br />"
    "ArduinoPIN 4: <a href=\"?ArduinoPIN4=$F\">$F</a><br />"
    "ArduinoPIN 5: <a href=\"?ArduinoPIN5=$F\">$F</a><br />"
    "ArduinoPIN 6: <a href=\"?ArduinoPIN6=$F\">$F</a><br />"
    "ArduinoPIN 7: <a href=\"?ArduinoPIN7=$F\">$F</a><br />"   
    "ArduinoPIN 8: <a href=\"?ArduinoPIN8=$F\">$F</a>"),   

  http_OK,
  PinStatus[1]?PSTR("off"):PSTR("on"),
  PinStatus[1]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[2]?PSTR("off"):PSTR("on"),
  PinStatus[2]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[3]?PSTR("off"):PSTR("on"),
  PinStatus[3]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[4]?PSTR("off"):PSTR("on"),
  PinStatus[4]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[5]?PSTR("off"):PSTR("on"),
  PinStatus[5]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[6]?PSTR("off"):PSTR("on"),
  PinStatus[6]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"), 
  PinStatus[7]?PSTR("off"):PSTR("on"),
  PinStatus[7]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"), 
  PinStatus[8]?PSTR("off"):PSTR("on"),
  PinStatus[8]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"));
}

//------------------------



void setup()
{
  Serial.begin(9600);

  // По умолчанию в Библиотеке "ethercard" (CS-pin) = № 8.
  // if (ether.begin(sizeof Ethernet::buffer, mymac) == 0).
  // and change it to: Меняем (CS-pin) на 10.
  // if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0).

  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0);

  if (!ether.dhcpSetup()); 

  // Выводим в Serial монитор IP адрес который нам автоматический присвоил наш Router. 
  // Динамический IP адрес, это не удобно, периодический наш IP адрес будет меняться. 
  // Нам придётся каждый раз узнавать кой адрес у нашей страницы.
  ether.printIp("My Router IP: ", ether.myip); // Выводим в Serial монитор IP адрес который нам присвоил Router. 

  // Здесь мы подменяем наш динамический IP на статический / постоянный IP Address нашей Web страницы.
  // Теперь не важно какой IP адрес присвоит нам Router, автоматический будем менять его, например на "192.168.1.222". 
  ether.staticSetup(myip);

  ether.printIp("My SET IP: ", ether.myip); // Выводим в Serial монитор статический IP адрес. 
  //-----

  for(int i = 0; i <= 8; i++)
  {
    pinMode(LedPins[i],OUTPUT); 
    PinStatus[i]=false;
  }  
}

// --------------------------------------

void loop()
{

  delay(1); // Дёргаем микроконтроллер.

  word len = ether.packetReceive();   // check for ethernet packet / проверить ethernet пакеты.
  word pos = ether.packetLoop(len);   // check for tcp packet / проверить TCP пакеты.

  if (pos) {
    bfill = ether.tcpOffset();
    char *data = (char *) Ethernet::buffer + pos;
    if (strncmp("GET /", data, 5) != 0) {
      bfill.emit_p(http_Unauthorized);
    }
    else {

      data += 5;
      if (data[0] == ' ') {       
        homePage(); // Return home page Если обнаружено изменения на станице, запускаем функцию.
        for (int i = 0; i <= 7; i++)digitalWrite(LedPins[i],PinStatus[i+1]);
      }

      // "16" = количество символов "?ArduinoPIN1=on ".
      else if (strncmp("?ArduinoPIN1=on ", data, 16) == 0) {
        PinStatus[1] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) {
        PinStatus[2] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN3=on ", data, 16) == 0) {
        PinStatus[3] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN4=on ", data, 16) == 0) {
        PinStatus[4] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN5=on ", data, 16) == 0) {
        PinStatus[5] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN6=on ", data, 16) == 0) {
        PinStatus[6] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN7=on ", data, 16) == 0) {
        PinStatus[7] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN8=on ", data, 16) == 0) {
        PinStatus[8] = true;        
        bfill.emit_p(http_Found);
      }


      //------------------------------------------------------  


      else if (strncmp("?ArduinoPIN1=off ", data, 17) == 0) {
        PinStatus[1] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) {
        PinStatus[2] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN3=off ", data, 17) == 0) {
        PinStatus[3] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN4=off ", data, 17) == 0) {
        PinStatus[4] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN5=off ", data, 17) == 0) {
        PinStatus[5] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN6=off ", data, 17) == 0) {
        PinStatus[6] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN7=off ", data, 17) == 0) {
        PinStatus[7] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN8=off ", data, 17) == 0) {
        PinStatus[8] = false;        
        bfill.emit_p(http_Found);
      }


      //---------------------------


      else {
        // Page not found
        bfill.emit_p(http_Unauthorized);
      }
    }
    ether.httpServerReply(bfill.position());    // send http response
  }
}

2 скетчь IR ду управление 8-ю нагрузками с функцией привязки к любому пульту:


/* урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
Розетки, Управление любым ИК пультом, (программируемые на лету)
socket IR remote control
1/6 Управление Arduino с ИК пульта - начало http://www.youtube.com/watch?v=PjR9jlP4644
*/
#include <IRremote.h> //это скачанная библиотека

/* Скачать библиотеку IRremote для ИК пульта
https://disk.yandex.ru/public/?hash=yNz1au3lm3/yyMHOYtnZ2UGSf19wTvYBZnkx...

скетч arduino чтобы узнать код кнопки пульта
sketch arduino buttons on the remote to learn the code
https://disk.yandex.ru/public/?hash=KzLtuC1ljISPaCoXw03D6mbiKea8spktcWL5... 
*/

unsigned long Value1 = 0xFB10EF; // переменная для хранения кода кнопки пульта
/* ВАЖНО !!! (EE008FC0 ) это код кнопки - моего пульта - у вашего пульта будет другой код - замените на свой 
4/6 как ? узнать код - кнопки своего пульта  http://www.youtube.com/watch?v=InZuGntH_wk
*/

int RECV_PIN =A0; //вход ИК приемника
int butpin = A1; //можно подать положительный сигнал на пин 10  для начала программирования (как альтернатива программирования на лету с пульта)
int ledpin[] = {2, 3, 4, 5, 6, 7, 8, 9}; // номера задействованных пинов, количество можно уменьшить или увеличить (по желанию)
int ledstate[] = {0, 0, 0, 0, 0, 0, 0, 0}; //количество  задействованных пинов, количество можно уменьшить или увеличить (по желанию)
int butrec = 0;
long prevcode[] = {1, 1, 1, 1, 1, 1, 1, 1}; //количество  задействованных пинов, количество можно уменьшить или увеличить (по желанию)
long prevM = 0;
long prevM1 = 0;
long timeEx = 0;
boolean expr = true;

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup(){
  for (int i=0; i <= 8; i++){   // цифру 8 и все восьмёрки ниже заменяем на цифру задействованных пинов (по желанию)
    pinMode(ledpin[i],OUTPUT);
  }
  for (int i=0; i <= 8; i++){  
  }
  pinMode(butpin, INPUT); 
  irrecv.enableIRIn();
}
void loop()
{
 if(results.value == Value1)digitalWrite(butpin, HIGH);digitalWrite(butpin, LOW); // кнопкой от пульта запускаем режим программируемые на лету
{
  if (irrecv.decode(&results)){
    delay(150);
    for(int i=0; i<8; i++)    
      if (results.value == prevcode[i]){
        ledstate[i] = !ledstate[i];
        digitalWrite(ledpin[i], ledstate[i]);        
      }
    irrecv.resume();
  }
  butrec = digitalRead(butpin);
  if (butrec == HIGH){
    for (int i=0; i<8; i++){      
      ledstate[i] = 0;
      digitalWrite(ledpin[i], ledstate[i]);     
    }
    timeEx = millis() - prevM1;
    for (int i=0; i<8; i++){
      expr = true;
      timeEx = 0;
      prevM1 = millis();        
      while (expr == true && timeEx < 5000){  // время ожидания сигнала с пульта, для перехода к следующему пину (в момент программирования)     
        timeEx = millis() - prevM1;
        if (millis() - prevM > 250){           
          prevM = millis();
          int ledstate1 = !ledstate1;
          digitalWrite(ledpin[i], ledstate1);
        }                                      
        if (irrecv.decode(&results)) {         
          delay(150);
          prevcode[i] = results.value;
          irrecv.resume();
          expr = !expr;
          prevM1 = millis();

        }                                      
      }

      digitalWrite(ledpin[i], LOW);

    }
  }
}}

В общем все это должно работать на одной ардуино pro mini (в прочем не важно, будет на всех работать, микроконтроллер одинаковый). По разнь у меня работают оба скетча без проблем, а вот при обединении в один (я в этом не особо шарю) не работает не один, сливал оба скетча сам, даже компилирует без ошибок, но увы вместе не работают. 

Logik
Offline
Зарегистрирован: 05.08.2014

АААААААААААААААпять.....

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Почему бы Вам не попросить об этом самого Дмитрия Осипова?

Logik
Offline
Зарегистрирован: 05.08.2014

Jeka_M пишет:

Почему бы Вам не попросить об этом самого Дмитрия Осипова?

Исключено. Теперь он сильно занят.

Биография Дмитрия Осипова

 


20:4423.12.2013
http://cdn11.img22.ria.ru/i/icons/ico-s779fb09c15.png); background-position: 1px -3655px; background-repeat: no-repeat;">2268
Совет директоров ОАО "Уралкалий" на заседании в понедельник назначил генеральным директором компании заместителя главы совета директоров "Уралхима" Дмитрия Осипова, который с 24 декабря сменит на этом посту Владислава Баумгертнера.

РИА Новости http://ria.ru/spravka/20131223/986001125.html#ixzz3z2o59xcx

krepton85
Offline
Зарегистрирован: 02.02.2016

Вот и я так подумал что он сильно занят. Не ужели без Дмитрия ни кто не поможет?

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

krepton85 пишет:
Не ужели без Дмитрия ни кто не поможет?

нет - теперь ты обречён.

тебе Дима мозг высосал - ходи теперь такой по жизни, попрошайка.

Logik
Offline
Зарегистрирован: 05.08.2014

Ну задайте в поиске, прям в верху страницы, "обеденить 2 скетча в один", почитайте, все прояснится. Тут месяца не проходит, чтоб такая тема не возникала.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Logik пишет:

Исключено. Теперь он сильно занят.

Ничего, выкроит время для неофита ;-) Вон на ютубе видеоролики по ардуино регулярно пилит.

Предлагаю топикстартёру прям в ютубе и задать ему вопрос про объединение скетчей. А лучше сразу попросить всё сделать и предоставить готовое.

 

krepton85
Offline
Зарегистрирован: 02.02.2016

Есс, есс, я зделал это. :) Хотя и не так как хотелось бы, но желаймый результат достигнут. Мне так и не удалось объеденить 2 скетча в один микроконтроллер но удалось это сделать в 2 микроконтроллера, а это еще сложнее было для меня, т.к. я не разбираюсь в языке C++, даже упращеном под Ардуино.

И так что получилось, зацените:

- при поддержке канала на ютуб Дмитрий Осипов (куда уж без его);

- при поддержке видио-урока : https://www.youtube.com/watch?v=PPB2Xvubt4s ;

 - при поддержке видео - урока : https://www.youtube.com/watch?v=lI9NEKFmQtE ;

- а так же https://www.youtube.com/watch?v=upv7N7dDyYo;

Было создано управление через ethernet + управление с ИК-пульта.

1 плата ардуино про мини отвечает за поддержку ethernet 

2 плата отвечает за поддержку управления ИК пультом

блок реле подключен к 2-ой плате для управления с ИК пульта.

Обе платы синхронизированы друг с другом, в обе стороны (что не мало важно, при управлении с ИК пульта состояние переключаемого реле, передается через обратную связь, Web серверу) через Serial порт. 

Не могу выложить сюда 2-ой скетчь для платы IR remote, какой то глюк на форуме, странно в самом начале мог выложить 2 раздельных кода, а сейчас нет. Ну да ладно выложу его в следующем сообщении.

/* Дмитрий Осипов. http://www.youtube.com/user/d36073?feature=watch
  v.01 Управляем Arduino с Web страницы Webserver Ethernet ENC28J60 Enternet HR911105A Pin ON OF Relays.
  -----
  Что нам понадобится:
  1). ENC28J60 Ethernet LAN / Network Module.
  http://www.ebay.com/sch/i.html?_from=R40&_sacat=0&_nkw=ENC28J60&rt=nc&LH...

  2). Библиотека / Library - "ethercard".
  EtherCard is a driver for the ENC28J60 chip, compatible with Arduino IDE.
  https://github.com/jcw/ethercard
  или берем здесь. https://yadi.sk/d/R57sVoglbhTRN
  3).
  Скачать sketch.
  v.01 Управляем Arduino с Web страницы Webserver Ethernet ENC28J60 Enternet HR911105A Pin ON OF Relays.

  -----------------------

  Подключаем Pins "ENC28J60 Module" к Arduino Uno.
  VCC -   3.3V
  GND -    GND
  SCK - Pin 13
  SO  - Pin 12
  SI  - Pin 11
  CS  - Pin 10 Можно выбрать любой.

  Подключаем  "ENC28J60 Module" например к Router, загружаем sketch, открываем страницу
  в браузере например 192.168.1.222 , на странице можем включать выключат Pins / реле.
  ---------
  Примечание: "ENC28J60 Module" питается от 3.3 volts, и потребляет по документации 250mA.
  Arduino Uno Максимальный допустимый ток, получаемый с 3V3 контакта — 50 мА.
  У меня прекрасно всё работает с 3V3 контакта Arduino Uno.
  На всякий случай, предупреждаю.
  ------------------
*/

#include <EtherCard.h>  // Подключаем скачанную библиотеку. https://yadi.sk/d/R57sVoglbhTRN

// MAC Address должен быть уникальным в вашей сети. Можно менять.
static byte mymac[] = {
  0x5A, 0x5B, 0x5C, 0x5F, 0x5A, 0x5A
};

// ip статический / постоянный Address нашей Web страницы.
static byte myip[] = {
  192, 168, 0, 128
};

// Буфер, чем больше данных на Web странице, тем больше понадобится значения буфера.
byte Ethernet::buffer[900];
BufferFiller bfill;

// Массив задействованных номеров Pins Arduino, для управления например 8 реле.
int LedPins[] = {
  2, 3, 4, 5, 6, 7, 8, 9
};

int incomingByte;  // для хранения полученных команд от Arduino - мамы

// Массив для фиксации изменений.
boolean PinStatus[] = {
  1, 2, 3, 4, 5, 6, 7, 8
};

//-------------

const char http_OK[] PROGMEM =
  "HTTP/1.0 200 OK\r\n"
  "Content-Type: text/html\r\n"
  "Pragma: no-cache\r\n\r\n";

const char http_Found[] PROGMEM =
  "HTTP/1.0 302 Found\r\n"
  "Location: /\r\n\r\n";

const char http_Unauthorized[] PROGMEM =
  "HTTP/1.0 401 Unauthorized\r\n"
  "Content-Type: text/html\r\n\r\n"
  "<h1>401 Unauthorized</h1>";

//------------

// Делаем функцию для оформления нашей Web страницы.
void homePage()
{
  bfill.emit_p(PSTR("$F"
                    "<title>ArduinoPIN Webserver</title>"
                    "ArduinoPIN 1: <a href=\"?ArduinoPIN1=$F\">$F</a><br />"
                    "ArduinoPIN 2: <a href=\"?ArduinoPIN2=$F\">$F</a><br />"
                    "ArduinoPIN 3: <a href=\"?ArduinoPIN3=$F\">$F</a><br />"
                    "ArduinoPIN 4: <a href=\"?ArduinoPIN4=$F\">$F</a><br />"
                    "ArduinoPIN 5: <a href=\"?ArduinoPIN5=$F\">$F</a><br />"
                    "ArduinoPIN 6: <a href=\"?ArduinoPIN6=$F\">$F</a><br />"
                    "ArduinoPIN 7: <a href=\"?ArduinoPIN7=$F\">$F</a><br />"
                    "ArduinoPIN 8: <a href=\"?ArduinoPIN8=$F\">$F</a>"),

               http_OK,
               PinStatus[1] ? PSTR("off") : PSTR("on"),
               PinStatus[1] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"),
               PinStatus[2] ? PSTR("off") : PSTR("on"),
               PinStatus[2] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"),
               PinStatus[3] ? PSTR("off") : PSTR("on"),
               PinStatus[3] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"),
               PinStatus[4] ? PSTR("off") : PSTR("on"),
               PinStatus[4] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"),
               PinStatus[5] ? PSTR("off") : PSTR("on"),
               PinStatus[5] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"),
               PinStatus[6] ? PSTR("off") : PSTR("on"),
               PinStatus[6] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"),
               PinStatus[7] ? PSTR("off") : PSTR("on"),
               PinStatus[7] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"),
               PinStatus[8] ? PSTR("off") : PSTR("on"),
               PinStatus[8] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"));
}

//------------------------



void setup()
{
  Serial.begin(9600);

  // По умолчанию в Библиотеке "ethercard" (CS-pin) = № 8.
  // if (ether.begin(sizeof Ethernet::buffer, mymac) == 0).
  // and change it to: Меняем (CS-pin) на 10.
  // if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0).

  if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0);

  if (!ether.dhcpSetup());

  // Выводим в Serial монитор IP адрес который нам автоматический присвоил наш Router.
  // Динамический IP адрес, это не удобно, периодический наш IP адрес будет меняться.
  // Нам придётся каждый раз узнавать кой адрес у нашей страницы.
  //ether.printIp("My Router IP: ", ether.myip); // Выводим в Serial монитор IP адрес который нам присвоил Router.

  // Здесь мы подменяем наш динамический IP на статический / постоянный IP Address нашей Web страницы.
  // Теперь не важно какой IP адрес присвоит нам Router, автоматический будем менять его, например на "192.168.1.222".
  ether.staticSetup(myip);

  //ether.printIp("My SET IP: ", ether.myip); // Выводим в Serial монитор статический IP адрес.
  //-----
   ether.hisport = 2010;
  for (int i = 0; i <= 8; i++)
  {
    pinMode(LedPins[i], OUTPUT);
    PinStatus[i] = false;
  }
}

// --------------------------------------

void loop()
{

  delay(1); // Дёргаем микроконтроллер.

  word len = ether.packetReceive();   // check for ethernet packet / проверить ethernet пакеты.
  word pos = ether.packetLoop(len);   // check for tcp packet / проверить TCP пакеты.

  if (pos) {
    bfill = ether.tcpOffset();
    char *data = (char *) Ethernet::buffer + pos;
    if (strncmp("GET /", data, 5) != 0) {
      bfill.emit_p(http_Unauthorized);
    }
    else {

      data += 5;
      if (data[0] == ' ') {
        homePage(); // Return home page Если обнаружено изменения на станице, запускаем функцию.
        for (int i = 0; i <= 7; i++)digitalWrite(LedPins[i], PinStatus[i + 1]);
      }



      // "16" = количество символов "?ArduinoPIN1=on ".
      else if (strncmp("?ArduinoPIN1=on ", data, 16) == 0) {
        PinStatus[1] = true;
        Serial.println('Q');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) {
        PinStatus[2] = true;
        Serial.println('E');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN3=on ", data, 16) == 0) {
        PinStatus[3] = true;
        Serial.println('T');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN4=on ", data, 16) == 0) {
        PinStatus[4] = true;
        Serial.println('U');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN5=on ", data, 16) == 0) {
        PinStatus[5] = true;
        Serial.println('O');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN6=on ", data, 16) == 0) {
        PinStatus[6] = true;
        Serial.println('A');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN7=on ", data, 16) == 0) {
        PinStatus[7] = true;
        Serial.println('D');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN8=on ", data, 16) == 0) {
        PinStatus[8] = true;
        Serial.println('G');
        bfill.emit_p(http_Found);
      }


      //------------------------------------------------------


      else if (strncmp("?ArduinoPIN1=off ", data, 17) == 0) {
        PinStatus[1] = false;
        Serial.println('W');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) {
        PinStatus[2] = false;
        Serial.println('R');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN3=off ", data, 17) == 0) {
        PinStatus[3] = false;
        Serial.println('Y');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN4=off ", data, 17) == 0) {
        PinStatus[4] = false;
        Serial.println('I');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN5=off ", data, 17) == 0) {
        PinStatus[5] = false;
        Serial.println('P');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN6=off ", data, 17) == 0) {
        PinStatus[6] = false;
        Serial.println('S');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN7=off ", data, 17) == 0) {
        PinStatus[7] = false;
        Serial.println('F');
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN8=off ", data, 17) == 0) {
        PinStatus[8] = false;
        Serial.println('H');
        bfill.emit_p(http_Found);
      }

      else {
        // Page not found
        bfill.emit_p(http_Unauthorized);
      }
    }
    ether.httpServerReply(bfill.position());    // send http response
  }
  {
    if (Serial.available() > 0)  //если есть доступные данные

      incomingByte = Serial.read();

    if (incomingByte == 'Q')PinStatus[1] = true;
    if (incomingByte == 'W')PinStatus[1] = false;
    if (incomingByte == 'E')PinStatus[2] = true;
    if (incomingByte == 'R')PinStatus[2] = false;
    if (incomingByte == 'T')PinStatus[3] = true;
    if (incomingByte == 'Y')PinStatus[3] = false;
    if (incomingByte == 'U')PinStatus[4] = true;
    if (incomingByte == 'I')PinStatus[4] = false;
    if (incomingByte == 'O')PinStatus[5] = true;
    if (incomingByte == 'P')PinStatus[5] = false;
    if (incomingByte == 'A')PinStatus[6] = true;
    if (incomingByte == 'S')PinStatus[6] = false;
    if (incomingByte == 'D')PinStatus[7] = true;
    if (incomingByte == 'F')PinStatus[7] = false;
    if (incomingByte == 'G')PinStatus[8] = true;
    if (incomingByte == 'H')PinStatus[8] = false;

    //---------------------------
  }
}




 

 

krepton85
Offline
Зарегистрирован: 02.02.2016

И так 2-ая часть скетч для ИК ду управления:

/* урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
 v.03 Arduino IR remote control EEPROM Управление любым ИК пультом,(программируем на лету)
 Version 0.3 2014/03/11
 ====================================
 идеология;
 Чтобы управлять Arduino любым ИК пультом, нам НЕ понадобится записывать в sketch 
 "коды кнопок ИК пульта". Нажав на кнопку  "buttonPin", загорится первый светодиод,
 подносим ИК пульт к ИК приёмнику, и нажимаем любую кнопку ИК пульта,
 "код кнопки ИК пульта" запишется в энергонезависимую память EEPROM.
 Теперь этой кнопкой ИК пульта, мы можем "включать / выключать" ledPin_1.
 Таким способом, мы можем запрограммировать 8 Pins.
 Главное преимущество, настройки будут сохранятся даже после отключения питания.
 -----------
 Обновление: в Version 0.2 2014/03/07.
 
 1. Добавлена проверка от "инфракрасного мусора",
 и только после проверки, запишем "код кнопки ИК пульта" в EEPROM.
 ----------------------------
 Обновление: в  Version 0.3 2014/03/11
 
 1. Добавлен запуск режима удалённого программирования,
 путём длительного удержания любой кнопки (ИК) пульта. 
 
 2. Добавлена фильтрация, от нераспознанных библиотекой IRremote ИК кодов.
 
 *********************
 Скачать sketch.
 v.03 Arduino IR remote control EEPROM Управление любым ИК пультом,(программируем на лету)
 
 -----------------------
 Подробную видео инструкцию выложу здесь.
 
 =======================================
 Вспомогательные видео инструкции, sketch, программы, библиотеки.
 ***************************************************************
 Скачать sketch.
 v.01 Arduino IR remote control EEPROM Управление любым ИК пультом,(программируем на лету)
 http://yadi.sk/d/KvJoK4lCK93z7
 
 Скачать sketch.
 v.02 Arduino IR remote control EEPROM Управление любым ИК пультом,(программируем на лету)
 http://yadi.sk/d/VTU0PppQK944e
 
 v.04 Розетки, Управление по Bluetooth ил любым ИК пультом, (программируемые на лету).
 socket IR remote control 
 http://www.youtube.com/watch?v=ivUy44HXYzQ
 
 v.03 Arduino Розетки, Управление любым ИК пультом (программируемые на лету) socket IR remote control 
 https://www.youtube.com/watch?v=Hwd4KgZiKpg
 
 v.01 Arduino Розетки, Управление любым ИК пультом, (программируемые на лету) socket IR remote control
 http://www.youtube.com/watch?v=Nx6DUQ7Tx1w
 
 
 1/6 Управление Arduino с ИК пульта - начало http://www.youtube.com/watch?v=PjR9jlP4644
 ---------------------------------------- 
 
 Библиотеки:
 
 1.IRremote, библиотека для работы с ИК сигналом.
 Скачать библиотеку IRremote для ИК пульта
 https://disk.yandex.ru/public/?hash=yNz1au3lm3/yyMHOYtnZ2UGSf19wTvYBZnkx...
 
 IRremote эта библиотека кажется по новее будет
 http://yadi.sk/d/0jIS1tfw6tbb7
 
 https://github.com/shirriff/Arduino-IRremote
 
 ------------- 
 Программы.
 -------------
 */

#include <EEPROM.h>

#include <IRremote.h>  // это скачанная библиотека
int RECV_PIN = 11; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;

// переменные для хранения, кодов кнопок ИК пульта.
unsigned long ir_code_1;
unsigned long ir_code_2;
unsigned long ir_code_3;
unsigned long ir_code_4;
unsigned long ir_code_5;
unsigned long ir_code_6;
unsigned long ir_code_7;
unsigned long ir_code_8;

// Кнопка подключена к Pin №2.
// Для перехода к Pin, который будем программировать.
const int buttonPin = 10;      

// для переключения, и "блокировки / разблокировки".
// Для выбора Pins, который будем программировать.
int Switch;

// Для запуска программирования, от ИК пульта.
// Для измерения времени длительности инфракрасного сигнала.
int IRmeter;

int incomingByte;  // для хранения полученных команд от Arduino - мамы 

// Для контроля за временем отсутствия инфракрасного сигнала,
// чтобы сбросить "IRmeter" обратно на "0".
unsigned long IRpauseTime=0;

// Светодиод, информирующий о поступлении инфракрасного сигнала.
const int IRmonitoringLedPin = 13; 


// Для защиты от "инфракрасного мусора", при программировании.
boolean Lock;

// Для мигания светодиода, при программировании.
boolean Blink;


// the number of the LED pins
const int ledPin_1 = 2;      
const int ledPin_2 = 3;
const int ledPin_3 = 4;
const int ledPin_4 = 5;
const int ledPin_5 = 6;
const int ledPin_6 = 7;
const int ledPin_7 = 8;
const int ledPin_8 = 9;

void setup() {
  Serial.begin(9600);
  

  // Start the receiver. включить ИК приемник.
  irrecv.enableIRIn();

  pinMode(buttonPin, INPUT);
  digitalWrite (buttonPin, LOW);

  pinMode(IRmonitoringLedPin, OUTPUT);

  pinMode(ledPin_1, OUTPUT);
  pinMode(ledPin_2, OUTPUT);
  pinMode(ledPin_3, OUTPUT);
  pinMode(ledPin_4, OUTPUT);  
  pinMode(ledPin_5, OUTPUT);
  pinMode(ledPin_6, OUTPUT);
  pinMode(ledPin_7, OUTPUT);
  pinMode(ledPin_8, OUTPUT);  


  // при включении Arduino, читаем из энергонезависимой памяти
  // EEPROM, читаем данные с 1 по 5 ячейках,
  // собираем их, и записываем в переменную  "ir_code_1".
  { 
    byte val = EEPROM.read(5);  
    val = EEPROM.read(4); 
    ir_code_1 = (ir_code_1 << 8) | val; 
    val = EEPROM.read(3); 
    ir_code_1 = (ir_code_1 << 8) | val; 
    val = EEPROM.read(2); 
    ir_code_1 = (ir_code_1 << 8) | val; 
    val = EEPROM.read(1); 
    ir_code_1 = (ir_code_1 << 8) | val;
    // Serial.println(ir_code_1); 
  }

  // Делаем тоже самое, и с другими ячейками.
  { 
    byte val = EEPROM.read(10);  
    val = EEPROM.read(9); 
    ir_code_2 = (ir_code_2 << 8) | val; 
    val = EEPROM.read(8); 
    ir_code_2 = (ir_code_2 << 8) | val; 
    val = EEPROM.read(7); 
    ir_code_2 = (ir_code_2 << 8) | val; 
    val = EEPROM.read(6); 
    ir_code_2 = (ir_code_2 << 8) | val;
    // Serial.println(ir_code_2); 
  }

  { 
    byte val = EEPROM.read(15);  
    val = EEPROM.read(14); 
    ir_code_3 = (ir_code_3 << 8) | val; 
    val = EEPROM.read(13); 
    ir_code_3 = (ir_code_3 << 8) | val; 
    val = EEPROM.read(12); 
    ir_code_3 = (ir_code_3 << 8) | val; 
    val = EEPROM.read(11); 
    ir_code_3 = (ir_code_3 << 8) | val;
    // Serial.println(ir_code_3); 
  }

  { 
    byte val = EEPROM.read(20);  
    val = EEPROM.read(19); 
    ir_code_4 = (ir_code_4 << 8) | val; 
    val = EEPROM.read(18); 
    ir_code_4 = (ir_code_4 << 8) | val; 
    val = EEPROM.read(17); 
    ir_code_4 = (ir_code_4 << 8) | val; 
    val = EEPROM.read(16); 
    ir_code_4 = (ir_code_4 << 8) | val;
    // Serial.println(ir_code_4); 
  }

  { 
    byte val = EEPROM.read(25);  
    val = EEPROM.read(24); 
    ir_code_5 = (ir_code_5 << 8) | val; 
    val = EEPROM.read(23); 
    ir_code_5 = (ir_code_5 << 8) | val; 
    val = EEPROM.read(22); 
    ir_code_5 = (ir_code_5 << 8) | val; 
    val = EEPROM.read(21); 
    ir_code_5 = (ir_code_5 << 8) | val;
    // Serial.println(ir_code_5); 
  }


  { 
    byte val = EEPROM.read(30);  
    val = EEPROM.read(29); 
    ir_code_6 = (ir_code_6 << 8) | val; 
    val = EEPROM.read(28); 
    ir_code_6 = (ir_code_6 << 8) | val; 
    val = EEPROM.read(27); 
    ir_code_6 = (ir_code_6 << 8) | val; 
    val = EEPROM.read(26); 
    ir_code_6 = (ir_code_6 << 8) | val;
    // Serial.println(ir_code_6); 
  }


  { 
    byte val = EEPROM.read(35);  
    val = EEPROM.read(34); 
    ir_code_7 = (ir_code_7 << 8) | val; 
    val = EEPROM.read(33); 
    ir_code_7 = (ir_code_7 << 8) | val; 
    val = EEPROM.read(32); 
    ir_code_7 = (ir_code_7 << 8) | val; 
    val = EEPROM.read(31); 
    ir_code_7 = (ir_code_7 << 8) | val;
    // Serial.println(ir_code_7); 
  }


  { 
    byte val = EEPROM.read(40);  
    val = EEPROM.read(39); 
    ir_code_8 = (ir_code_8 << 8) | val; 
    val = EEPROM.read(38); 
    ir_code_8 = (ir_code_8 << 8) | val; 
    val = EEPROM.read(37); 
    ir_code_8 = (ir_code_8 << 8) | val; 
    val = EEPROM.read(36); 
    ir_code_8 = (ir_code_8 << 8) | val;
    // Serial.println(ir_code_8); 
  }

}

void loop(){
  // Делаем мигалку.
  // Для мигания светодиода, при программировании.
  if (Switch > 0)
  {
    for (int i=0; i <= 100; i++)
    {
      delay(1); 
      if (i==0)Blink=!Blink;  
    }
  }  

  //*********************************************************  
  // эта часть кода отвечает за запуск режима удалённого программирования,
  // путём длительного удержания любой кнопки (ИК) пульта.


  // При обнаружении инфракрасного сигнала, на входе (ИК) приемника
  // появляется (-)отрицательный сигнал "LOW".
  // Если обнаружен (ИК) сигнал, и IRmeter меньше 500. 
  if (digitalRead(RECV_PIN)== LOW && IRmeter <= 500)
  {
    IRpauseTime=millis(); // Записываем текущее время в IRpauseTime.
    digitalWrite(IRmonitoringLedPin, HIGH);
    IRmeter++; // Начинаем увеличивать IRmeter на 1.
    delay(3); // Пауза отвечает за скорость увеличения IRmeter.
  }  
  // Если пауза между обнаружением / пропаданием инфракрасного сигнала,
  // была больше 500 миллисекунд. И IRmeter не перевалил за 500.
  if(millis()-IRpauseTime>500 && IRmeter <= 500)
  {
    digitalWrite(IRmonitoringLedPin, LOW);
    IRmeter=0; // Сбрасываем его обратно на 0.
  }

  if (IRmeter == 400) // Если перевалил за 400.
  {
    digitalWrite(ledPin_1, HIGH);
    delay(2000);
    irrecv.resume();
    Switch=1; // Запускаем режим удалённого программирования.

    // Для  блокировки работы IRmeter.   
    // Для обнаружения, запущенного режима удалённого программирования.    
    IRmeter=600; 
  }


  //*********************************************************  
  // эта часть кода отвечает за запуск режима ручного программирования,
  // путём нажатия на кнопку.


  // если кнопка нажата.
  if (digitalRead(buttonPin) == HIGH)
  { 
    // прибавляем с каждым нажатием, к Switch +1.
    Switch = Switch + 1;
    delay(300); // защита от дребезга кнопки.

    if (Switch == 9) // когда дойдём до 9. 
    {
      digitalWrite(ledPin_8, LOW);
      IRmeter=0;
      Switch=0; // сбросимся обратно на 0.
    }
  }

  //*********************************************************  
  // эта часть кода отвечает за управление, включение / выключение Pin,
  // путём сравнения, пришедшего кода кнопки ИК пульта, с запрограммированным кодом.


  // только когда, переключатель равен 0. 
  if (Switch==0)
  {
    // и только, если поступил сигнал от ИК пульта "код кнопки ИК пульта".  
    if (irrecv.decode(&results)) 
    {

      // начинаем сравнивать, "код кнопки ИК пульта" с переменной "ir_code",
      // еси совпадёт, то "включим или выключим" соответствующий ledPin.
      if (results.value == ir_code_1){
        digitalWrite(ledPin_1, !digitalRead(ledPin_1));
        if (digitalRead(ledPin_1) == HIGH)Serial.println('Q');// отправляет обратный ответ web серверу, через Serial порт, если с ИК пульта включен ledPin_1 
        if (digitalRead(ledPin_1) == LOW)Serial.println('W');
      }
      if (results.value == ir_code_2){
        digitalWrite(ledPin_2, !digitalRead(ledPin_2));
        if (digitalRead(ledPin_2) == HIGH)Serial.println('E');
        if (digitalRead(ledPin_2) == LOW)Serial.println('R');      
      }
      if (results.value == ir_code_3){
        digitalWrite(ledPin_3, !digitalRead(ledPin_3));
        if (digitalRead(ledPin_3) == HIGH)Serial.println('T');
        if (digitalRead(ledPin_3) == LOW)Serial.println('Y');
      }
      if (results.value == ir_code_4){
        digitalWrite(ledPin_4, !digitalRead(ledPin_4));
        if (digitalRead(ledPin_4) == HIGH)Serial.println('U');
        if (digitalRead(ledPin_4) == LOW)Serial.println('I');      
      }
      if (results.value == ir_code_5){
        digitalWrite(ledPin_5, !digitalRead(ledPin_5));
        if (digitalRead(ledPin_5) == HIGH)Serial.println('O');
        if (digitalRead(ledPin_5) == LOW)Serial.println('P');
      }
      if (results.value == ir_code_6){
        digitalWrite(ledPin_6, !digitalRead(ledPin_6));
        if (digitalRead(ledPin_6) == HIGH)Serial.println('A');
        if (digitalRead(ledPin_6) == LOW)Serial.println('S');
      }
      if (results.value == ir_code_7){
        digitalWrite(ledPin_7, !digitalRead(ledPin_7));
        if (digitalRead(ledPin_7) == HIGH)Serial.println('D');
        if (digitalRead(ledPin_7) == LOW)Serial.println('F');
      }
      if (results.value == ir_code_8){
        digitalWrite(ledPin_8, !digitalRead(ledPin_8));
        if (digitalRead(ledPin_8) == HIGH)Serial.println('G');
        if (digitalRead(ledPin_8) == LOW)Serial.println('H');
      }
      
    delay(350); // Задержка перед приёмом следующего кода по ИК
      Lock=0;
      irrecv.resume(); // Receive the next value
    }

    {// эта часть кода отвечает за ПРИЕМ данных от Web сервера через Serial порт
    if (Serial.available() > 0)  //если есть доступные данные

      incomingByte = Serial.read();
       
    if (incomingByte == 'Q') digitalWrite(ledPin_1, HIGH);
    if (incomingByte == 'W') digitalWrite(ledPin_1, LOW);
    if (incomingByte == 'E') digitalWrite(ledPin_2, HIGH);
    if (incomingByte == 'R') digitalWrite(ledPin_2, LOW);
    if (incomingByte == 'T') digitalWrite(ledPin_3, HIGH);
    if (incomingByte == 'Y') digitalWrite(ledPin_3, LOW);
    if (incomingByte == 'U') digitalWrite(ledPin_4, HIGH);
    if (incomingByte == 'I') digitalWrite(ledPin_4, LOW);
    if (incomingByte == 'O') digitalWrite(ledPin_5, HIGH);
    if (incomingByte == 'P') digitalWrite(ledPin_5, LOW);
    if (incomingByte == 'A') digitalWrite(ledPin_6, HIGH);
    if (incomingByte == 'S') digitalWrite(ledPin_6, LOW);
    if (incomingByte == 'D') digitalWrite(ledPin_7, HIGH);
    if (incomingByte == 'F') digitalWrite(ledPin_7, LOW);
    if (incomingByte == 'G') digitalWrite(ledPin_8, HIGH);
    if (incomingByte == 'H') digitalWrite(ledPin_8, LOW);
    
    }
  }

  //*********************************************************  
  // Эта часть кода отвечает за запись "кодов кнопок ИК пульта",
  // в энергонезависимую память EEPROM.


  // только когда, переключатель == 1. 
  if (Switch == 1)
  {    
    digitalWrite(ledPin_1, Blink); // Начинаем мигать. 

    if (irrecv.decode(&results)) // только, если поступил сигнал от ИК пульта.
    {
      irrecv.resume();

      // Библиотека IRremote, когда не может распознать ИК сигнал, выдаёт такой код 
      // "4294967295". Будем фильтровать, с помочью <, в unsigned long это максимум.     
      if (results.value < 4294967295)
      {

        // Некоторые ИК пульты, при первом нажатии кнопки, выдают "инфракрасный мусор"/
        // "ложный код". Для защиты от записи в EEPROM "инфракрасного мусора", 
        // добавим дополнительную проверку.

        // меняем значение Lock на противоположное, то есть с 0 на 1, или с 1 на 0.
        Lock = !Lock; 

        // Записываем, только первый! пришедший ИК код, в переменную ir_code_1.   
        if (Lock == 1)ir_code_1 = results.value;


        // Теперь сравним только второй! пришедший ИК код, с переменной ir_code_1,
        // то есть с первым пришедшим ИК кодом.
        // Если второй пришедший "код кнопки ИК пульта" совпадёт с первым пришедшим 
        // "кодом кнопки ИК пульта", - это означает что первый пришедший
        // "код кнопки ИК пульта" был правильный, то есть он
        //  был НЕ "инфракрасным мусором", и только тогда запишем его в EEPROM.
        // А если это был "инфракрасный мусор", мы повторно начнём проверку.  

        if (Lock == 0  &&  results.value == ir_code_1) 
        {

          // так ка "код кнопки ИК пульта" это "длинное число", которое не поместится
          // в одну ячейку памяти. Разрубим "длинное число" на 5 частей,
          // и кусками, запишем его в EEPROM.
          EEPROM.write(1, ir_code_1 & 0xFF); 
          EEPROM.write(2, (ir_code_1 & 0xFF00) >> 8); 
          EEPROM.write(3, (ir_code_1 & 0xFF0000) >> 16); 
          EEPROM.write(4, (ir_code_1 & 0xFF000000) >> 24); 
          EEPROM.write(5, (ir_code_1 & 0xFF000000) >> 32);

          digitalWrite(ledPin_1, LOW);      
          Switch=0; // Выходим из режима ручного программирования.

          // А если  находимся в режиме удалённого программирования,
          // "путём длительного удержания любой кнопки (ИК) пульта".
          // То автоматический перейдем к программированию следующего Pin.
          if (IRmeter == 600)Switch=2,delay(2000);        
        }
      }
    }
  } 


  // далее тоже самое, и с другими "кодами кнопок ИК пульта".

  if (Switch == 2)
  {
    digitalWrite(ledPin_2, Blink);
    digitalWrite(ledPin_1, LOW); 

    if (irrecv.decode(&results)) 
    {
      irrecv.resume();
      if (results.value < 4294967295)
      {
        Lock = !Lock;
        if (Lock == 1)ir_code_2 = results.value;            
        if (Lock == 0  &&  results.value == ir_code_2) 
        {

          EEPROM.write(6, ir_code_2 & 0xFF); 
          EEPROM.write(7, (ir_code_2 & 0xFF00) >> 8); 
          EEPROM.write(8, (ir_code_2 & 0xFF0000) >> 16); 
          EEPROM.write(9, (ir_code_2 & 0xFF000000) >> 24); 
          EEPROM.write(10, (ir_code_2 & 0xFF000000) >> 32);

          digitalWrite(ledPin_2, LOW);
          Switch=0;  
          if (IRmeter == 600)Switch=3,delay(2000);  
        }
      } 
    }
  }


  if (Switch == 3)
  {
    digitalWrite(ledPin_3, Blink);
    digitalWrite(ledPin_2, LOW);  

    if (irrecv.decode(&results)) 
    {
      irrecv.resume();
      if (results.value < 4294967295)
      {
        Lock = !Lock;
        if (Lock == 1)ir_code_3 = results.value;            
        if (Lock == 0 && results.value == ir_code_3) 
        {

          EEPROM.write(11, ir_code_3 & 0xFF); 
          EEPROM.write(12, (ir_code_3 & 0xFF00) >> 8); 
          EEPROM.write(13, (ir_code_3 & 0xFF0000) >> 16); 
          EEPROM.write(14, (ir_code_3 & 0xFF000000) >> 24); 
          EEPROM.write(15, (ir_code_3 & 0xFF000000) >> 32);

          digitalWrite(ledPin_3, LOW);
          Switch=0;   
          if (IRmeter == 600)Switch=4,delay(2000); 
        }
      } 
    }
  }


  if (Switch == 4)
  {
    digitalWrite(ledPin_4, Blink);
    digitalWrite(ledPin_3, LOW);      

    if (irrecv.decode(&results)) 
    {
      irrecv.resume();
      if (results.value < 4294967295)
      {
        Lock = !Lock;
        if (Lock == 1)ir_code_4 = results.value;                  
        if (Lock == 0 && results.value == ir_code_4) 
        {

          EEPROM.write(16, ir_code_4 & 0xFF); 
          EEPROM.write(17, (ir_code_4 & 0xFF00) >> 8); 
          EEPROM.write(18, (ir_code_4 & 0xFF0000) >> 16); 
          EEPROM.write(19, (ir_code_4 & 0xFF000000) >> 24); 
          EEPROM.write(20, (ir_code_4 & 0xFF000000) >> 32);

          digitalWrite(ledPin_4, LOW);
          Switch=0;  
          if (IRmeter == 600)Switch=5,delay(2000);  
        }
      } 
    }
  }


  if (Switch == 5)
  {
    digitalWrite(ledPin_5, Blink);
    digitalWrite(ledPin_4, LOW);      

    if (irrecv.decode(&results)) 
    {
      irrecv.resume();
      if (results.value < 4294967295)
      {
        Lock = !Lock;
        if (Lock == 1)ir_code_5 = results.value;            
        if (Lock == 0  &&  results.value == ir_code_5) 
        {

          EEPROM.write(21, ir_code_5 & 0xFF); 
          EEPROM.write(22, (ir_code_5 & 0xFF00) >> 8); 
          EEPROM.write(23, (ir_code_5 & 0xFF0000) >> 16); 
          EEPROM.write(24, (ir_code_5 & 0xFF000000) >> 24); 
          EEPROM.write(25, (ir_code_5 & 0xFF000000) >> 32);

          digitalWrite(ledPin_5, LOW);
          Switch=0; 
          if (IRmeter == 600)Switch=6,delay(2000);   
        }
      } 
    }
  }


  if (Switch == 6)
  {
    digitalWrite(ledPin_6, Blink);
    digitalWrite(ledPin_5, LOW);      

    if (irrecv.decode(&results)) 
    {
      irrecv.resume();
      if (results.value < 4294967295)
      {
        Lock = !Lock;
        if (Lock == 1)ir_code_6 = results.value;            
        if (Lock == 0 && results.value == ir_code_6) 
        {

          EEPROM.write(26, ir_code_6 & 0xFF); 
          EEPROM.write(27, (ir_code_6 & 0xFF00) >> 8); 
          EEPROM.write(28, (ir_code_6 & 0xFF0000) >> 16); 
          EEPROM.write(29, (ir_code_6 & 0xFF000000) >> 24); 
          EEPROM.write(30, (ir_code_6 & 0xFF000000) >> 32);

          digitalWrite(ledPin_6, LOW);
          Switch=0;  
          if (IRmeter == 600)Switch=7,delay(2000);  
        }
      } 
    }
  }


  if (Switch == 7)
  {
    digitalWrite(ledPin_7, Blink);
    digitalWrite(ledPin_6, LOW);      

    if (irrecv.decode(&results)) 
    {
      irrecv.resume();
      if (results.value < 4294967295)
      {
        Lock = !Lock;
        if (Lock == 1)ir_code_7 = results.value;            
        if (Lock == 0 && results.value == ir_code_7) 
        {

          EEPROM.write(31, ir_code_7 & 0xFF); 
          EEPROM.write(32, (ir_code_7 & 0xFF00) >> 8); 
          EEPROM.write(33, (ir_code_7 & 0xFF0000) >> 16); 
          EEPROM.write(34, (ir_code_7 & 0xFF000000) >> 24); 
          EEPROM.write(35, (ir_code_7 & 0xFF000000) >> 32);

          digitalWrite(ledPin_7, LOW);
          Switch=0;  
          if (IRmeter == 600)Switch=8,delay(2000);  
        }
      } 
    }
  }


  if (Switch == 8)
  {
    digitalWrite(ledPin_8, Blink);
    digitalWrite(ledPin_7, LOW);      

    if (irrecv.decode(&results)) 
    {
      irrecv.resume();
      if (results.value < 4294967295)
      {
        Lock = !Lock;
        if (Lock == 1)ir_code_8 = results.value;            
        if (Lock == 0 && results.value == ir_code_8) 
        {

          EEPROM.write(36, ir_code_8 & 0xFF); 
          EEPROM.write(37, (ir_code_8 & 0xFF00) >> 8); 
          EEPROM.write(38, (ir_code_8 & 0xFF0000) >> 16); 
          EEPROM.write(39, (ir_code_8 & 0xFF000000) >> 24); 
          EEPROM.write(40, (ir_code_8 & 0xFF000000) >> 32);

          digitalWrite(ledPin_8, LOW);
          Switch=0;  

          // Разблокируем, запуск режима удалённого программирования,              
          IRmeter=0; 
        }
      } 
    }
  }
}




















 

satelit 2
Offline
Зарегистрирован: 04.12.2016

просто у него политика помочь людям и не попрошайничать за советы учащихся, только врубающихся в ардуино людей. я сам 90% у него научился, хотя знаю минимум. Это он меня научил не жалеть денег, брать хотябы по пять штук из китая и отложить проект на месяц, в течении которого в ютубе смотришь и учишься, а потом не жалея, тк у тебя есть еще 4 в запасе, тестить и радоваться ,что получилось , не получилось, еще пару роликов. дай бог чтобы я ошибался и он стал генеральным директором компании заместителя главы совета директоров "Уралхима". он све видео сннимал у шконки , не то что вы со всяками лаботаторниками, специальной подстилкой для стола. подсказка 500 рублей минимум. аривидерчи мужики. всего пару ответов советных слышал. пока я удаляюсь. админу привет синька чмо. я пьюный и мне этот форум не помог

 

 

 

b707
Offline
Зарегистрирован: 26.05.2017

satelit 2 - видеоуроки, за редким исключением - это для тех, кто читать совсем разучился. Все то же самое можно найти в книжках и статьях - четче и понятнее. Но есть сорт людей, которым читать лень, которым надо чтоб разжевали и положили в рот - вот они и любят уроки в Ютубе, которые обычно записывают для них такие же, как они, "простые пацаны". Таким просто нечего делать на форумах, кроме самых начальных - они же ждут готовых ответов, как в видео - и любой совет "почитать книжку" или мануал - воспринимают как наезд и глум.

Ты из таких?

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

Окупеть, изучать юриспруденцию по сводкам из зала суда. 

"отложить проект на месяц, в течении которого в ютубе смотришь и учишься, а потом не жалея, тк у тебя есть еще 4 в запасе, тестить и радоваться ,что получилось , не получилось, еще пару роликов."

Вместо того, чтобы взять толмуд или хотя бы примеры, позаливать в кристалл, погонять для понимания в разных вариантах (потратив день-два), сидеть и месяц пялится в экран, а потом что то слепить и гадать получилось-не получилось. Это ведь где то на одной ступени с обезьяной. Опровергните, если не прав.

Каюсь, сам пока Кернигана с Ричей не осилил (ну ни могу с серьезной литературой с экрана работать, а купить пока жаба душит), но кино по приручению Ардуины ваще ни разу не смотрел. И ничо, форум вопросами не заепываю, бывает и сам х-ню брякну, иногда в тему, иногда промахнусь, но вроде не часто.

b707
Offline
Зарегистрирован: 26.05.2017

Вообще, видео-уроки - это такая нарочитая суб-культура для "простых людей". Зачастую авторы намеренно гонят в эфир что-то в стиле гопоты и "тагила", типа Осипова, что снимается в роликах в майке-алкоголичке на фоне "шконки 80х годов". Не исключено, что это лишь удачная находка, чтоб завоевать доверие "настоящих пацанов" . (Кстати о "шконке" - каких нафик восьмидесятых - сразу видно, что satelit еще салага зеленый :) - я сам родом из шестидесятых - и то ни у одной моей бабки уже подобных кроватей не было, нормальная мебель была :) Этой кровати лет семьдесят-восемьдесят :)

иногда приходится смотреть эти видео - бывает. что кроме них инфы почти нет. Но и то самое интересное обычно не в ролике, а БУКВАМИ (кто еще помнит, что это?) - потому как нормальные авторы все важное - чертежи, схемы, скетчи - выкладывают под видео в комментариях. Часто сам ролик и смотреть незачем - слушать чужой запинающийся голос , который путано пытается обьяснить то, что можно написать в паре абзацев...

b707
Offline
Зарегистрирован: 26.05.2017

Предлагаю обсудить феномен видео-уроков в "Отвлеченных темах" - создал ветку

krepton85
Offline
Зарегистрирован: 02.02.2016

Да, зря вы мне тогда не помогли объеденить 2 скетча, вот уже 2 года как подсел на эту игру в Ардуино и ни как слезть не могу. :)
Что касаемо видео и готовых скетчей в ютуб, то сейчас на все это смотрю совсем по другому, разве что бы посмотреть идею и написать с нуля по свойму все. Почему по свой му? Да потаму, что в своем коде разобраться проще что бы его дополнять и развивать как то, нежали вникать в чужой.

Alex_G2605
Offline
Зарегистрирован: 26.02.2016

Это не тот Дмитрий, не Рафаэлович к сожалению.

gal
Offline
Зарегистрирован: 08.06.2018

Я использую этот метод, не сложно.

https://arduino-info.wikispaces.com/CombiningArduinoSketches

Начинай с коротких скетчей.