Уроки программирования Arduino

Перенос из темы «Чайные радиоэлектронные вопросы»
 
1 2 3 4 5
DE JackSmith #16.12.2015 01:38  @Валентин_НН#15.12.2015 18:46
+
+1
-
edit
 

JackSmith

втянувшийся

В.Н.> принципиальных возражений-то нет? работать будет?
код не идеален, но критических ошибок не нашел

В.Н.> проблема в том, как эти сакральные знания воплотить в программе.
В.Н.> но это мы отложим на потом.
зачем откладывать? как вариант:
code c
  1. #include <TimerOne.h>
  2. #define myPWM   9
  3.  
  4. const uint16_t lightDelay=30000; // 30 sec
  5. const uint16_t fadeDelay=2000;// 2sec
  6. volatile uint16_t fade;
  7. volatile uint16_t wait;
  8. void setup()
  9. {
  10.   fade=0; wait=0;
  11.   Timer1.initialize(1000); // 1ms (1kHz)
  12.   Timer1.pwm(myPWM, 0);
  13.   Timer1.attachInterrupt( timerIsr ); // attach the service routine here
  14.   attachInterrupt(0, pirHandler, RISING);
  15. }
  16.  
  17. void loop()
  18. {
  19.    // code for controlling combat orbital units
  20. }
  21.  
  22. void timerIsr()
  23. {
  24.     if (digitalRead(2)) wait=lightDelay;
  25.     if (wait == 0 && fade >0) fade--;
  26.     else if (wait == lightDelay && fade < fadeDelay) fade++;
  27.     else if (fade == fadeDelay && wait >0) wait--;
  28.  
  29.     uint16_t value=fade>>1;
  30.     Timer1.setPwmDuty(myPWM,value);  
  31.    
  32. }
  33.  
  34. void pirHandler()
  35. {
  36.   wait=lightDelay;  
  37. }


библиотека TimerOne здесь https://code.google.com/p/arduino-timerone/downloads/list
 27.027.0
+
-
edit
 

GOGI

координатор
★★★
А зачем fade и wait как volatile объявлены?
1  42.042.0
+
-
edit
 

JackSmith

втянувшийся

GOGI> А зачем fade и wait как volatile объявлены?

глобальные переменные используемые в прерываниях

Frequently Asked Questions

When using the optimizer, in a loop like the following one: the compiler will typically access flag only once, and optimize further accesses completely away, since its code path analysis shows that nothing inside the loop could change the value of flag anyway. To tell the compiler that this variable could be changed outside the scope of its code path analysis (e. g. from within an interrupt routine), the variable needs to be declared like: Back to FAQ Index. In order to access the mathematical functions that are declared in , the linker needs to be told to also link the mathematical library, libm.a. // Дальше — www.nongnu.org
 
To tell the compiler that this variable could be changed outside the scope of its code path analysis (e. g. from within an interrupt routine), the variable needs to be declared like:
volatile uint8_t flag;
 
 27.027.0
+
+1
-
edit
 

Mishka

модератор
★★☆
GOGI> А зачем fade и wait как volatile объявлены?
Когда есть возможность того, что значение переменной может быть измененно вне контекста процесса (прерывание, эта память является на самом деле отображением какого-нибудь регистрав устройства, параллельная программа может туда чего-то записать, т.к. данная память используется для межпроцессного обмена и т.д.), то такие переменные так и описывают. Это позволяет компилятору не применять некоторые приёмы оптимизации (кеширование на регистрах, передачи по значению иногда, оптимизация выражений и прочее). В общем, код медленнее, зато работает с достоверными данными.
 37.037.0
RU Валентин_НН #20.12.2015 17:17
+
-
edit
 

Валентин_НН

координатор
★★
хочу в теле цикла опрашивать датчики (ну, или жечь светодиоды, без разницы).
но ни как не могу придумать конструкцию, которая мне подошла-бы :(

пытался сделать так

code c
  1. /пины, к которым подключены светодиоды
  2.   byte PIR[3]={12,13,14,15};
  3.  
  4. void setup()
  5. {
  6. pinMode(PIR[1]), INPUT);
  7. pinMode(PIR[2]), INPUT);
  8. }

не прокатывает даже на стадии инициализации

конструкция с enumom по видимому тоже не спасёт отца русской демократии

вдобавок, хотелось-бы, чтобы к датчику можно было обращаться по именам, а не только по номерам, те, не только PIR[1], но и PIR[BATHROOM]

чувствую, что нужен какой-то промежуточный костыль, но никак не могу его придумать.
 42.042.0
RU GOGI #20.12.2015 18:43  @Валентин_НН#20.12.2015 17:17
+
-
edit
 

GOGI

координатор
★★★
В.Н.> не прокатывает даже на стадии инициализации
code c
  1. byte PIR[[b]3[/b]]={12,13,14,15}

объявляешь массив в три элемента и инициализируешь его четырьмя числами
code c
  1. pinMode(PIR[1]), INPUT);

у тебя тут скобка лишняя после PIR[1])
1  43.043.0
RU Валентин_НН #20.12.2015 18:50  @GOGI#20.12.2015 18:43
+
-
edit
 

Валентин_НН

координатор
★★
GOGI>
чёрт,чёрт,чёрт,чёрт.
я, блин, уже несколько дней хожу, размышляю над этим головняком, а всё так просто :eek:
 42.042.0
RU GOGI #20.12.2015 20:09  @Валентин_НН#20.12.2015 18:50
+
-
edit
 

GOGI

координатор
★★★
А что, Arduino IDE вообще сообщений об ошибках не выдает?
1  43.043.0
RU Валентин_НН #20.12.2015 20:32  @GOGI#20.12.2015 20:09
+
-
edit
 

Валентин_НН

координатор
★★
GOGI> А что, Arduino IDE вообще сообщений об ошибках не выдает?

выдает.
про лишнюю скобку он мне говорит
multiple_PIR.ino:49:23: error: expected ';' before ')' token
multiple_PIR.Ино:49:23: ошибка: ожидается ';' перед ')' маркер
вообще, конечно этот IDE крайне скуп на комментарии. Помню, РКшный бейсик был как-то более словоохотлив (или мне кажется?)

да и внешнее оформление меня не очень устраивает - даже у Ромы на форуме всё более красиво выглядит. А тут даже строки не нумерованные, что меня вообще напрягает.
Наверно в этом корень всех моих неудач - "гранаты у него не той системы" :)
 42.042.0
RU Валентин_НН #20.12.2015 21:19
+
-
edit
 

Валентин_НН

координатор
★★
а вот так правильно делать?
code c
  1.  
  2.  
  3.  
  4. //перечисление точек освещения
  5. enum POINT
  6.   {
  7.   BATHROOM,            //ванна
  8.   KITCHEN,             //кухня
  9.   ENTRANCE_HALL,       //вход
  10.   TOTAL_POINT          //общее количество точек
  11.   };
  12.  
  13. //пины, к которым подключены пирдатчики
  14.   byte PIR[3]={4,5,6};
  15.  
  16.  
  17.  
  18.  
  19. void setup()
  20. {
  21.     pinMode(PIR[POINT(BATHROOM)], INPUT);// вот такая конструкция допустима?
  22. }
  23.  
  24. void loop()
  25. {
  26.     pirStatus = digitalRead (PIR[POINT(BATHROOM)]);
  27. }

не очень отдаёт индуизмом?
 42.042.0
RU GOGI #21.12.2015 06:34  @Валентин_НН#20.12.2015 21:19
+
-
edit
 

GOGI

координатор
★★★
В.Н.> не очень отдаёт индуизмом?
я не очень понимаю зачем здесь enum. Традиционно, просто через define в заголовочном файле
code c
  1. #define BATHROOM 0
  2. #define KITCHEN 1
  3. #define ENTRANCE_HALL 2
  4. pinMode(PIR(BATHROOM), INPUT);

ну и лучше сразу сделать абстракцию от железа и в отдельный файл вынести все аппаратно-платформозависимое.
типа
code c
  1. uint8_t GetPIRStatus(uint8_t PirChannel)
  2. {
  3.  return digitalRead (PirChannel);
  4. }

и в основной программе вызывать
code c
  1. void loop()
  2. {
  3. pirStatus = GetPIRStatus(KITCHEN);
  4. }
1  42.042.0
RU Валентин_НН #21.12.2015 07:40  @GOGI#21.12.2015 06:34
+
-
edit
 

Валентин_НН

координатор
★★
В.Н.>> не очень отдаёт индуизмом?
GOGI> я не очень понимаю зачем здесь enum. Традиционно, просто через define в заголовочном файле
почему enum?
Потому что была идея фикс писать в цикле что-то типа
code c
  1.  for ROOM=BATHROOM to ENTRANCE_HALL;
  2. ...
  3. write (LED[ROOM],brightCurrent);
  4. ...
  5. next ROOM



с definom такая конструкция, не очень прокатит.
Хотя, сейчас вот написал кусок, сижу - смотрю на него и думаю, а собственно, почему не прокатит? Вроде нет никаких препятствий для этого.


...
остальные твои примеры я не понял, буду думать над ними
...
всё, побежал народ в садик отводить
 42.042.0
RU Валентин_НН #21.12.2015 08:24  @Валентин_НН#21.12.2015 07:40
+
-
edit
 

Валентин_НН

координатор
★★
В.Н.>
...немного погодя.
Понял, это ты функцию описываешь.
Блин, как-то меня напрягает, что всё это происходит без объявления войны. Только что шли переменные, как вдруг хоп! И пошли функции.
Мне почему то хочется, чтобы перед переменными шло VAR, перед константами CONST, перед функциями FUNC
Откуда это? Может обломки паскаля в голове сидят?

Я, кстати, поначалу читая листинги, думал, что int это сокращение от "инициализация" пока мне (кстати, именно ты) тут глаза не раскрыли.
 
RU Валентин_НН #21.12.2015 18:34  @Валентин_НН#21.12.2015 08:24
+
-
edit
 

Валентин_НН

координатор
★★
В.Н.> Откуда это? Может обломки паскаля в голове сидят?
да, точно, это Паскалевский формат

code text
  1. var a, b, s: integer;
  2.  
  3. const
  4.    Min = 0;
  5.    Max = 100;
  6.  
  7. function имя функции (формальные параметры):тип результата;
  8.   раздел описаний функции
  9. begin
  10.  
  11.   исполняемая часть функции
  12.  
  13. end;


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

надо же, чего только в голове нет. и как это неожиданно всплывает
 42.042.0
RU Валентин_НН #24.12.2015 23:09
+
-
edit
 

Валентин_НН

координатор
★★
Слушайте, а есть какие-то более другие редакторы для написания программ?
просто сейчас пишу свою прогу, ну не знаю, как-то уж очень тяжко разобраться в мешанине строк. Я даже не знаю как проблему можно было-бы решить. может хоть выделение строк цветом что-ли? ну, чтобы сразу было видно, что вот закончился один блок и начался другой
 43.043.0
NL JackSmith #25.12.2015 12:07  @Валентин_НН#24.12.2015 23:09
+
+1
-
edit
 

JackSmith

втянувшийся

В.Н.> Слушайте, а есть какие-то более другие редакторы для написания программ?

как вариант:

Используем Sublime Text 3 в качестве IDE для Arduino | РОБОТОША

Для того, чтобы использовать Sublime Text 3 в качестве интегрированной среды разработки для Arduino необходимо воспользоваться плагином Stino. // robotosha.ru
 

еще есть плагин для Eclipse:

Arduino Playground - Eclipse

The playground is a publicly-editable wiki about Arduino. Eclipse is a free, powerful, and full-featured development environment that can be set up to work with AVR and Arduino. This page is very much a work-in-progress, please feel free to add to it or improve it. PlatformIO is free and open-source cross-platform code builder and library manager. It doesn't depend on any additional libraries/tools from an operation system. It allows you to use PlatformIO beginning from PC and ending with credit-card sized computers (like Raspberry Pi, BeagleBone, CubieBoard). // Дальше — playground.arduino.cc
 
 27.027.0
LT AleksejLt #25.12.2015 15:37  @JackSmith#25.12.2015 12:07
+
+1
-
edit
 

AleksejLt

втянувшийся

JackSmith> Используем Sublime Text 3 в качестве IDE для Arduino | РОБОТОША

Sublime отличная вещь. Правда для ардуинки это слишком мощно :)

JackSmith> еще есть плагин для Eclipse:

Упаси ТНБ от этого "заката" :) Я бы советовал не выделываться, а поставить плагин Visual Micro для Visual Studio. Микрософт это стандарт - удобная и бесплатная студия 2013/2015.

Download Arduino for Visual Studio

This is the main download page for the Visual Micro Arduino IDE Plugin. A single Microsoft installer caters for all supported versions of Arduino, Visual Studio. // www.visualmicro.com
 
 43.043.0
RU Balancer #14.01.2016 16:58  @Валентин_НН#09.11.2015 21:13
+
-
edit
 

Balancer

администратор
★★★★☆
В.Н.> а вот матричную?

Вешаешь матричную клавиатуру на микроконтроллер, тот же Ардуино, а уже с него шлёшь дальше сигнал по одному проводу. Собственно, PC-клавы так и сделаны :)
 33
RU Валентин_НН #14.01.2016 19:21  @Balancer#14.01.2016 16:58
+
-
edit
 

Валентин_НН

координатор
★★
В.Н.>> а вот матричную?
Balancer> Вешаешь матричную клавиатуру на микроконтроллер, тот же Ардуино...
[всплёскивает руками] так это-ж две ардуины на один проект потребуется!

Вообще, пришел к мысли, что надо бы купить с пяток этих ардуин - чтобы можно было параллельно несколько проектов ковырять, чтобы один не надоедал.
а то они у меня такие... долгоиграющие больно
 43.043.0
RU Balancer #14.01.2016 19:34  @Валентин_НН#14.01.2016 19:21
+
-
edit
 

Balancer

администратор
★★★★☆
В.Н.> [всплёскивает руками] так это-ж две ардуины на один проект потребуется!

Оне нонче по цене грязи в Китае :)

Кстати, если достаточно ~5 линий в интерфейсе (не для клавиатуры, но для какой-нибудь ещё периферии), то можно брать ATtiny85:

Arduino за 1$

В качестве вступления, я не буду пространно рассказывать о том, как люди, в руках паяльника не державшие, слова «программатор» не знающие, вместе с детьми... // geektimes.ru
 

Там цены вообще смешные. Готовый девайс, чтобы в USB втыкать от 90 рублей:

Free shipping! 1pcs Digispark kickstarter development board ATTINY85 module for Arduino usb-in Other Electronic Components from Electronic Components & Supplies on Aliexpress.com | Alibaba Group

Cheap board software, Buy Quality module gsm directly from China module board Suppliers: If you want to buy more than 150 pcs, you can contact us, we can give you the best price, because we are the&nb // www.aliexpress.com
 

Чип, который самому запрограммировать — только организовать UART-программер (хоть USB-платку рублей за 120 купить, хоть Arduino в роли программатора прицепить) и воткнуть в отладочную плату — 85 рублей:

1PCS ATTINY85 20PU ATTINY85 20PU ATTINY85 20 ATTINY85 ATMEL DIP-in Other Electronic Components from Electronic Components & Supplies on Aliexpress.com | Alibaba Group

Cheap dip switcher, Buy Quality dip relay directly from China dip dye wedding dress Suppliers: Manufacturer: Atmel   Product Category: 8-bit Microcontrollers // www.aliexpress.com
 

Вот так его можно от Arduino программировать:



В.Н.> а то они у меня такие... долгоиграющие больно

А я свои Arduino Nano оба спалил :) Так что новые идут почтой. Uno и Mega, слава Богу, живые, но у меня тоже проекты часто такие долгоиграющие, приходится, порой, то разбирать, то просто откладывать. Сейчас, вот, Uno задействован в двухканальном термометре, с которым на улицу ребёнка гулять в коляске выкатываем (один датчик на длинном шнурке по одеждой, чтобы видеть, как ему там, второй — снаружи коляски, чтобы просто температуру видеть уличную по приколу :) ), а Mega воткнута для управления светодиодной лентой. Это вообще жесть, там 70 портов, а я один использую :D
 33
RU Валентин_НН #14.01.2016 21:46  @Balancer#14.01.2016 19:34
+
-
edit
 

Валентин_НН

координатор
★★
Balancer>Сейчас, вот, Uno задействован в двухканальном термометре, с которым на улицу ребёнка гулять в коляске выкатываем (один датчик на длинном шнурке по одеждой, чтобы видеть, как ему там, второй — снаружи коляски, чтобы просто температуру видеть уличную по приколу :)
Батюшки, что деется - детей уже электрифицирують. Куда мир катится?
Ну ладно я - я всего лишь хочу одному детёнышу в куртку вшить неон_глоу

чтобы его на дороге заметно было
а старшему на кофре от саксофона выложить этим-же неоном контур сакса и может какой-нить динамический эквалайзер нарисовать.
 43.043.0
LT AleksejLt #15.01.2016 00:59  @Balancer#14.01.2016 19:34
+
+1
-
edit
 

AleksejLt

втянувшийся

Balancer> Кстати, если достаточно ~5 линий в интерфейсе (не для клавиатуры, но для какой-нибудь ещё периферии), то можно брать ATtiny85:

К ним хорошо бы иметь гнезда. Хотя всё зависит от уровня владения паяльником - я боюсь паять микросхемы, мне проще в гнездо воткнуть. Благо, что цены копеечные :)

20 Pcs14 Pin DIP IC Sockets Adaptor Solder Type Socket Contact Termination Through Hole Integrated Circuits Components-in Integrated Circuits from Electronic Components & Supplies on Aliexpress.com | Alibaba Group

Balancer> Сейчас, вот, Uno задействован в двухканальном термометре, с которым на улицу ребёнка гулять в коляске выкатываем

Как уно ведёт себя на морозе? У вас оригинальный ардуинка или Хинка? :)
 43.043.0
RU Balancer #15.01.2016 10:31  @Валентин_НН#14.01.2016 21:46
+
-
edit
 

Balancer

администратор
★★★★☆
В.Н.> Ну ладно я - я всего лишь хочу одному детёнышу в куртку вшить неон_глоу

Кстати, в курсе про Arduino Lilypad?

Free shipping LilyPad 328 Main Board ATmega328P ATmega328 16M For Arduino-in Other Electronic Components from Electronic Components & Supplies on Aliexpress.com | Alibaba Group

Cheap board cutter, Buy Quality board marker directly from China board brush Suppliers: LilyPad 328 Main Board  ATmega328 16M Description:This is LilyPad  - the main board consisting of an ATme // www.aliexpress.com
 

Как раз для вшивания в одежду :)
 33
RU Валентин_НН #15.01.2016 10:41  @Balancer#15.01.2016 10:31
+
-
edit
 

Валентин_НН

координатор
★★
Balancer> Кстати, в курсе про Arduino Lilypad?
В курсе. Но, по-моему, это какая-то мертворожденная затея (обрати внимание - та же Амперка их уже давно не продает)
Совершенно непонятно, чем эта Лилипад больше подходит для одежды, чем обычные платы. были-бы у них модули хоть сверху залиты чем-нибудь, для влагостойкости или были выполнены в каком-то более другом форм-факторе.
Ну вот куда это годится?


и, насколько я помню, я не помню :) ни одного интересного проекта на этой платформе
 43.043.0
RU Balancer #15.01.2016 10:47  @AleksejLt#15.01.2016 00:59
+
-
edit
 

Balancer

администратор
★★★★☆
AleksejLt> К ним хорошо бы иметь гнезда. Хотя всё зависит от уровня владения паяльником - я боюсь паять микросхемы, мне проще в гнездо воткнуть. Благо, что цены копеечные :)

Лишние контакты же. Снижение надёжности и громоздкость :) Для отладки — просто в макетную плату втыкаешь, а в релизе, 8 ног с шагом 2.54 запаять — там бояться нечего совсем :)

AleksejLt> Как уно ведёт себя на морозе? У вас оригинальный ардуинка или Хинка? :)

Uno — оригинальная, итальянская. Но, думаю, ей-то мороз пофиг. Вот ЖК-индикатор (1602 в виде Arduino-модуля) китайский странно вести себя стал — вместо ярко-белого на синем светит тёмно-серым на синем. А если пальцем придавать, то где придавил — белым светит. Непонятно, то ли холода испугался, то ли сам по себе заглючил. Надо ещё заказать, благо стоит копейки (201 руб) :)

Free Shipping 1pcs LCD Keypad Shield LCD1602 LCD 1602 Module Display For Ardu ATMEGA328 ATMEGA2560 raspberry pi UNO blue screen-in Other Electronic Components from Electronic Components & Supplies on Aliexpress.com | Alibaba Group

Cheap display photo, Buy Quality display hand directly from China display tea Suppliers: Welcome to our Store  ShenZhen KELI Electronics Co.,LtdLCD1602 character LCD expansion board, Immersion Gold P // www.aliexpress.com
 

Хотя ещё есть вариант, где разъёмы выведены вверх. Можно при отладке втыкать без сенсор-шилда что-нибудь:

LCD 1602 + keypad Shield for Arduino LCD display-in Other Electronic Components from Electronic Components & Supplies on Aliexpress.com | Alibaba Group

Cheap keypad shield, Buy Quality keypad protection directly from China keypad silicone Suppliers: Useful LCD display for Arduino with 16 symbols and 2 lines. Display background LED is connected to potentio // www.aliexpress.com
 

...

Пошёл, заказал оба. Заодно и ЖКД-тач-шилд в таком виде (315 руб), пригодится:

1pcs 2.4 inch 2.4 TFT LCD Shield Socket Touch Panel Module for Arduino UNO R3 Promotion-in LCD Modules from Electronic Components & Supplies on Aliexpress.com | Alibaba Group

Cheap module mp3, Buy Quality panel shop for sale directly from China panel antenna Suppliers: New Chic Pet Dog Cat Puppy LED Flashing Collar Safety Night Light Pendant mascotas perros HotUSD 0.96/piece2015 Br // www.aliexpress.com
 
 33
1 2 3 4 5

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru