Мигания LED без delay();

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

здравствуйте, подскажите пожалуйста, как сделать  многозадачность. При включения arduino LED включился, на 1 секунду, пока горит LED, он выводил в сериал данные с ds1307 rtc, через 5 секунд включил, также на одно секунду. Заранее спасибо. 

b707
Offline
Зарегистрирован: 26.05.2017

fanat.arduino пишет:

здравствуйте, подскажите пожалуйста, как сделать  многозадачность. При включения arduino LED включился, на 1 секунду, пока горит LED, он выводил в сериал данные с ds1307 rtc, через 5 секунд включил, также на одно секунду. Заранее спасибо. 

а зачем тут "многозадачность"?

включили ЛЕД - и он горит, МК в это время ничем не занят, можно выводить данные...

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

ну как я ему скажу, что через 5 секунд выключить, и включить через 1 секунду. Через делей не получится.

b707
Offline
Зарегистрирован: 26.05.2017

fanat.arduino пишет:

ну как я ему скажу, что через 5 секунд выключить, и включить через 1 секунду. Через делей не получится.

ищите пример "блинк без делей"

Green
Offline
Зарегистрирован: 01.10.2015

И что вы циклитесь на этом delay! Прям катастрофа.( Ставьте минимально возможный делай и играйтесь. Доходит?

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

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

bwn
Offline
Зарегистрирован: 25.08.2014

Вам ведь "Зеленый" уже сказал: "Минимально возможный", а между ними выводите.))))

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

Да я недавно начал изучать arduino

b707
Offline
Зарегистрирован: 26.05.2017

fanat.arduino пишет:

Да я недавно начал изучать arduino

ну так изучайте, а не попрошайничайте на форумах :)

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

Я просто не понимаю, что может такое делать. Вроде нашел, что примрно такое может делать прерывания, сейчас изучаю 

b707
Offline
Зарегистрирован: 26.05.2017

fanat.arduino пишет:

Я просто не понимаю, что может такое делать. Вроде нашел, что примрно такое может делать прерывания, сейчас изучаю 

рано вам прерывания изучать. миллис освойте сначала.

Я же вам сказал - посмотрите пример "блинк без делай" - он лежит в куче мест в инете, даже на нашем форуме есть

http://arduino.ru/tutorials/BlinkWithoutDelay

 

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

вроде немного понял про милис. Милис считал кол-времени с запуска arduino, а можно сделать так, что наоборот. Чтоб включился сразу, а потом ждал? как я понимаю на милиси такое не получится, если не прав, простите.

sadman41
Offline
Зарегистрирован: 19.10.2016

Кто кого ждал?

Вы как открытия магазина ждёте -- у Вас часы в другую сторону идут что ли?

b707
Offline
Зарегистрирован: 26.05.2017

fanat.arduino пишет:

вроде немного понял про милис. Милис считал кол-времени с запуска arduino, а можно сделать так, что наоборот. Чтоб включился сразу, а потом ждал? как я понимаю на милиси такое не получится, если не прав, простите.

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

миллис - это просто часы. Положим, вам жена наказала выключить борщ через 2 часа. И показала на кухонный таймер. Далее у вас есть две стратегии

1) - можно сидеть перед плитой и ждать, пока прозвонит таймер. Это - делей

2) а можно просто посмотреть на свои часы, отметить, когда кончатся указанные 2 часа - и пойти пока книжку почитать. фуьбол посмотреть, творчеством заняться... в общем, поделать что-то полезное, а не просто тупо сидеть и ждать. Это - аналог миллис. И тут совершенно неважно, сколько сейчас на ваших часах времени - 2 часа ночи или 11 утра - вам ведь важно не время, а интервал. даже если у вас часы отстают или спешат на час - для правильной отсечки 2х часов варки борща это не играет роли. лишь бы часы ходили и не останавливалис

bwn
Offline
Зарегистрирован: 25.08.2014

fanat.arduino пишет:

вроде немного понял про милис. Милис считал кол-времени с запуска arduino, а можно сделать так, что наоборот. Чтоб включился сразу, а потом ждал? как я понимаю на милиси такое не получится, если не прав, простите.

И снова: ЛЕШАК

fanat.arduino
Offline
Зарегистрирован: 10.11.2019
#include <OneWire.h> 
OneWire ds(2);
unsigned long OFF;
unsigned long ON;
unsigned long TEMP;
void setup() {
 Serial.begin(9600);
 pinMode(8, OUTPUT); 
  digitalWrite(8, HIGH);

}
void loop() {
if (millis() - ON > 6000){ 
  digitalWrite(8, HIGH);
ON = millis(); 
}
if (millis() - OFF > 2000){
digitalWrite(8, LOW);
OFF = millis(); 
}
ds18b20(); 
}

  void ds18b20() 
{
  if (millis() - TEMP > 1000)
  {
   
   byte data[2]; // Место для значения температуры
ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
  ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устрйоство
  ds.write(0x44); // Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память
  ds.reset(); // Теперь готовимся получить значение измеренной температуры
  ds.write(0xCC);
  ds.write(0xBE); // Просим передать нам значение регистров со значением температуры
  // Получаем и считываем ответ
  data[0] = ds.read(); // Читаем младший байт значения температуры
  data[1] = ds.read(); // А теперь старший
  // Формируем итоговое значение:
  //    - сперва "склеиваем" значение,
 //    - затем умножаем его на коэффициент, соответсвующий разрешающей способности (для 12 бит по умолчанию - это 0,0625)

 float temperature =  ((data[1] << 8) | data[0]) * 0.0625;
 Serial.println(temperature);
TEMP = millis(); 
} 
  }


Попробовал я сделать с милисам, как вы сказали, но чета не могу допереть. Он выдает данные с ds18b20, при старте, через секунду, он убрать 5v с пина и больше не подает на пин питания.

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

с диодом на 13 пине работает

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

Задержку уменьшил, все заработало

b707
Offline
Зарегистрирован: 26.05.2017

можете обьяснить, что вы делаете в строчках с 13-20? Как должен зажигаться диод?

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

b707 пишет:

можете обьяснить, что вы делаете в строчках с 13-20? Как должен зажигаться диод?


случайным образом

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

Включаю диод на 13 пине и выключаю, с таймером милис. А я хотел сделать, чтоб при включения ардуино, он горел, через 5 секунды включился, через 1 секунду выключился. 

b707
Offline
Зарегистрирован: 26.05.2017

fanat.arduino пишет:

я хотел сделать, чтоб при включения ардуино, он горел, через 5 секунды включился, через 1 секунду выключился. 

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

Чтобы работало так, как вы хотите - время включения надо отсчитывать только тогда, когда светодиод горит, а время выключения - только когда он потушен, а не абы как

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

b707 пишет:
Так что Клапауций прав

я имел ввиду, что переменные ON, OFF, TEMP у него в сетапе имеют случайные значения, т.к. нигде выше не определены - он этого не замечает, т.к. баг происходит единоразово - далее переменные имеют значение mlllis().
то, что он не учитывает состояние пина - это ега личная проблема.
космолёты обречены падать в Туву.

b707
Offline
Зарегистрирован: 26.05.2017

Клапауций 003 пишет:
b707 пишет:
Так что Клапауций прав
я имел ввиду, что переменные ON, OFF у него в сетапе имеют случайные значения

нет, не случайные, глобальные переменные численных типов автоматически инициализируются нулем.

но кривости кода это не отменяет.