Несколько мигающих светодиодов с разными интервалами, азбука Морзе A включена
Добрый вечер,
Я пишу код Arduino для вспышки нескольких светодиодов в разных последовательностях с разных контактов. Все работает хорошо, однако я не могу определить, как добавить в Азбуку Морзе последовательность вспышек.
В идеале последовательность должна быть 1 с, 1 с выключена, 3 с включена, 3 с выключена. затем повторяйте непрерывно, это будет для МО (А) буи
Ниже приведен формат, который я использовал для всех других источников света, и он хорошо работает с 8 различными последовательностями.
// A is 1s, B is 2.5s, C is 4s, D is 5s, F is 6s, G is 8s, H is 10s ,
#define aLed 2
#define bLed 3
#define cLed 4
#define dLed 5
#define fLed 6
#define gLed 7
#define hLed 8
void setup() {
pinMode(aLed, OUTPUT); //pin2 Output
pinMode(bLed, OUTPUT); //pin3 Output
pinMode(cLed, OUTPUT); //pin4 Output
pinMode(dLed, OUTPUT); //pin5 Output
pinMode(fLed, OUTPUT); //pin6 Output
pinMode(gLed, OUTPUT); //pin7 Output
pinMode(hLed, OUTPUT); //pin8 Output
}
void loop() {
BlinkA(1000);
BlinkB(2500);
BlinkC(4000);
BlinkD(5000);
BlinkF(6000);
BlinkG(8000);
BlinkH(10000);
}
void BlinkA (int interval){
static long prevMill = 0;
if ((millis() - prevMill) >= interval){
prevMill = millis();
digitalWrite(aLed, !digitalRead(aLed));
}
}
void BlinkB (int interval){
static long prevMill = 0;
if (((long)millis() - prevMill) >= interval){
prevMill = millis();
digitalWrite(bLed, !digitalRead(bLed));
}
}
void BlinkC (int interval){
static long prevMill = 0;
if ((millis() - prevMill) >= interval){
prevMill = millis();
digitalWrite(cLed, !digitalRead(cLed));
}
}
void BlinkD (int interval){
static long prevMill = 0;
if ((millis() - prevMill) >= interval){
prevMill = millis();
digitalWrite(dLed, !digitalRead(dLed));
}
}
void BlinkF (int interval){
static long prevMill = 0;
if ((millis() - prevMill) >= interval){
prevMill = millis();
digitalWrite(fLed, !digitalRead(fLed));
}
}
void BlinkG (int interval){
static long prevMill = 0;
if ((millis() - prevMill) >= interval){
prevMill = millis();
digitalWrite(gLed, !digitalRead(gLed));
}
}
void BlinkH (int interval){
static long prevMill = 0;
if ((millis() - prevMill) >= interval){
prevMill = millis();
digitalWrite(hLed, !digitalRead(hLed));
}
}
@buddyB16, 👍0
Обсуждение1 ответ
несколько мигающих светодиодов с разными интервалами (не все периодические)...
Я изменил ваш вопрос, надеюсь, не изменив его значения.
Исходя из этого вопроса, я бы предложил использовать конечный автомат. Предполагая, что вы используете функции "BlankI()" с разными именами для каждого светодиода, рассмотрите возможность добавления функций конечного автомата к 1 из этих функций для управления "непериодическим" светодиодом. Рассмотрим State Machine с 4 состояниями по одному для каждого действия:
- Индикатор горит в течение 1 секунды.
- Индикатор погас на 1 секунду.
- Индикатор горит в течение 3 секунд.
- Индикатор погас на 3 секунды.
Используйте счетчик (глобальный или статический, чтобы сохранять его значение между вызовами этой функции) для отслеживания состояний. Используйте шаблон кодирования переключателя/регистра, чтобы установить для "prevMill" соответствующую временную задержку для текущего состояния.
- Питание светодиодной ленты - Сколько ампер?
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Светодиод L продолжает гореть
- Улучшенное циклическое переключение цветов RGB.
- Плавное мигание светодиодов
- Остановить мигание светодиодов
- FastLED - Как управлять определенными светодиодами
чтобы отформатировать список кодов, поместите "~ ~ ~ " в пустую строку перед кодом ... и то же самое в пустой строке после кода, @jsotola
в чем заключается ваш вопрос?, @jsotola
Будет ли этот ответ полезен? https://arduinoprosto.ru/q/48588/37523, @VE7JRO
Повторите "_1с включено, 1с выключено, 3с включено, 3с выключено": Это означало бы ввод со скоростью 1,2 слова в минуту! Никто, даже полный новичок, не идет так медленно. Если вы хотите, чтобы кто-то мог прочитать букву “А” до того, как ему станет скучно, вы не должны опускаться ниже ≈ 5 WPM (240 мс включено, 240 мс выключено, 720 мс включено, 720 мс выключено)., @Edgar Bonet
@EdgarBonet, если только он не хочет имитировать мигание маяка. Они могут идти так медленно и время от времени использовать шаблоны азбуки Морзе., @PMF
https://github.com/MajenkoLibraries/Blinker, @Majenko
https://github.com/MajenkoLibraries/MorseStatus, @Majenko