Ви не увійшли.
Сторінки 1
Пробував. Тоді втрачаю точність, частота невідповідна
Тільки на початку вивчення, маю задачку.
перший сценарій з механічними кнопками реалізував
const int LED_PIN_1 = 10; // Пін для підключення першого світлодіоду (LED1)
const int LED_PIN_2 = 9; // Пін для підключення другого світлодіоду (LED2)
const int BUTTON_PIN_1 = 6; // Пін для підключення першої кнопки
const int BUTTON_PIN_2 = 5; // Пін для підключення другої кнопки
void setup() {
pinMode(LED_PIN_1, OUTPUT);
pinMode(LED_PIN_2, OUTPUT);
pinMode(BUTTON_PIN_1, INPUT_PULLUP); // Встановлення піна з підтягувальним резистором
pinMode(BUTTON_PIN_2, INPUT_PULLUP); // Встановлення піна з підтягувальним резистором
}
void loop() {
// Керування першим ледом (LED1)
if (digitalRead(BUTTON_PIN_1) == LOW) {
digitalWrite(LED_PIN_1, HIGH); // Увімкнути LED1, якщо кнопка 1 натиснута
} else {
digitalWrite(LED_PIN_1, LOW); // Вимкнути LED1, якщо кнопку 1 відпущено
}
// Керування другим ледом (LED2)
if (digitalRead(BUTTON_PIN_2) == LOW) {
digitalWrite(LED_PIN_2, HIGH); // Увімкнути LED2, якщо кнопка 2 натиснута
} else {
digitalWrite(LED_PIN_2, LOW); // Вимкнути LED2, якщо кнопку 2 відпущено
}
}
други сценарій є проблема або на апаратному або на програмному:
#include <IRremote.h>
const int IR_RECEIVE_PIN = 11; // Пін, на який підключений приймач IR
const int LED_PIN_1 = 10; // Пін для підключення першого світлодіоду (LED)
const int LED_PIN_2 = 9; // Пін для підключення другого світлодіоду (LED)
IRrecv irrecv(IR_RECEIVE_PIN);
decode_results results;
int frequencies[] = {1000, 500, 333, 250, 200, 166, 142, 125, 111, 100};
int currentFrequencyIndex_alternate = 0;
int currentFrequencyIndex_together = 0;
boolean alternateMode = true; // По замовчуванню - поперемінний режим мигання
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Включення приймача IR
pinMode(LED_PIN_1, OUTPUT);
pinMode(LED_PIN_2, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
unsigned int buttonCode = results.value; // Отримання коду кнопки
// Виведення коду кнопки на монітор
Serial.print("Received button code: 0x");
Serial.println(buttonCode, HEX);
// Перевірка, чи кнопка належить діапазону частот для поперемінного режиму (1 Герц - 10 Герц)
if (buttonCode >= 0x1841 && buttonCode <= 0x184A) {
currentFrequencyIndex_alternate = buttonCode - 0x1841; // Встановлення індексу частоти для поперемінного режиму
alternateMode = true; // Включення поперемінного режиму мигання
}
// Перевірка, чи кнопка належить діапазону частот для режиму одночасного світіння (1 Герц - 10 Герц)
if (buttonCode >= 0x1041 && buttonCode <= 0x104A) {
currentFrequencyIndex_together = buttonCode - 0x1041; // Встановлення індексу частоти для режиму одночасного світіння
alternateMode = false; // Вимкнення поперемінного режиму мигання
}
// Режим постійного світіння обох ледів при натисканні жовтої кнопки
if (buttonCode == 0x1872 || buttonCode == 0x1072) {
alternateMode = false;
currentFrequencyIndex_alternate = -1; // Встановлення індексу постійного світіння
currentFrequencyIndex_together = -1; // Встановлення індексу постійного світіння
}
// Режим світіння 1 секунда першого леда, пауза 1 секунда, другого 1 секунда
if (buttonCode == 0x1877 || buttonCode == 0x1077) {
alternateMode = false;
currentFrequencyIndex_alternate = -2; // Встановлення індексу паузи 1 секунда
currentFrequencyIndex_together = -2; // Встановлення індексу паузи 1 секунда
}
// Режим світіння 1 секунда першого леда, пауза 2 секунда, другого 1 секунда
if (buttonCode == 0x1876 || buttonCode == 0x1076) {
alternateMode = false;
currentFrequencyIndex_alternate = -3; // Встановлення індексу паузи 2 секунди
currentFrequencyIndex_together = -3; // Встановлення індексу паузи 2 секунди
}
irrecv.resume(); // Підготовка до наступного прийому сигналу
}
// Мигання поперемінно з заданою частотою або виконання іншого режиму
if (alternateMode) {
digitalWrite(LED_PIN_1, HIGH);
digitalWrite(LED_PIN_2, LOW);
delay(frequencies[currentFrequencyIndex_alternate] / 2);
digitalWrite(LED_PIN_1, LOW);
digitalWrite(LED_PIN_2, HIGH);
delay(frequencies[currentFrequencyIndex_alternate] / 2);
} else if (currentFrequencyIndex_together >= 0) {
digitalWrite(LED_PIN_1, HIGH);
digitalWrite(LED_PIN_2, HIGH);
delay(frequencies[currentFrequencyIndex_together]);
digitalWrite(LED_PIN_1, LOW);
digitalWrite(LED_PIN_2, LOW);
delay(frequencies[currentFrequencyIndex_together]);
} else if (currentFrequencyIndex_alternate == -1 || currentFrequencyIndex_together == -1) {
digitalWrite(LED_PIN_1, HIGH);
digitalWrite(LED_PIN_2, HIGH);
} else if (currentFrequencyIndex_alternate == -2 || currentFrequencyIndex_together == -2) {
digitalWrite(LED_PIN_1, HIGH);
delay(1000);
digitalWrite(LED_PIN_1, LOW);
delay(1000);
digitalWrite(LED_PIN_2, HIGH);
delay(1000);
digitalWrite(LED_PIN_2, LOW);
delay(1000);
} else if (currentFrequencyIndex_alternate == -3 || currentFrequencyIndex_together == -3) {
digitalWrite(LED_PIN_1, HIGH);
delay(1000);
digitalWrite(LED_PIN_1, LOW);
delay(2000);
digitalWrite(LED_PIN_2, HIGH);
delay(1000);
digitalWrite(LED_PIN_2, LOW);
delay(1000);
}
}
Хотілося на пульті та мабуть краще все таки на клавіатурі 4*4.
є два режми: почергове та одночасне мигання з заданою чатотою (від 1Герца до 8Герц)
наприклад кнопка 1 - 1Гц 2 - 2Гц і так далі а кнопка
* - перемикає між почерговим та одночасним морганням не змінюючи частоту...
також булоб непогано індикацію (1,2,3 і..) частоти
Сторінки 1