Arduino: для детей, взрослых и аудиоаппаратуры :)
#1

Помойму в ветке будет проще, чем в чате. Чат - это река.



Мои познания в программировании МК, низкоуровневого программирования, а так-же программирования на си - это все для меня довольно далеко.

Но.
Мне это не мешает, с переменным успехом, пользовать ардуину )) /ну не так чтоб пользовать, ну.../.

http://arduino.cc/

Что такое ардуино?
Это концепция "микроконтроллеры в массы", ориентировано на человека неподготовленного, но желающего что-то сделать. Звонок кодовый в квартиру, ночник с лэдовой RGB подсветкой, показывалку температуры часов и влажности, робота.... и прочее прочее коневодство.

В концепции имеются
- програмное обеспечение ввиде проги, которая позволяет писать код и заливать его в МК одним нажатием кнопки.
- язык программирования - си, но не стоит пугаться, нам вся его моща не нужна, а то что будем пользовать - просто и маленькое ) Множество примеров и библиотечек все сделают за нас, нам останется это скрутить вместе :)
- железо. это разнообразные платки, с /до недавних пор/ хиленьким МК, с минимальной обвязкой "лишь бы работало", и с программатором USB. Внешнее питание опционально. Работает и от USB.

Т.е. весь цикл разработки сводится к написал чтото, воткнул в USB ардуинку, нажал на пимпочку в проге - и ардуинка начала выполнять написанный код.

Ознакомиться с железом можно тут - http://arduino.cc/en/Main/Products
классические представители -
http://arduino.cc/en/Main/ArduinoBoardUno
http://arduino.cc/en/Main/ArduinoBoardMega2560
Покупать можно и на великой барахолке, там дешевле. Фильтровать по внешнему соответствию + соответствию проца. это гарантирует покупку аналога ))


Их можно укомплектовать так называемыми щилдами (shield) - платка с коннекторами, садящаяся поверх ардуинки в коннекторы, и обеспечивающая какую-то дополнительную железную функциональность - драйверы моторчиков, LAN, вайфай и т.д.






Вот.
Так с чего начать?

Ммммм, не знаю )))

Вот тут лежит мой код, который ловит ИК сигнал, управляет РГ и показывает это на экранчике 4х20 символов.
https://www.dropbox.com/sh/14znz3kdoa5qd...4G52a?dl=0

Я на самом деле перемудрил в сий прошивке, т.к. был нацелен сделать разнофункциональное устройство, умеющее интерфейситься к разным устройствам ввода/вывода, а-ля ПГА и разного вида релюшные аттенюаторы, экранчики разного размера, разные управлялки - кнопочками, ду, и т.д...

Все это предпологалось конфигурировать блоками "IFDEF"/DEFINE, первые проверяют на задефайниность константы, вторые - дефайнят константу. эти блоки проверяются на уровне компайлера, и если не задефайнена константа - то из итогового кода исключается весь блок в IFDEF. таким образом можно писать общий код, и подключать/отключать его куски в зависимости от нужд конкретной реализации.
Например если у нас не задефайнен ЛЦД экранчик, то его не надо инициализировать и не надо на него ничего выводить.



хреновый из меня учитель ))))





ЗЫ, там у них появились платки с АРМ-кортексом, мощи в них поболее... это интересно )

Аминь.
The following 4 users say Thank You to s3t for this post:
  • Sergey73 (09-19-2014), begemot (09-19-2014), flipper (09-20-2014), EDWARD (09-20-2014)
Ответ
#2

Для того, чтоб скомпилить, нужно
1. скачать саму прогу, http://arduino.cc/en/Main/Software - берем Arduino 1.0.6, т.к. 1.5.7 выглядит подозрительно, особенно с надписью БЕТА :)
2. попробовал сам себе скомпилировать мою же програмку - получил какой-то левый ошибка. Вобщем 1.0.6 поставляется с глюкнутой библиотечкой IR приемника. Нужно скачать свежую библиотечку отсюда https://github.com/shirriff/Arduino-IRremote (довноад зип пимпочка справа), и папку которая в зипе положить в
C:\Program Files (x86)\Arduino\libraries
при этом удалив из C:\Program Files (x86)\Arduino\libraries папку "RobotIRremote".

тогда все компилится )

Если что-то не так, то следует выбрать тип платки ардуины, для которой оно будет компилиться. в менюшке Tools > Board.


Наверное следует мне сделать проектик простой, чтоб постепенно на страницах форума его развивать )

Аминь.
The following 2 users say Thank You to s3t for this post:
  • flipper (09-20-2014), EDWARD (09-20-2014)
Ответ
#3

Да-да-да
Ответ
#4

хз, как по мне ардуино это бред)

"The universal aptitude for ineptitude makes any human accomplishment an incredible miracle." John Stapp
Ответ
#5

Назар, ни тебе ни мне это практически не нужно. Мне, например, не интересно платить за "overhead" заключающийся в встроенных средствах связи с USB, дополнительных размерах платы, определённых ограничениях в железе... Но я в принципе несколько раз уже ковырял MK когда возникала необходимость. И я всегда ориентирован на задачи "реального времени", т.е. перед выбором мне всегда интересно что и за какое время эта штука может сделать. Плюс, ни для меня ни для тебя нет проблемы нарисовать схемку на базе МК, ориентированную на какую-то конкретную задачу. Хотя я тут недавно столкнулся с тем что АТМЕЛ не правильно описывал конфигурацию для работы с какими-то последовательными протоколами и пришлось перекидывать пины. И конечно, каждый раз надо просмотреть страниц так 200-500 описания, прежде чем что-то нарисовать.
А теперь представь, человек не сталкивался с этими вещами и вообще далёк от вопросов проектирования электронного железа. Но может взять паяло и перепаять несколько проводов. И никогда не работал с такими штуками. У меня, например, каждый раз перед началом этих игрищ (я занимаюсь такими делами очень редко) бродит дикая мысль-а если что-то не так, а вдруг программатор не будет программировать, а вдруг компилятор не скомпиллит что-то потому что библиотеки не те или что-то ещё не так. И т.д. и т.п. А здесь всё очень просто, USB верёвка и стандартная борда. И всё вроде как есть. Начать гораздо проще. Плюс это тот-же С с набором библиотек рассчитанных на "чайников". Что удобно. Вспомни всякие устройства типа "Basic Stamp". Почему любителям он так нравился? Потому что очень просто начать. А это значительно мощнее.

Nobody Is Perfect
Ответ
#6

Вот именно, я, например, совершенно нифига не понимаю в МК, и как с ними работать, мои знания исчерпываются простейшей логикой, но сделать что-то хочется! :)
Сколько ж мне, взрослому уже мужику, нужно времени-денег убить, чтобы научиться с нуля тому, что в 16 вкатило бы за неделю? Правильно, столько, сколько у меня нет :)
Ответ
#7

Я последний раз програмировал еще студентом, тогда конечно ничто не ограничивало это, кодил как самолет, лета все таки)
Но вот год или два назад мне надо было заюзать МК чтоб с тойже 8804 разобратся (а это пипец еще тот), я тож посмотрел на андруино, как глянул на синтаксис понял что это еще больше запутывает, а так для АВР обычная Си шка да и всех делов, вспомнил некоторые моменты синтаксиса и всех делов, примеров вагон, народ и функции готовые выкладывает итд Написал функции програмного спи за пару дней, проверил в симуляторе итд Так что я действительно не вижу смысла в Ардуино, если б там была ИДЕ как в Хайасме для програмирования тогда да, для начинающего (и далеко не только) это был бы идеал, а так не понимаю я идеи ихней

С АРМом лучше б че придумали попроще, а то меня все стремает начать им заниматся)

"The universal aptitude for ineptitude makes any human accomplishment an incredible miracle." John Stapp
Ответ
#8

А програматоры итд это да, мне както столько нервов сьел, да что тут говорить, один глючный проц тоже, фьюзы не прошивал

"The universal aptitude for ineptitude makes any human accomplishment an incredible miracle." John Stapp
Ответ
#9

Итак, продолжим. Буду писать пример кода, зачем он нужен и что он делает. постепенно в него буду добавлять фичь.

Варнинг, часть, если не все, будет нагло скопипащено отовсюду )))


Пример номер ноль.

http://arduino.cc/en/Tutorial/BareMinimum
PHP код:
void setup() {
  
// put your setup code here, to run once:
}

void loop() {
  
// put your main code here, to run repeatedly: 

Отличительной чертой данного кода является его нейтральность. Оно ничего не делает, но вокруг него мы будем жить.

Что же тут написано? Это две функции, которые вызываются ардуиной. Первая (setup) вызывается в момент включения ардуины, только один раз. В нее следует ложить код инициализации вякого разного - выставлять тип ножек (вход/выход), запускать инициализацию всяких библиотечек, просчитывать что-то один раз...

Вторая (loop) - запускается в цикле, т.е. процессор постоянно в ней крутится. Тут мы будем складывать рутинную работу. А-ля считывание кнопки, если изменилась = делаем что-то. Закончили делать - цикл повторяется заново.

Синтаксис -
void loop() { }
void - тип данных, возвращаемых функцией. войд - нифиха или что-то подобное.
луп - имя функции
в скобочках круглых - можно положить параметры, что функция ожидает получить. в данном случае их нет.
между фигурными скобочками складываем наш код.

все, что находится в строчке после "//" - комменты кода, ниначто не влияют. Туда для себя можно ставить заметки. Аналогично работает комбинация из /* */
/*
много
строчный
коммент */
А, из полезностей комментов - ими можно закомментить кусок кода, который мы пока не хотим компилировать. Отключит строчку, либо целый кусок.






В чате пробегала задача работы с пультиком ) Ее мы и сделаем.
Ардуино уже поставляется с библиотечкой ИК интерфейсинга. И с кучей примеров ее применения. Возьмем самый простой, берем в меню - File>Examples>Arduino-Remote-IR-Master>IRrecvDemo

получаем следующий код:


PHP код:
#include <IRremote.h>    // <<<< Подключает файл библиотечки

int RECV_PIN 11;    // <<<< декларируем переменную типа int (integer - для циферок), и заталкиваем в нее десятичное значение 11, соответствующее номеру ноги на плате ардуинки. К ней мы подключим выход ИК приемника.

IRrecv irrecv(RECV_PIN); // декларируем обьект, который для нас будет работать с ИК приемником, типа "IRrecv", именем irrecv, и передаем ему RECV_PIN (т.е. циферку 11, т.е. ногу ардуинки с ик приемником).

decode_results results// видимо сюда будут складываться результаты принятых по ИК кодов...

void setup() // функция инициализации
{
  
Serial.begin(9600); // инициализация фичи сериал-порта. ардуинка может общаться с компьютером через сериал порт, который эмулируется средством USB... вобщем можно посылать и принимать данные с ардуинки, а также смотреть на них в проге ардуинки, нажав на пимпочку в правом верхнем углу, serial monitor.
  
  
  
irrecv.enableIRIn(); // Start the receiver // запуск библиотечки приема ИК. нужно - значит нужно ))
}

void loop() { // основной цикл
  
if (irrecv.decode(&results)) { //если функция irrecv.decode вернула положительный результат, то она положила этот результат и в results. На счет "&" не паримся, эт немножко сложней и извращенней - символизирует передачу не переменной а ее адреса, и тогда функция может в этот адрес что-то положить... неважно, главное чтоб работало.
    
Serial.println(results.valueHEX);// Serial.println печатает строку results.value в последовательный порт. Т.е. мы будем видить то, что попадает на ИК приемник. вернее уже ракодированные значения кнопок. "HEX" - не знаю, видимо форматирование результата, чтоб не печаталось в бинарном виде, а в виде 0х23BF шестнадцетиричного формата.
    
irrecv.resume(); // Receive the next value // видимо нужно для жизнедеятельности ИК-библиотечки )
  

  
delay(100); // задержка, чтоб проц не слишком активно бегал по циклу безконечному. В этот период времени проц ждет заветные 100 чего-то там, и затем продолжает свою безконечную работу.


Итог - мы, после заливки в МК данного кода, получим в Serial Monitor-е коды кнопок пульта.
Со стороны железа - потребуется какой-то (понятья не имею какой) ик-приемник (они на разные частоты делаются, возможно с разным пинаутом... но мне два раза везло с ними, по типичной схемке "как на картинке"). Картинка - тут,
http://www.righto.com/2009/08/multi-prot...brary.html
http://arcfn.com/images/ir-schematic.png
Vcc и GND берутся с гребенки на платке ардуинки, там-же находится первый попавшийся свободный вход. Желательно не трогать первые два входа/выхода, т.к. туда прикручены какие-то плюшки на плате.

Вуаля, в компьютер поступают ИК коды.
Програмка полезна, т.к. позволяет нам собрать список кодов, и их затем использовать при приеме и назначении "действий" в МК.





Пример 2.
Включение/выключение светодиода (усилителя, лампочки, вентилятора...) средством пульта.

http://arduino.cc/en/Tutorial/Blink



PHP код:
#include <IRremote.h>

int RECV_PIN 11;

IRrecv irrecv(RECV_PIN);

decode_results results;
bool isPoweredOn false// переменная, в которой будем хранить статус включенности светодиода.
void setup()
{
  
pinMode(13OUTPUT); // пин номер 13 будет у нас выходом. туда светодиод и подключим.
  
Serial.begin(9600);
  
irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (
irrecv.decode(&results)) {
    if(
results.value == 0x77E1E06F) { // если код кнопки равен 0x77E1E06F (этот код взят по результатам работы примера 1)
            
if (isPoweredOn) {//если isPoweredOn=true, т.е уже включен - 
                
isPoweredOn false;   // то выключаем в переменной
                
digitalWrite(13LOW); // выключаем физически, присваевая лог.уровень LOW на ножку 13
            
}
            else { 
// иначе
                
isPoweredOn true;    // включаем в переменной
                
digitalWrite(13HIGH);    // включаем физически
            
}
        }
    
Serial.println(results.valueHEX);
    
irrecv.resume(); // Receive the next value
  
}
  
delay(100);






Ту би континьюед :)

Аминь.
Ответ
#10

Я тож хочу АРМом заняцца, уже платку заказал оцтойную ))
http://www.ebay.com/itm/141392937932
За такую цену грех не купить ))) попробую на ней фифо забацать а-ля ДжКилл, хотя-бы для 16бит 44100, большего мне и не нужно...
Ну вот возьмите ее стоимость - 6$. уже готового изделия. Самому делать будет дороже и дольше )))

Аминь.
Ответ
#11

Так у http://leaflabs.com/ (а это их клон) какие-то трудности с IDE. Страница с IDE не открывается. В чём для них писать?

Nobody Is Perfect
Ответ
#12

да, ошибочка с моей стороны. отписал продавцу, может отменит. Прийдется искать другие варианты :) и покупать дебаггер.

Аминь.
Ответ


Возможно похожие темы ...
Тема / Автор Ответы Просмотры Последний пост

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)