Помогите обеденить 2 скетча в один
- Войдите на сайт для отправки комментариев
Втр, 02/02/2016 - 21:18
Помогите обеденить 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 (в прочем не важно, будет на всех работать, микроконтроллер одинаковый). По разнь у меня работают оба скетча без проблем, а вот при обединении в один (я в этом не особо шарю) не работает не один, сливал оба скетча сам, даже компилирует без ошибок, но увы вместе не работают.
АААААААААААААААпять.....
Почему бы Вам не попросить об этом самого Дмитрия Осипова?
Почему бы Вам не попросить об этом самого Дмитрия Осипова?
Исключено. Теперь он сильно занят.
Биография Дмитрия Осипова
20:4423.12.2013
http://cdn11.img22.ria.ru/i/icons/ico-s779fb09c15.png); background-position: 1px -3655px; background-repeat: no-repeat;">2268
РИА Новости http://ria.ru/spravka/20131223/986001125.html#ixzz3z2o59xcx
Вот и я так подумал что он сильно занят. Не ужели без Дмитрия ни кто не поможет?
нет - теперь ты обречён.
тебе Дима мозг высосал - ходи теперь такой по жизни, попрошайка.
Ну задайте в поиске, прям в верху страницы, "обеденить 2 скетча в один", почитайте, все прояснится. Тут месяца не проходит, чтоб такая тема не возникала.
Исключено. Теперь он сильно занят.
Ничего, выкроит время для неофита ;-) Вон на ютубе видеоролики по ардуино регулярно пилит.
Предлагаю топикстартёру прям в ютубе и задать ему вопрос про объединение скетчей. А лучше сразу попросить всё сделать и предоставить готовое.
Есс, есс, я зделал это. :) Хотя и не так как хотелось бы, но желаймый результат достигнут. Мне так и не удалось объеденить 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 раздельных кода, а сейчас нет. Ну да ладно выложу его в следующем сообщении.
И так 2-ая часть скетч для ИК ду управления:
просто у него политика помочь людям и не попрошайничать за советы учащихся, только врубающихся в ардуино людей. я сам 90% у него научился, хотя знаю минимум. Это он меня научил не жалеть денег, брать хотябы по пять штук из китая и отложить проект на месяц, в течении которого в ютубе смотришь и учишься, а потом не жалея, тк у тебя есть еще 4 в запасе, тестить и радоваться ,что получилось , не получилось, еще пару роликов. дай бог чтобы я ошибался и он стал генеральным директором компании заместителя главы совета директоров "Уралхима". он све видео сннимал у шконки , не то что вы со всяками лаботаторниками, специальной подстилкой для стола. подсказка 500 рублей минимум. аривидерчи мужики. всего пару ответов советных слышал. пока я удаляюсь. админу привет синька чмо. я пьюный и мне этот форум не помог
satelit 2 - видеоуроки, за редким исключением - это для тех, кто читать совсем разучился. Все то же самое можно найти в книжках и статьях - четче и понятнее. Но есть сорт людей, которым читать лень, которым надо чтоб разжевали и положили в рот - вот они и любят уроки в Ютубе, которые обычно записывают для них такие же, как они, "простые пацаны". Таким просто нечего делать на форумах, кроме самых начальных - они же ждут готовых ответов, как в видео - и любой совет "почитать книжку" или мануал - воспринимают как наезд и глум.
Ты из таких?
Окупеть, изучать юриспруденцию по сводкам из зала суда.
"отложить проект на месяц, в течении которого в ютубе смотришь и учишься, а потом не жалея, тк у тебя есть еще 4 в запасе, тестить и радоваться ,что получилось , не получилось, еще пару роликов."
Вместо того, чтобы взять толмуд или хотя бы примеры, позаливать в кристалл, погонять для понимания в разных вариантах (потратив день-два), сидеть и месяц пялится в экран, а потом что то слепить и гадать получилось-не получилось. Это ведь где то на одной ступени с обезьяной. Опровергните, если не прав.
Каюсь, сам пока Кернигана с Ричей не осилил (ну ни могу с серьезной литературой с экрана работать, а купить пока жаба душит), но кино по приручению Ардуины ваще ни разу не смотрел. И ничо, форум вопросами не заепываю, бывает и сам х-ню брякну, иногда в тему, иногда промахнусь, но вроде не часто.
Вообще, видео-уроки - это такая нарочитая суб-культура для "простых людей". Зачастую авторы намеренно гонят в эфир что-то в стиле гопоты и "тагила", типа Осипова, что снимается в роликах в майке-алкоголичке на фоне "шконки 80х годов". Не исключено, что это лишь удачная находка, чтоб завоевать доверие "настоящих пацанов" . (Кстати о "шконке" - каких нафик восьмидесятых - сразу видно, что satelit еще салага зеленый :) - я сам родом из шестидесятых - и то ни у одной моей бабки уже подобных кроватей не было, нормальная мебель была :) Этой кровати лет семьдесят-восемьдесят :)
иногда приходится смотреть эти видео - бывает. что кроме них инфы почти нет. Но и то самое интересное обычно не в ролике, а БУКВАМИ (кто еще помнит, что это?) - потому как нормальные авторы все важное - чертежи, схемы, скетчи - выкладывают под видео в комментариях. Часто сам ролик и смотреть незачем - слушать чужой запинающийся голос , который путано пытается обьяснить то, что можно написать в паре абзацев...
Предлагаю обсудить феномен видео-уроков в "Отвлеченных темах" - создал ветку
Да, зря вы мне тогда не помогли объеденить 2 скетча, вот уже 2 года как подсел на эту игру в Ардуино и ни как слезть не могу. :)
Что касаемо видео и готовых скетчей в ютуб, то сейчас на все это смотрю совсем по другому, разве что бы посмотреть идею и написать с нуля по свойму все. Почему по свой му? Да потаму, что в своем коде разобраться проще что бы его дополнять и развивать как то, нежали вникать в чужой.
Это не тот Дмитрий, не Рафаэлович к сожалению.
Я использую этот метод, не сложно.
https://arduino-info.wikispaces.com/CombiningArduinoSketches
Начинай с коротких скетчей.