Программирование

Вопросы по программированию Arduino.

что нельзя выполнять внутри прерывания?

Где-то была тема не могу  ее найти, что нельзя выполнять внутри прерывания ?

millis()

micros()

delay()

вывод иформации в com-port

чтение информации из  com-port ?

 

Не работает библиотека NewSoftSerial

Добрый день!

Работаю с easyvr шилдом, для него необходима библиотека NewSoftSerial. Я написал код, но он не компилируется. Ссылается на ошибку с библиотекой. Дело в том, что даже примеры из этой библиотеки не компилируются. Пробывал разные версии IDE.

Ошибки ниже.

GPRS shield и температурный датчик

Всем привет! Уже весь день не могу решить простейшую задачу:

1) Есть arduino uno, gprs shield sim 900, аналоговый температурный датчик tmp36, твердотельное реле.

2)Необходимо чтобы температурный датчик постоянно следил за температурой и отправлял данные в serial/

3)Необходимо сделать так, чтоб при отправке sms включалось реле.

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

Массив enum

Есть перечисление ID (состояний) устройства:

enum states { CLEAN, DRIVE, SENSORS, EFFECT1, EFFECT2, EFFECT3};

И есть соответствующие им сообщения:

const char *menuPage1[]= 
{
  "Clean plate",
  "Working...",
  "Sensor settings",
  "Effect 1",
  "Effect 2",
  "Effect 3"
};

Сейчас чтобы что-то подправить, надо аккуратно сличать количество и последовательность пунктов.

Вопрос по напряжениям 5v и 3,3v.

Есть мысль повесить на аналоговый пин две кнопки, одной подавать 5вольт, а другой 3,3 вольта. В прерывании делать analogRead,  проверять напряжение и таким образом идентифицировать нажатую кнопку. Но возник вопрос. Если одновременно нажать обе, то не получим на 8,3 вольта на порте? Где ардуина берет 3,3 вольта? С делителя какого или откуда?  Вопрос наверное глупой, но для меня актуальный.

 

Спасибо за ответы.

Можно ли...?

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

 

Работа с serial портом

Привет всем. Возникла проблема с передачей данных через serial порт. Скорость стоит 38400.

Требуется передать последовательность 81 10 F1 81 03, но по какой-то непонятной причине ардуина передает  81 F1 10 81 03 8F 10 07. Как я понимаю 8F 10 07 - это что-то типа переноса строки. Как его убрать?

Отправляю данные так

Семисегментный индикатор. Вопросы по использованию.

  Есть проект в котором в loop  есть while который ждет нажание концевика и delay. 

Теперь появилась необходимость добавить регулятор температуры с трехразрядным индикатором. 

Очень не хочется использовать дополнительный  драйвер.  

Как это можно реализовать, чтобы индикация не мешала основной программе. Снимать темературу можно например каждые 200мс в прерывании по таймеру,  а как быть с индикатором?  Ведь ему нужно очень часто подавать импульсы, иначе будет моргать:) 

генератор импульсов

Для тестирования нужно генерировать импульсы (ширина не важна, в пределах 3-5 мкс ) с точным интервалом следования. Интервал между импульсами разный для каждого следующего  импульса и заранее определен в массиве.

Пожалуйста подскажите общий метод реализации . Пока предполагаю такой алгоритм:

1 Установить таймер-1  (для следующего  интервала) на прерывание-1.

Мигать несколькими светодиодами

Доброго дня.

Надо поморгать двумя светиками без delay(). Алгоритм такой примерно: зажигается первый светодиод, потом гаснет, через какое то время загорается второй светодиод, снова гаснет все на время и по кругу.

Читал/пробовал не работает никак.

Помогите, плз.

Так как сделано в коде ниже - не рабоает.