Уважаемые знатоки! Что ни кто не может подсказать такую простую для Вас задачу, как сделать задержку включения канала leds_02.start();. Вам бы только поглумиться? Спасибо.
Ну, если вы не в состоянии разобраться, как оформлять код в сообщениях, то что вы хотели? У нас такая вставка кода рассматривается как неуважение к сообществу, поэтому ваш путь - страдание ))
Я вас просил выложить класс Blink - вы так и не выложили. Поэтому добавляйте сами.
Я лишь могу рассказать на словах, как это сделать.
Вам нужно добавить в класс метод, который будет возвращать число миганий с начала запуска цикла. После этого все просто - запускаете мигание led_01, отсчитывайте новым методом 5(или сколько надо) миганий, после чего запускаете led_02
А с существующим кодом делать это некузяво
BLINK
Я выше кидал класс Blink, кину в архивах.
Вы выкладывали только один файл, а в классе их больше.
Сейчас уже не нужно, я вам написал что делать, попробуйте.
Blink.h
#pragma once
#include <Arduino.h>
// описание класса
class Blink
{
public:
Blink(uint8_t led_pin, uint16_t led_on = 500, uint16_t led_off = 500, uint16_t count = 100, bool inverse = false);
void start();
bool myrun();
private:
uint32_t _mymillis;
uint8_t _led_pin;
uint16_t _led_on;
uint16_t _led_off;
uint16_t _count;
bool _flag;
bool _ends;
bool _inverse;
};
Blink.cpp
#include "Blink.h"
// реализация методов
Blink::Blink(uint8_t led_pin, uint16_t led_on = 500, uint16_t led_off = 500, uint16_t count = 100, bool inverse = false)
{
pinMode(led_pin, OUTPUT);
_led_pin = led_pin;
_led_on = led_on;
_led_off = led_off;
_count = count * 2 - 1;
_inverse = inverse;
_ends = false;
}
void Blink::start()
{
_mymillis = millis();
_ends = false;
_flag = !(_inverse);
digitalWrite(_led_pin, _flag);
}
bool Blink::myrun()
{
if (!_ends && millis() - _mymillis >= (_flag ? _led_on : _led_off))
{
_mymillis = millis();
_flag = !_flag;
digitalWrite(_led_pin, _flag);
_count--;
if (_count == 0 && !_flag)
_ends = true;
}
return _ends;
}
BLINK.ino
#include "Blink.h"
uint8_t led01_pin = 11;
uint8_t led02_pin = 10;
uint16_t work_01_time = 500; // включено (время включенного состояния мс) LED1
uint16_t pause_01 = 500; // выключено (время выключенного состояния мс) LED1
uint16_t impuls_01 = 5; // число импульсов LED1
uint16_t work_02_time = 500; // включено (время включенного состояния мс) LED2
uint16_t pause_02 = 500; // выключено(время выключенного состояния мс) LED2
uint16_t impuls_02 = 1; // число импульсов LED2
Blink leds_01(led01_pin, work_01_time, pause_01, impuls_01);
Blink leds_02(led02_pin, work_02_time, pause_02, impuls_02);
void setup()
{
leds_01.start();
leds_02.start();
}
void loop()
{
if (leds_01.myrun())
if (leds_02.myrun())
{
leds_01.start();
leds_02.start();
}
}
В компиляторе не проверял… Си не простой язык из-за синтаксиса, к нему привыкать надо. Есть хоть знания по азам программирования?
Найдите отличия и подумайте что происходит. Исправления во всех файлах!
Спасибо за проделанную работу, но в симуляторе не верно работает код!
Диод D1 (зеленый) горит постоянно, а диод D2 (красный) постоянно моргает.
Должно быть так чтобы диод D2 моргнул нужное нам количество а именно 5 раз, затем морнет доод D1 в нужное количество 1 раз. После этих команд контроллер не реагирует не на что, после перезагрузки процесс повторяется.
А в таком варианте ???
#include "Blink.h"
uint8_t led01_pin = 11;
uint8_t led02_pin = 10;
uint16_t work_01_time = 500; // включено (время включенного состояния мс) LED1
uint16_t pause_01 = 500; // выключено (время выключенного состояния мс) LED1
uint16_t impuls_01 = 5; // число импульсов LED1
uint16_t work_02_time = 500; // включено (время включенного состояния мс) LED2
uint16_t pause_02 = 500; // выключено(время выключенного состояния мс) LED2
uint16_t impuls_02 = 1; // число импульсов LED2
Blink leds_01(led01_pin, work_01_time, pause_01, impuls_01);
Blink leds_02(led02_pin, work_02_time, pause_02, impuls_02);
void setup()
{
leds_01.start();
while (!leds_01.myrun());
leds_02.start();
while (!leds_02.myrun());
}
void loop()
{
}
В таком варианте все четко! Работает как нужно. Спасибо огромное!
Зачем для такой БАНАЛЬНОЙ задачи цеплять библиотеку и тратить ТРИ дня - не понятно !!!
И почему в разделе Ищу исполнителя бесплатные решения дают - тоже не понятно!!! ))))
А потому - что я в программирование не силен, а те люди которые знают сначала глумятся, а потом начинают помогать. Часть кода я нашел из интернета, поэтому и так )))
@CNC Чем вы компилировали ? У меня Proteus ругался на двойное определение дефолтных переменных …
Arduino IDE!
Проект
а вы еще пишите скетчи?
Конкретизируйте вопрос !!!
В этом разделе форума право первой ночи у Бармалея (он дошираками берет)…
Если вам нужно скетч именно от меня - решаемо (я беру в коньячном эквиваленте)!
щас по пробую объяснить есть шаговый двигатель точнее редуктор от сварочного аппрата что проволку толкает им надо управлять, один режим про подача проволки, во время движения возможность регулеровки скорости подачи, второй режим это подача ипульсами вперед и назад с возможностью настройки подачи больше вперед меньше назад, ну что бы вперед чуть больше подовала проволки чем назад, ну как то вывести кнопки энкодер ну если еще экран какой тоже не плохо будет
Всё это железо должно быть у меня на столе, иначе это стрельба из пушки по воробьям !
и как это сделать?
Транспортной компанией?)
Это если сильно далеко )))
