Прошу помощи в объединении двух скетчей
- Войдите на сайт для отправки комментариев
Чт, 07/11/2019 - 01:34
Доброго времени суток. Прошу помощи в обьединении двух скетчей в один. Все перепробывал, что знал... Может кто поможет чем?
#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(); //конец } }Помогаю: http://arduino.ru/forum/obshchii/pesochnitsa-dlya-vsekh-novichkov
А чего их объединять? Два файла в один слить не можете? Делов-то.
Информативно...
Так ото ж ...
А что-то более конкретнее?
так вы не исходные скетчи показывайте, а как вы "все перепробовали". чтобы из обьединить.
У вас в первом и втором коде команды ИК одинаковые? - или это ошибка?
#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(); //конец } } }Описка.... Порт ИК одинаков. Вставлял все, что в void setup в void setup, из void loop в void loop. Начинается все с ошибки на IRrecv irrecv(receiver); - redefinition of 'IRrecv irrecv' , а потом весь код заставляет удалить по немногу... что я не правильно делаю... За меня не нужно делать, просто указать если можно правильное направление.
ничего не замечаете? условия в строчках 26 и 52 одинаковые и относятся к одним и тем же данным. Значит можно оставить только одно из двух, а выполняемую часть обоих условий обьединить
Вставлял все, что в void setup в void setup, из void loop в void loop. Начинается все с ошибки на IRrecv irrecv(receiver); - redefinition of 'IRrecv irrecv'
За меня не нужно делать, просто указать если можно правильное направление.
простите, если такие ошибки как redefinition of 'IRrecv irrecv' ставят вас в тупик и вы не знаете, как их исправить - то я боюсь что указать вам направление можно только одно - сесть и прочитать толстую книжку по языку С от начала до конца
Иначе единственный вариант - это сделать за вас.
Ясно, спасибо, разберемся
А что-то более конкретнее?
Хотите конкретнее, пожалуйста.
Скетчи нельзя объединять - их надо серьёзно перерабатывать. Почитайте, что сказал умный и опытный человек про объединение скетчей. Лучше не скажешь.
Я понял уже. Буду думать...
Компиляция успешна... Все ошибки увидел. Сейчас подключу, проверю...
Ошибок нету, но ничего не работает...
#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(); } }Ошибок нету, но ничего не работает...
значит, либо ошибки есть и их надо искать и исправлять, либо ничего и не должно работать.
Не бывает же. чтобы всё было правильно, но при этом не делало того, что должно.
Как 2 пальца об асфальт... все работает...
Ну, вот и здорово. Успехов!
Ошибок нету, но ничего не работает...
потому что логика программы нарущена. Я сказал не просто выкинуть один дублирующий if - а обьединить из исполняемые части вместе. Условие вы выкинули, а части не обьединили....
И вообще в коде просто куча лишних скобок, некоторые их них не мешают - а некоторые уводят программу не туда
Збазибо!
Збазибо!
ну вот. А вы обижались, что вам не помогают...
Все норм, я разобрался сам. Спасибо.
#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(); //конец } } }А напиши мы за Вас сразу, так бы и не разобрались. Так что, правильно - поддержать, пнуть немного, а человек сам разберётся. Я всегда так делаю. Ну, а кто не разберётся, значит тому не очень-то и нужно.
Я и не просил за меня писать) еще бы delay() на millis
() заменить как - нибудь...еще бы delay() на millis
() заменить как - нибудь...Нет ничего проще.
Давите Ctrl+F. Далее, в появившемся окне.
И всего делов.
затея пахнет жареным, так просто не бывает)
Дак это ж русский форум. Бессмысленный и беспощадный.