Ломать не строить, в прошлой стране все строили, в этой ломают...
Мне нравиться как довольно банальные вещи, описывают так, как будто только сами боги могут такое сотворить. Ну и сколько денежек на эту чудо разработку потратили!? Небось для это, отдельную корпорацию сделали, да еще и со своим директором...
я тоже сейчас накидал по бырому код, только для дуинки 328р. Только для генерации использовал функцию Tone(). Еще как то изучал стробоскопический эффект и его влияние, это тоже вполне действенная вещ, Если использовать сверх яркие диоды, вполне эффективно будет! Также, раз уж мы используем мк, из предыдущего проекта закинул кусок кода для отслеживания состояния акб, но не реализовал его. Код полностью сырой, не знаю насколько верный, сейчас нет времени и возможности проверить в железе. Еще дополню, лучше использовать два излучателя на разные частоты! В общем, кто допилит код и протестит в железе, отпишитесь плз)
// Использование функции Tone() помешает использовать ШИМ на портах вход/выхода 3 и 11
// Частота до 16 герц (14-16 вспышек в секунду) 67мс/2==33 == 15вспышек
// оказывает полноценный стробоскопический ослепляющий эффект
// Номинальная частота: 19 ± 1 кГц 19000Гц
// Номинальная частота: 23 ± 1 кГц 23000Гц
#define BuzzerPin 10
#define LedPin 5
#define BTN_PIN 3 // кнопка подключена сюда (BTN_PIN --- КНОПКА --- GND)
#define LEDR1 12 // красный 10
#define LEDY2 11 // 1желтый 9
#define LEDY3 9 // 2желтый 5
#define LEDG4 8 // зеленый 3
#include "GyverButton.h"
GButton butt1(BTN_PIN);
uint32_t tmr, ms, ms1 = 0; //
int val = 800; // стартовая величина тона
int8_t dir = 100; // шаг изменения тона
int period = 8; // время шага
int min_val = 800; // минимальная тональность ..тестовая слышимая частота
int max_val = 2400; // максимальная тональность ..нужно будет поменять
bool led_stat = true; //
bool One = true; // флаг фонарика
bool Two = false; // флаг индикатора заряда
// расчитываемые аналоговые значения
/*
uint16_t U1_LA = 0; // гасим красный
uint16_t U1_HA = 0; // зажигаем красный
uint16_t U2_LA = 0; // гасим 1 желтый
uint16_t U2_HA = 0; // зажигаем 1 желтый
uint16_t U3_LA = 0; // гасим 2 желтый
uint16_t U3_HA = 0; // зажигаем 2 желтый
uint16_t U4_LA = 0; // гасим зеленый
uint16_t U4_HA = 0; // зажигаем зеленый
uint16_t UA = 0; // значение прочитанное с аналогового входа
bool B = false; // флаг мигалки заряда
*/
void setup() {
Serial.begin(9600);
pinMode(BuzzerPin, OUTPUT); // объявляем пин 10 как выход
pinMode(LedPin, OUTPUT);
digitalWrite(LedPin, LOW);
/*
pinMode(LEDR1, OUTPUT); //
pinMode(LEDY2, OUTPUT); //
pinMode(LEDY3, OUTPUT); //
pinMode(LEDG4, OUTPUT); //
analogReference (INTERNAL); // опорное напряжение 1.1v
// калибровочные значения
float U_VCC = 4.2; // напряжение на входе платы
float U_A0 = 0.88; // напряжение на выходе делителя
float U_XZ = +0.1; // погрешность опорника
// значения при которых происходит вкл/откл светодиодов
float U1_L = 3.4; // гасим красный
float U1_H = 3.5; // включаем красный
float U2_L = 3.6; // отключаем 1 желтый
float U2_H = 3.7; // включаем 1 желтый
float U3_L = 3.8; // отключаем 2 желтый
float U3_H = 3.9; // включаем 2 желтый
float U4_L = 4.0; // отключаем зеленый
float U4_H = 4.1; // включаем зеленый
float Umax = U_VCC / U_A0 * 1.1; // максимально возможное изменяемое напряжение (5.25)
float Uadc = 1024.0 / Umax; // в еденицах с выхода ацп
U1_LA = Uadc * (U1_L+U_XZ); //
U1_HA = Uadc * (U1_H+U_XZ); //
U1_LA = Uadc * (U2_L+U_XZ); //
U1_HA = Uadc * (U2_H+U_XZ); //
U1_LA = Uadc * (U3_L+U_XZ); //
U1_HA = Uadc * (U3_H+U_XZ); //
U1_LA = Uadc * (U4_L+U_XZ); //
U1_HA = Uadc * (U4_H+U_XZ); //
*/
}
void loop() {
butt1.tick();
if (butt1.isHold()) {
//One = false;
//Two = false;
ms = millis();
// Событие срабатывающее каждые 33 мс
if( ( ms - ms1 ) > 33 || ms < ms1 ){
ms1 = ms;
// Инвертируем светодиод
//Serial.println(led_stat);
digitalWrite(LedPin, led_stat);
led_stat = !led_stat;
}
//Serial.println(digitalRead(BTN_PIN));
if (millis() - tmr >= period) {
tmr = millis();
val += dir; // увеличиваем или уменьшаем на шаг
if (val == max_val || val == min_val) dir = -dir; // разворачиваем
Serial.println(val);
tone(BuzzerPin, val); // включаем сигнал
}
}
else if (digitalRead(BTN_PIN) == 1 && One == true) {
noTone(BuzzerPin);
digitalWrite(LedPin, LOW);
}
/*
if (Two) {
UA = analogRead (A0);
if (UA < U1_LA) digitalWrite (LEDR1, B);
if (UA > U1_HA) digitalWrite (LEDR1, HIGH);
if (UA < U2_LA) digitalWrite (LEDY2, LOW);
if (UA < U2_LA) digitalWrite (LEDY2, HIGH);
if (UA < U2_LA) digitalWrite (LEDY3, LOW);
if (UA < U2_LA) digitalWrite (LEDY3, HIGH);
if (UA < U2_LA) digitalWrite (LEDG4, LOW);
if (UA < U2_LA) digitalWrite (LEDG4, HIGH);
delay (1000);
B = !B;
}
*/
if (butt1.isSingle()) { // проверка на один клик
if (One) LEDon();// LEDoff();
else LEDoff();
}
if (butt1.isDouble()) { // проверка на двойной клик
Two = !Two;
}
}
void LEDon() {
One = false;
digitalWrite(LedPin, HIGH);
}
// turn off the system выключить систему
void LEDoff() {
One = true;
digitalWrite(LedPin, LOW);
}
Мне одному интересно, для чего резервное питание для роутера!? Ну просто у меня например в многоквартирном доме, когда липездричество отключают, раздача инета на роутеры жильцам, тоже прекращается, что как бы логично.
Вот это изобретение столетия!!!
Ломать не строить, в прошлой стране все строили, в этой ломают...
Мне нравиться как довольно банальные вещи, описывают так, как будто только сами боги могут такое сотворить. Ну и сколько денежек на эту чудо разработку потратили!? Небось для это, отдельную корпорацию сделали, да еще и со своим директором...
я тоже сейчас накидал по бырому код, только для дуинки 328р. Только для генерации использовал функцию Tone(). Еще как то изучал стробоскопический эффект и его влияние, это тоже вполне действенная вещ, Если использовать сверх яркие диоды, вполне эффективно будет! Также, раз уж мы используем мк, из предыдущего проекта закинул кусок кода для отслеживания состояния акб, но не реализовал его. Код полностью сырой, не знаю насколько верный, сейчас нет времени и возможности проверить в железе. Еще дополню, лучше использовать два излучателя на разные частоты! В общем, кто допилит код и протестит в железе, отпишитесь плз)
Мне одному интересно, для чего резервное питание для роутера!? Ну просто у меня например в многоквартирном доме, когда липездричество отключают, раздача инета на роутеры жильцам, тоже прекращается, что как бы логично.