roboforum.ru

Технический форум по робототехнике.
Текущее время: 26 ноя 2024, 19:35

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Асинхронные библиотеки Arduino
СообщениеДобавлено: 22 июл 2016, 07:33 
Не в сети

Зарегистрирован: 19 июн 2016, 14:48
Сообщения: 53
Подскажите, а какие есть нормальные библиотеки для 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 именно то, что я ищу:)
Кто-то чем-то из них пользовался? Что из них позволит реализовать то же самое?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Асинхронные библиотеки Arduino
СообщениеДобавлено: 22 июл 2016, 11:28 
Не в сети
Аватара пользователя

Зарегистрирован: 12 авг 2010, 15:10
Сообщения: 897
Откуда: Астраханская обл.
Не проверял, но возможно повторный вызов 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);
}

_________________
Соединяй и здравствуй.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Асинхронные библиотеки Arduino
СообщениеДобавлено: 22 июл 2016, 12:58 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2011, 12:37
Сообщения: 1672
Откуда: Москва
прог. языки: С
На 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
Делать надо хорошо - плохо получится само!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Асинхронные библиотеки Arduino
СообщениеДобавлено: 22 июл 2016, 13:44 
Не в сети
Аватара пользователя

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

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

Добавлено спустя 1 минуту 42 секунды:
Сервы всегда используют библиотеку с аппаратными ресурсами контроллера. Ну если это рабочее устройство, а не игрушка...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Асинхронные библиотеки Arduino
СообщениеДобавлено: 22 июл 2016, 14:14 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Удел готовых бибилиотек в том, что если что-то глючит - это не значит, что что-то плохо работает, просто тот кто это писал, использовал для определенных задач и только он понимает как этим пользоваться. Так же есть проблема в отсутствием гибкости, нового функционала (чуть по другому надо). Это я к тому, что если нужно что-то делать самому, то лучше разобраться и с "нуля" сделать самому, а не юзать готовое (впрочем о чем я говорю, если используется дуня изначально). :D

Если надо много светодиодов и серв, то юзайти лучше специализированные микросхемы, типа PCA9685 (16 каналов): https://vimeo.com/123216886


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Асинхронные библиотеки Arduino
СообщениеДобавлено: 22 июл 2016, 17:27 
Не в сети

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO