Асинхронные библиотеки Arduino

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Асинхронные библиотеки Arduino

Сообщение Hamulus » 22 июл 2016, 07:33

Подскажите, а какие есть нормальные библиотеки для Arduino для запуска множества асинхронных заданий БЕЗ использования аппаратных таймеров?
То есть чтобы например мигать несколькими светодиодами с разной частотой, при этом вращать несколько сервоприводов с разной скоростью и т.д.?
Я нашел например вот такое: http://robotic-controls.com/learn/ardui ... -intervals

По идее это как раз то, что нужно. Фактически это аналог функций из Javascript: setInterval, setTimeout, clearInterval
Но проблема в том, что она работает неправильно: функции setInterval и setTimeout работают как предполагается, но clearInterval, который должен останавливать работу только конкретного интервала почему-то останавливает все интервалы. Может я как-то не так пользуюсь им?

Код: Выделить всё
#include "kernel.h"

Kernel kernel;

int thcounter = 0;
int p1;
int p2;

void setup() {

Serial.begin(9600);
p1 = kernel.setInterval(1000000UL, test);
p2 = kernel.setInterval(2000000UL, test2);

}

void loop() {

kernel.runNext();

}

void test() {
    Serial.println(1000);
    thcounter++;

    if(thcounter>10) {
      kernel.clearInterval(p2); //вот эта строчка по идее должна останавливать только выполнение функции test2
но останавливает выполнение и test тоже
    }
}

void test2() {
    Serial.println(2000);
}


Также я нашел целый список подобных библиотек
http://blog.ardublock.com/2013/10/29/ev ... n-arduino/
Но по описанию именно не работающий Kernel именно то, что я ищу:)
Кто-то чем-то из них пользовался? Что из них позволит реализовать то же самое?
Hamulus
 
Сообщения: 53
Зарегистрирован: 19 июн 2016, 14:48

Re: Асинхронные библиотеки Arduino

Сообщение Eruman » 22 июл 2016, 11:28

Не проверял, но возможно повторный вызов clearInterval(p2) провоцирует зависание. Чтобы заработало, надо так
Код: Выделить всё
#include "kernel.h"

Kernel kernel;

int thcounter = 0;
int p1;
int p2;

void setup() {
  Serial.begin(9600);
  p1 = kernel.setInterval(1000000UL, test);
  p2 = kernel.setInterval(2000000UL, test2);
}

void loop() {
  kernel.runNext();
}

void test() {
    Serial.println(1000);
    if(thcounter>=0)
      thcounter++;

    if(thcounter>10) {
      thcounter=-1;
      kernel.clearInterval(p2); //
    }
}

void test2() {
    Serial.println(2000);
}
Соединяй и здравствуй.
Аватара пользователя
Eruman
 
Сообщения: 897
Зарегистрирован: 12 авг 2010, 15:10
Откуда: Астраханская обл.

Re: Асинхронные библиотеки Arduino

Сообщение linvinus » 22 июл 2016, 12:58

На STM32 я использую chibios это многозадачная OS для контроллеров.

Вот вроде есть порт на ардуино https://github.com/greiman/ChibiOS-Arduino

Вот тут есть примеры работы с этой ОС для новичков http://www.playembedded.org/blog/en/tag/chibios/
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: Асинхронные библиотеки Arduino

Сообщение Dmitry__ » 22 июл 2016, 13:44

Hamulus писал(а):Подскажите, а какие есть нормальные библиотеки для Arduino для запуска множества асинхронных заданий БЕЗ использования аппаратных таймеров?
То есть чтобы например мигать несколькими светодиодами с разной частотой, при этом вращать несколько сервоприводов с разной скоростью и т.д.?

Это фантастика. Если для мигания светодиодов это еще прокатит, то с сервами нет, т.к. будет дрожание фазы (джиттер), который будет зависеть от времени выполнения той самой асинхронной программы опроса. На светодиодах это просто будет незаметно.

Добавлено спустя 1 минуту 42 секунды:
Сервы всегда используют библиотеку с аппаратными ресурсами контроллера. Ну если это рабочее устройство, а не игрушка...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Асинхронные библиотеки Arduino

Сообщение Madf » 22 июл 2016, 14:14

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

Если надо много светодиодов и серв, то юзайти лучше специализированные микросхемы, типа PCA9685 (16 каналов): https://vimeo.com/123216886
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Асинхронные библиотеки Arduino

Сообщение Hamulus » 22 июл 2016, 17:27

Спасибо, Eruman.
Так всё и было - зависало из-за повторного вызова clearInterval:)
Hamulus
 
Сообщения: 53
Зарегистрирован: 19 июн 2016, 14:48


Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7