Прошу помощи в объединении двух скетчей

prime.monk
Offline
Зарегистрирован: 07.11.2019

Доброго времени суток. Прошу помощи в обьединении двух скетчей в один. Все перепробывал, что знал... Может кто поможет чем?

prime.monk
Offline
Зарегистрирован: 07.11.2019
#include "Stepper.h"
#include "IRremote.h"

#define STEPS  32   // Количество шагов
int  Steps2Take;  // 2048 = 1 оборот
int receiver = 6; // ИК подключен к 6 пину


Stepper small_stepper(STEPS, 8, 10, 9, 11);
IRrecv irrecv(receiver);    
decode_results results;     

void setup()
{
  irrecv.enableIRIn(); // запуск ИК
}

void loop()
{
if (irrecv.decode(&results)) // Проверка есть-ли сигнал

  {
    switch(results.value)

    {

      case 0xFF18E7: // Вращение по часовой
                      small_stepper.setSpeed(700); //Макс 700 скорость
                      Steps2Take  =  4096;  // Сколько шагов по часовой
                      small_stepper.step(Steps2Take);
                      delay(2000);
                      break;

      case 0xFF7A85: // Вращение против часовой
                      small_stepper.setSpeed(700);
                      Steps2Take  =  -2048;  // Сколько шагов против часовой
                      small_stepper.step(Steps2Take);
                      delay(2000);
                      break;
                      
    }
    
      irrecv.resume(); 
  }  


}

.............................................................
#include "IRremote.h"
IRrecv irrecv(2);     //пин к которому подключени ик приемник
decode_results results;
int rele1 = 0;           //переменная для хранения состония нагрузки
void setup() {        //установка
  pinMode(3,OUTPUT); // 3 пин ардуино на выход, пойдет на сигнальный контакт
  pinMode(4,OUTPUT); // 3 пин ардуино на выход, пойдет на сигнальный контакт

  Serial.begin(9600); //выведем в сериал код с нажатой кнопки, чтобы потом его вписать ниже
  irrecv.enableIRIn(); //включим инфракрасный приемник
}
void loop() {          //цикл
  if ( irrecv.decode( &results )) {  //если есть сигнал на входе ИК приемника, то
    Serial.println(results.value, HEX); //выведем в сериал в 16 ричном формате
    
if (results.value==0xFF18E7&&rele1==0){  //поступил сигнал, запишем в переменную 
  digitalWrite( 3, HIGH );rele1=1;results.value=0; //включим нагрузку
}
if (results.value==0xFF18E7&&rele1==1){  //поступил сигнал, запишем в переменную
  digitalWrite( 3, LOW );rele1=0;results.value=0; //выключим нагрузку
}   
if (results.value==0xFF7A85&&rele1==0){  //поступил сигнал, запишем в переменную 
  digitalWrite( 4, HIGH );rele1=1;results.value=0; //включим нагрузку
}
if (results.value==0xFF7A85&&rele1==1){  //поступил сигнал, запишем в переменную
  digitalWrite( 4, LOW );rele1=0;results.value=0; //выключим нагрузку
}   
 irrecv.resume();   //конец
  }
  
}
sadman41
Offline
Зарегистрирован: 19.10.2016
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А чего их объединять? Два файла в один слить не можете? Делов-то.

prime.monk
Offline
Зарегистрирован: 07.11.2019

Информативно...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так ото ж ...

prime.monk
Offline
Зарегистрирован: 07.11.2019

А что-то более конкретнее?

b707
Онлайн
Зарегистрирован: 26.05.2017

prime.monk пишет:
Информативно...

так вы не исходные скетчи показывайте, а как вы "все перепробовали". чтобы из обьединить.

У вас в первом и втором коде команды ИК одинаковые? - или это ошибка?

prime.monk
Offline
Зарегистрирован: 07.11.2019
#include "Stepper.h"
#include "IRremote.h"

IRrecv irrecv(6);     //пин к которому подключени ик приемник
decode_results results;

#define STEPS  32   // Количество шагов
int  Steps2Take;  // 2048 = 1 оборот
int receiver = 6; // ИК подключен к 6 пину
int rele1 = 0;           //переменная для хранения состония нагрузки

Stepper small_stepper(STEPS, 8, 10, 9, 11);
IRrecv irrecv(receiver);    
decode_results results;     

void setup()
{
  irrecv.enableIRIn(); // запуск ИК
}
{
pinMode(3,OUTPUT); // 3 пин ардуино на выход, пойдет на сигнальный контакт
  pinMode(4,OUTPUT); // 3 пин ардуино на выход, пойдет на сигнальный контакт

  void loop()
{
if (irrecv.decode(&results)) // Проверка есть-ли сигнал

  {
    switch(results.value)

    {

      case 0xFF18E7: // Вращение по часовой
                      small_stepper.setSpeed(700); //Макс 700 скорость
                      Steps2Take  =  4096;  // Сколько шагов по часовой
                      small_stepper.step(Steps2Take);
                      delay(2000);
                      break;

      case 0xFF7A85: // Вращение против часовой
                      small_stepper.setSpeed(700);
                      Steps2Take  =  -2048;  // Сколько шагов против часовой
                      small_stepper.step(Steps2Take);
                      delay(2000);
                      break;
                      
    }
    
      irrecv.resume(); 
  }  
{
  if ( irrecv.decode( &results )) {  //если есть сигнал на входе ИК приемника, то
    Serial.println(results.value, HEX); //выведем в сериал в 16 ричном формате
    
if (results.value==0xFF18E7&&rele1==0){  //поступил сигнал, запишем в переменную 
  digitalWrite( 3, HIGH );rele1=1;results.value=0; //включим нагрузку
}
if (results.value==0xFF18E7&&rele1==1){  //поступил сигнал, запишем в переменную
  digitalWrite( 3, LOW );rele1=0;results.value=0; //выключим нагрузку
}   
if (results.value==0xFF7A85&&rele1==0){  //поступил сигнал, запишем в переменную 
  digitalWrite( 4, HIGH );rele1=1;results.value=0; //включим нагрузку
}
if (results.value==0xFF7A85&&rele1==1){  //поступил сигнал, запишем в переменную
  digitalWrite( 4, LOW );rele1=0;results.value=0; //выключим нагрузку
}   
 irrecv.resume();   //конец
  }
  
}
}
  

 

prime.monk
Offline
Зарегистрирован: 07.11.2019

Описка.... Порт ИК одинаков. Вставлял все, что в void setup в void setup, из void loop в void loop. Начинается все с ошибки на IRrecv irrecv(receiver); - redefinition of 'IRrecv irrecv' , а потом весь код заставляет удалить по немногу... что я не правильно делаю... За меня не нужно делать, просто указать если можно правильное направление.

b707
Онлайн
Зарегистрирован: 26.05.2017

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

b707
Онлайн
Зарегистрирован: 26.05.2017

prime.monk пишет:

Вставлял все, что в void setup в void setup, из void loop в void loop. Начинается все с ошибки на IRrecv irrecv(receiver); - redefinition of 'IRrecv irrecv'

За меня не нужно делать, просто указать если можно правильное направление.

простите, если такие ошибки как redefinition of 'IRrecv irrecv' ставят вас в тупик и вы не знаете, как их исправить - то я боюсь что указать вам направление можно только одно - сесть и прочитать толстую книжку по языку С от начала до конца

Иначе единственный вариант - это сделать за вас.

prime.monk
Offline
Зарегистрирован: 07.11.2019

Ясно, спасибо, разберемся

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

prime.monk пишет:

А что-то более конкретнее?

Хотите конкретнее, пожалуйста.

Скетчи нельзя объединять - их надо серьёзно перерабатывать. Почитайте, что сказал умный и опытный человек про объединение скетчей. Лучше не скажешь.

prime.monk
Offline
Зарегистрирован: 07.11.2019

Я понял уже. Буду думать...

prime.monk
Offline
Зарегистрирован: 07.11.2019

Компиляция успешна... Все ошибки увидел. Сейчас подключу, проверю...

prime.monk
Offline
Зарегистрирован: 07.11.2019

Ошибок нету, но ничего не работает... 

#include "Stepper.h"
#include "IRremote.h"
IRrecv irrecv(6);     //пин к которому подключени ик приемник 
#define STEPS  32   // Количество шагов
int  Steps2Take;  // 2048 = 1 оборот
int receiver = 6; // ИК подключен к 6 пину
int rele1 = 0;           //переменная для хранения состония нагрузки

Stepper small_stepper(STEPS, 8, 10, 9, 11);
    
decode_results results;
    

void setup()
{
  {
  irrecv.enableIRIn(); // запуск ИК
}
{
  pinMode(3,OUTPUT); // 3 пин ардуино на выход, пойдет на сигнальный контакт
  Serial.begin(9600); //выведем в сериал код с нажатой кнопки, чтобы потом его вписать ниже
}
}

void loop()
{
if ( irrecv.decode( &results )) {  //если есть сигнал на входе ИК приемника, то
    Serial.println(results.value, HEX); //выведем в сериал в 16 ричном формате
    
if (results.value==0xFF30CF&&rele1==0){  //поступил сигнал, запишем в переменную 
  digitalWrite( 3, HIGH );rele1=1;results.value=0; //включим нагрузку
}
if (results.value==0xFF30CF&&rele1==1){  //поступил сигнал, запишем в переменную
  digitalWrite( 3, LOW );rele1=0;results.value=0; //выключим нагрузку
} 
}  
  {
    switch(results.value)

    {

      case 0xFF18E7: // Вращение по часовой
                      small_stepper.setSpeed(700); //Макс 700 скорость
                      Steps2Take  =  4096;  // Сколько шагов по часовой
                      small_stepper.step(Steps2Take);
                      delay(2000);
                      break;

      case 0xFF7A85: // Вращение против часовой
                      small_stepper.setSpeed(700);
                      Steps2Take  =  -2048;  // Сколько шагов против часовой
                      small_stepper.step(Steps2Take);
                      delay(2000);
                      break;
                      
    }

    
      irrecv.resume(); 
  }  


}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

prime.monk пишет:

Ошибок нету, но ничего не работает... 

значит, либо ошибки есть и их надо искать и исправлять, либо ничего и не должно работать.

Не бывает же. чтобы всё было правильно, но при этом не делало того, что должно.

prime.monk
Offline
Зарегистрирован: 07.11.2019

Как 2 пальца об асфальт... все работает...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, вот и здорово. Успехов!

b707
Онлайн
Зарегистрирован: 26.05.2017

prime.monk пишет:

Ошибок нету, но ничего не работает...

потому что логика программы нарущена. Я сказал не просто выкинуть один дублирующий if - а обьединить из исполняемые части вместе. Условие вы выкинули, а части не обьединили....

И вообще в коде просто куча лишних скобок, некоторые их них не мешают - а некоторые уводят программу не туда

 

prime.monk
Offline
Зарегистрирован: 07.11.2019

Збазибо!

b707
Онлайн
Зарегистрирован: 26.05.2017

prime.monk пишет:

Збазибо!

ну вот. А вы обижались, что вам не помогают...

prime.monk
Offline
Зарегистрирован: 07.11.2019

Все норм, я разобрался сам. Спасибо.

#include "Stepper.h"
#include "IRremote.h"

#define STEPS  32   // Количество шагов
int  Steps2Take;  // 2048 = 1 оборот
int receiver = 6; // ИК подключен к 6 пину
int rele1 = 0;           //переменная для хранения состония нагрузки


Stepper small_stepper(STEPS, 8, 10, 9, 11);
IRrecv irrecv(receiver);     //пин к которому подключени ик приемник
decode_results results;


void setup()   //установка
{        
  pinMode(3,OUTPUT); // 3 пин ардуино на выход, пойдет на сигнальный контакт
  pinMode(4,OUTPUT); // 3 пин ардуино на выход, пойдет на сигнальный контакт

  Serial.begin(9600); //выведем в сериал код с нажатой кнопки, чтобы потом его вписать ниже
  irrecv.enableIRIn(); //включим инфракрасный приемник
}
void loop()     //цикл
{
           
  if ( irrecv.decode( &results ))   //если есть сигнал на входе ИК приемника, то
  {  
    Serial.println(results.value, HEX); //выведем в сериал в 16 ричном формате
    
if (results.value==0xFF30CF&&rele1==0)   //поступил сигнал, запишем в переменную
{   
  digitalWrite( 3, HIGH );rele1=1;results.value=0; //включим нагрузку
}
if (results.value==0xFF30CF&&rele1==1)    //поступил сигнал, запишем в переменную
{  
  digitalWrite( 3, LOW );rele1=0;results.value=0; //выключим нагрузку
}
{
    switch(results.value)

       {

      case 0xFF18E7: // Вращение по часовой
                      small_stepper.setSpeed(700); //Макс 700 скорость
                      Steps2Take  =  4096;  // Сколько шагов по часовой
                      small_stepper.step(Steps2Take);
                      delay(2000);
                      break;

      case 0xFF7A85: // Вращение против часовой
                      small_stepper.setSpeed(700);
                      Steps2Take  =  -2048;  // Сколько шагов против часовой
                      small_stepper.step(Steps2Take);
                      delay(2000);
                      break;
                      
    }

 irrecv.resume();   //конец
  }
  }
  
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А напиши мы за Вас сразу, так бы и не разобрались. Так что, правильно - поддержать, пнуть немного, а человек сам разберётся. Я всегда так делаю. Ну, а кто не разберётся, значит тому не очень-то и нужно.

prime.monk
Offline
Зарегистрирован: 07.11.2019

Я и не просил за меня писать) еще бы delay() на millis() заменить как - нибудь...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

prime.monk пишет:

еще бы delay() на millis() заменить как - нибудь...

Нет ничего проще.

Давите Ctrl+F. Далее, в появившемся окне.

И всего делов.

prime.monk
Offline
Зарегистрирован: 07.11.2019

затея пахнет жареным, так просто не бывает)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Дак это ж русский форум. Бессмысленный и беспощадный.