// #include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_OLED_txt.
// #include <iarduino_OLED_txt.h> // Подключаем библиотеку iarduino_OLED_txt.
// iarduino_OLED_txt myOLED(0x3C); // Создаём объект myOLED, указывая адрес дисплея на шине I2C: 0x3C или 0x3D.
// //
// extern const uint8_t SmallFont[]; // Подключаем шрифт MediumFont.
uint32_t i; // Объявляем переменную для хранения времени прошедшего с момента старта скетча.
int h, m, s; // Объявляем переменную для хранения времени в часах, минутах и секундах.
//
uint32_t timer = 0; // переменная таймера
uint32_t timer2 = 0; // переменная таймера
#define T_PERIOD1 1000 // период переключения
#define T_PERIOD2 1000 // период переключения
#include "pitches.h"
int melody[] = {
NOTE_C4, NOTE_G3, NOTE_C4
};
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
8, 4, 8
};
#include <GyverOLED.h>
GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
// GyverOLED<SSD1306_128x64, OLED_BUFFER> oled;
#define analogInputAKB A0 // пин аналогового входа для вольтметра (A0)
//переменные для данных АКБ (измерение напряжения бортовой сети)
float vout = 0.0;
float vin = 0.0;
float R1 = 20000.0; // сопротивление R1 (20K)
float R2 = 10000.0; // сопротивление R2 (10K)
int value = 0;
uint32_t tmr;
void setup() {
// myOLED.begin(&Wire); // Инициируем работу с дисплеем, указав ссылку на объект для работы с шиной I2C на которой находится дисплей (по умолчанию &Wire).
// myOLED.setFont(SmallFont); // Указываем шрифт который требуется использовать для вывода цифр и текста.
Serial.begin(9600);
pinMode(analogInputAKB, INPUT);
oled.init(); // инициализация
// oled.clear(); // очистка
// setbatt(0);
Wire.setClock(800000L); //увеличивает скорость обновления дисплея
//------------------------- получение данных о уровне заряда АКБ -------------------------------
// считывание аналогового значения
value = analogRead(analogInputAKB);
vout = (value * 5.0) / 1024.0;
vin = (vout / (R2/(R1+R2))); // ЗНАЧЕНИЕ ДЛЯ ОТОБРАЖЕНИЯ НА ДИСПЛЕЕ и манипуляций с ним
if (vin<0.09)
{
vin=0.0;// обнуляем нежелательное значение
}
Serial.print("Напряжение АКБ: ");
Serial.print(vin);
Serial.println(" Volt");
//---------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------
oled.clear(); // очистка
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
oled.rect(5, 20, 15, 56, OLED_FILL); // 10% // 10%
delay(200);
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
delay(200);
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
delay(200);
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
delay(200);
oled.rect(51, 20, 59, 56, OLED_FILL); // 50%
delay(200);
oled.rect(62, 20, 70, 56, OLED_FILL); // 60%
delay(200);
oled.rect(73, 20, 81, 56, OLED_FILL); // 70%
delay(200);
oled.rect(84, 20, 92, 56, OLED_FILL); // 80%
delay(200);
oled.rect(95, 20, 103, 56, OLED_FILL); // 90%
delay(200);
oled.rect(106, 20, 114, 56, OLED_FILL); // 100%
delay(200);
oled.clear(); // очистка
oled.home();
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
oled.rect(51, 20, 59, 56, OLED_FILL); // 50%
oled.rect(62, 20, 70, 56, OLED_FILL); // 60%
oled.rect(73, 20, 81, 56, OLED_FILL); // 70%
oled.rect(84, 20, 92, 56, OLED_FILL); // 80%
oled.rect(95, 20, 103, 56, OLED_FILL); // 90%
delay(200);
oled.clear(); // очистка
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 63, OLED_STROKE);
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
oled.rect(51, 20, 59, 56, OLED_FILL); // 50%
oled.rect(62, 20, 70, 56, OLED_FILL); // 60%
oled.rect(73, 20, 81, 56, OLED_FILL); // 70%
oled.rect(84, 20, 92, 56, OLED_FILL); // 80%
delay(200);
oled.clear(); // очистка
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 63, OLED_STROKE);
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
oled.rect(51, 20, 59, 56, OLED_FILL); // 50%
oled.rect(62, 20, 70, 56, OLED_FILL); // 60%
oled.rect(73, 20, 81, 56, OLED_FILL); // 70%
delay(200);
oled.clear(); // очистка
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 63, OLED_STROKE);
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
oled.rect(51, 20, 59, 56, OLED_FILL); // 50%
oled.rect(62, 20, 70, 56, OLED_FILL); // 60%
delay(200);
oled.clear(); // очистка
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 63, OLED_STROKE);
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
oled.rect(51, 20, 59, 56, OLED_FILL); // 50%
delay(200);
oled.clear(); // очистка
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 63, OLED_STROKE);
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
delay(200);
oled.clear(); // очистка
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 63, OLED_STROKE);
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
delay(200);
oled.clear(); // очистка
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 63, OLED_STROKE);
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
delay(200);
oled.clear(); // очистка
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 63, OLED_STROKE);
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
delay(200);
//----------------------------------------------------------------------------
}
void loop() {
i=millis();
runtime();
// oled.setScale(2);
// oled.setCursor(4, 2);
// oled.print(" ");
// oled.setCursor(4, 3);
// oled.print(" ");
// oled.setCursor(4, 4);
// oled.print(" ");
// oled.setCursor(4, 5);
// oled.print(" ");
if (vin >= 12.61 && vin <= 13.19) setbatt10(); // 100
if (vin >= 12.50 && vin <= 12.6) setbatt9(); // 90
delay(50);
if (vin >= 12.35 && vin <= 12.49) setbatt8(); // 80
delay(50);
if (vin >= 12.28 && vin <= 12.34) setbatt7(); // 70
delay(50);
if (vin >= 12.15 && vin <= 12.27) setbatt6(); // 60
delay(50);
if (vin >= 12.00 && vin <= 12.14) setbatt5(); // 50
delay(50);
if (vin >= 11.85 && vin <= 11.99) setbatt4(); // 40
delay(50);
if (vin >= 11.65 && vin <= 11.84) setbatt3(); // 30
delay(50);
if (vin >= 11.45 && vin <= 11.64) setbatt2(); // 20
delay(50);
if (vin >= 11.34 && vin <= 11.44) setbatt1(); // 10
delay(50);
if (vin <= 11.33) lowbatt(); // 0 АЛАРМ
delay(50);
if (vin >= 13.2) zaradka(); // идёт зарядка АКБ
delay(50);
// tmr = millis();
// if (millis() - tmr > 5000) dataAKB();
//------------------------- получение данных о уровне заряда АКБ -------------------------------
// считывание аналогового значения
value = analogRead(analogInputAKB);
vout = (value * 5.0) / 1024.0;
vin = (vout / (R2/(R1+R2))); // ЗНАЧЕНИЕ ДЛЯ ОТОБРАЖЕНИЯ НА ДИСПЛЕЕ и манипуляций с ним
if (vin<0.09)
{
vin=0.0;// обнуляем нежелательное значение
}
Serial.print("Напряжение АКБ: ");
Serial.print(vin);
Serial.println(" Volt");
//---------------------------------------------------------------------------------------------
}
void runtime(){
// oled.setCursor(40, 0);
// oled.print("00:00:00");
// oled.print(i);
// i=millis(); // Получаем количество миллисекунд прошедшее с момента старта скетча.
if(i%1000>=0){ delay(1); // Выполняем скетч 1 раз в секунду. Так как условие истинно в течении 1 миллисекунды, то устанавливаем задержку в 1 миллисекунду.
i/=1000;
h=i/60/60%24;
m=i/60%60;
s=i%60; // Рассчитываем часы, минуты и секунды.
oled.setCursor(40, 0); // Устанавливаем курсор в 16 столбец 4 строки. oled.setScale(2);
oled.setScale(1);
if(h<10){oled.print(0);} oled.print(h); // Выводим часы прошедшие с момента старта скетча, в формате ЧЧ.
oled.print(":"); // Выводим текст состоящий из одного символа «:»
if(m<10){oled.print(0);} oled.print(m); // Выводим минуты прошедшие с момента старта скетча, в формате ММ.
oled.print(":"); // Выводим текст состоящий из одного символа «:»
if(s<10){oled.print(0);} oled.print(s); // Выводим секунды прошедшие с момента старта скетча, в формате СС.
// oled.update();
}
return;
oled.update();
}
void display1() {
return;
}
void dataAKB() { // cполучение уровня напряжения на АКБ
//------------------------- получение данных о уровне заряда АКБ -------------------------------
// считывание аналогового значения
// value = analogRead(analogInputAKB);
// vout = (value * 5.0) / 1024.0;
// vin = (vout / (R2/(R1+R2))); // ЗНАЧЕНИЕ ДЛЯ ОТОБРАЖЕНИЯ НА ДИСПЛЕЕ и манипуляций с ним
// if (vin<0.09)
// {
// vin=0.0;// обнуляем нежелательное значение
// }
// Serial.print("Напряжение АКБ: ");
// Serial.print(vin);
// Serial.println(" Volt");
//---------------------------------------------------------------------------------------------
return;
}
// ============================ рисование батарейки в зависимости от уровня заряда ======================
//============================================ setbatt1 ===============================================
void setbatt1(){
oled.update();
// oled.clear(); // очистка
// oled.invertDisplay(false);
cleardisplay();
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.setScale(1);
oled.setCursor(105, 0);
oled.print("10%");
oled.setScale(1);
oled.setCursor(0, 0);
oled.print(vin);
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
// delay(1000);
// oled.update();
return;
runtime();
}
//============================================ setbatt2 ===============================================
void setbatt2(){
oled.update();
// oled.clear(); // очистка
// oled.invertDisplay(false);
cleardisplay();
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.setScale(1);
oled.setCursor(105, 0);
oled.print("20%");
oled.setScale(1);
oled.setCursor(0, 0);
oled.print(vin);
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
return;
runtime();
// oled.update();
}
//============================================ setbatt3 ===============================================
void setbatt3(){
oled.update();
// oled.clear(); // очистка
// oled.invertDisplay(false);
cleardisplay();
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.setScale(1);
oled.setCursor(105, 0);
oled.print("30%");
oled.setScale(1);
oled.setCursor(0, 0);
oled.print(vin);
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
return;
runtime();
// oled.update();
}
//============================================ setbatt4 ===============================================
void setbatt4(){
oled.update();
// oled.clear(); // очистка
// oled.invertDisplay(false);
cleardisplay();
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
oled.setScale(1);
oled.setCursor(105, 0);
oled.print("40%");
oled.setScale(1);
oled.setCursor(0, 0);
oled.print(vin);
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
return;
runtime();
// oled.update();
}
//============================================ setbatt5 =======================+=======================
void setbatt5(){
oled.update();
// oled.clear(); // очистка
// oled.invertDisplay(false);
cleardisplay();
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
oled.rect(51, 20, 59, 56, OLED_FILL); // 50%
oled.setScale(1);
oled.setCursor(105, 0);
oled.print("50%");
oled.setScale(1);
oled.setCursor(0, 0);
oled.print(vin);
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
// oled.update();
return;
runtime();
}
//============================================ setbatt6 ===============================================
void setbatt6(){
oled.update();
// oled.clear(); // очистка
// oled.invertDisplay(false);
cleardisplay();
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
oled.rect(51, 20, 59, 56, OLED_FILL); // 50%
oled.rect(62, 20, 70, 56, OLED_FILL); // 60%
oled.setScale(1);
oled.setCursor(105, 0);
oled.print("60%");
oled.setScale(1);
oled.setCursor(0, 0);
oled.print(vin);
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
// oled.update();
return;
runtime();
}
//============================================ setbatt7 ===============================================
void setbatt7(){
oled.update();
// oled.clear(); // очистка
// oled.invertDisplay(false);
cleardisplay();
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
oled.rect(51, 20, 59, 56, OLED_FILL); // 50%
oled.rect(62, 20, 70, 56, OLED_FILL); // 60%
oled.rect(73, 20, 81, 56, OLED_FILL); // 70%
oled.setScale(1);
oled.setCursor(105, 0);
oled.print("70%");
oled.setScale(1);
oled.setCursor(0, 0);
oled.print(vin);
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
// oled.update();
return;
runtime();
}
//============================================ setbatt8 ===============================================
void setbatt8(){
oled.update();
// oled.clear(); // очистка
// oled.invertDisplay(false);
cleardisplay();
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
oled.rect(51, 20, 59, 56, OLED_FILL); // 50%
oled.rect(62, 20, 70, 56, OLED_FILL); // 60%
oled.rect(73, 20, 81, 56, OLED_FILL); // 70%
oled.rect(84, 20, 92, 56, OLED_FILL); // 80%
oled.setScale(1);
oled.setCursor(105, 0);
oled.print("80%");
oled.setScale(1);
oled.setCursor(0, 0);
oled.print(vin);
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
// oled.update();
return;
runtime();
}
//============================================ setbatt9 ===============================================
void setbatt9(){
oled.update();
// oled.clear(); // очистка
// oled.invertDisplay(false);
cleardisplay();
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
oled.rect(51, 20, 59, 56, OLED_FILL); // 50%
oled.rect(62, 20, 70, 56, OLED_FILL); // 60%
oled.rect(73, 20, 81, 56, OLED_FILL); // 70%
oled.rect(84, 20, 92, 56, OLED_FILL); // 80%
oled.rect(95, 20, 103, 56, OLED_FILL); // 90%
oled.setScale(1);
oled.setCursor(105, 0);
oled.print("90%");
oled.setScale(1);
oled.setCursor(0, 0);
oled.print(vin);
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
// oled.update();
return;
runtime();
}
//============================================ setbatt10 ==============================================
void setbatt10(){
oled.update();
// oled.clear(); // очистка
// oled.invertDisplay(false);
// oled.setScale(2);
// oled.setCursor(4, 2);
// oled.print(" ");
// oled.setCursor(4, 3);
// oled.print(" ");
// oled.setCursor(4, 4);
// oled.print(" ");
// oled.setCursor(4, 5);
// oled.print(" ");
cleardisplay();
oled.rect(5, 20, 15, 56, OLED_FILL); // 10%
oled.rect(18, 20, 26, 56, OLED_FILL); // 20%
oled.rect(29, 20, 37, 56, OLED_FILL); // 30%
oled.rect(40, 20, 48, 56, OLED_FILL); // 40%
oled.rect(51, 20, 59, 56, OLED_FILL); // 50%
oled.rect(62, 20, 70, 56, OLED_FILL); // 60%
oled.rect(73, 20, 81, 56, OLED_FILL); // 70%
oled.rect(84, 20, 92, 56, OLED_FILL); // 80%
oled.rect(95, 20, 103, 56, OLED_FILL); // 90%
oled.rect(106,20, 114, 56, OLED_FILL); // 100%
oled.setScale(1);
oled.setCursor(102, 0);
oled.print("100%");
oled.setScale(1);
oled.setCursor(0, 0);
oled.print(vin);
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
// oled.update();
return;
runtime();
}
//========================================== zaradka ====================================================
void zaradka() {
oled.update();
cleardisplay();
// oled.setCursor(5, 5);
// oled.print(" ");
// oled.setCursor(2, 1);
// oled.print(" ");
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
// delay(1000);
if (millis() - timer2 >= T_PERIOD2) { // таймер на millis()
timer2 = millis(); // сброс
oled.setScale(2);
oled.setCursor(37, 3);
oled.print("Идёт");
oled.setCursor(8, 5);
oled.print(" зарядка");
// oled.setScale(1);
// oled.setCursor(2, 1);
// oled.print(vin);
// oled.update();
// delay(1000);
}
return;
runtime();
}
//========================================= lowbatt =====================================================
void lowbatt() {
melody1();
oled.update();
cleardisplay();
// oled.setCursor(2, 1);
// oled.print(" ");
oled.rect(120, 27, 124, 50, OLED_STROKE);
oled.roundRect(0, 15, 120, 61, OLED_STROKE);
// delay(200);
// if (millis() - timer2 >= T_PERIOD2) { // таймер на millis()
// timer2 = millis(); // сброс
oled.setScale(2);
oled.setCursor(24, 3);
oled.print("Низкий");
oled.setCursor(8, 5);
oled.print("заряд АКБ");
if (millis() - timer >= T_PERIOD1) { // таймер на millis()
timer = millis(); // сброс
oled.invertDisplay(true);
}
return;
runtime();
}
//========================================================================================================
void cleardisplay(){
oled.invertDisplay(false);
oled.setScale(2);
oled.setCursor(4, 2);
oled.print(" ");
oled.setCursor(4, 3);
oled.print(" ");
oled.setCursor(4, 4);
oled.print(" ");
oled.setCursor(4, 5);
oled.print(" ");
oled.setScale(1);
oled.setCursor(103, 0);
oled.print(" ");
oled.setScale(1);
oled.setCursor(0, 0);
oled.print(" ");
}
//********************************************************* MELODY **************************************************
// void beep()
// {
// //Play tone on buzzerPin
// tone(buzzerPin, note, duration);
// //Stop tone on buzzerPin
// noTone(buzzerPin);
// delay(50);
// }
void melody1()
{
for (int thisNote = 0; thisNote < 3; thisNote++) {
// to calculate the note duration, take one second divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int noteDuration = 500 / noteDurations[thisNote]; // протяжность каждой ноты
tone(9, melody[thisNote], noteDuration);
// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * 1; // пауза между каждой нотой
delay(pauseBetweenNotes);
// stop the tone playing:
noTone(3);
}
}
// ПРИМЕР ВЫВОДА ВРЕМЕНИ С МОМЕНТА СТАРТА СКЕТЧА: //
//
// OLED экран 128×64 / 0,96" (Trema-модуль): // https://iarduino.ru/shop/displays/ekran-0-96-128x64-oled-i2c-belyy.html
// Информация о подключении модулей к шине I2C: // https://wiki.iarduino.ru/page/i2c_connection/
// Информация о модуле и описание библиотеки: // https://wiki.iarduino.ru/page/OLED_trema/
// Библиотека iarduino_OLED_txt (текстовая ) экономит ОЗУ: // https://iarduino.ru/file/341.html
// Библиотека iarduino_OLED (графическая): // https://iarduino.ru/file/340.html
//
// #include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_OLED_txt.
// #include <iarduino_OLED_txt.h> // Подключаем библиотеку iarduino_OLED_txt.
// iarduino_OLED_txt myOLED(0x3C); // Объявляем объект myOLED, указывая адрес дисплея на шине I2C: 0x3C или 0x3D.
// #include <GyverOLED.h>
// GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> myOLED;
// //
// uint32_t i; // Объявляем переменную для хранения времени прошедшего с момента старта скетча.
// int h, m, s; // Объявляем переменную для хранения времени в часах, минутах и секундах.
// //
// void setup(){ //
// // myOLED.begin(&Wire); // &Wire1, &Wire2 ... // Инициируем работу с дисплеем, указав ссылку на объект для работы с шиной I2C на которой находится дисплей (по умолчанию &Wire).
// // myOLED.setFont(SmallFont); // Указываем шрифт который требуется использовать для вывода цифр и текста.
// myOLED.init(); // инициализация
// // oled.clear(); // очистка
// // setbatt(0);
// Wire.setClock(800000L); //увеличивает скорость обновления дисплея
// } //
// //
// void loop(){ //
// i=millis(); // Получаем количество миллисекунд прошедшее с момента старта скетча.
// if(i%1000==0){ delay(1); // Выполняем скетч 1 раз в секунду. Так как условие истинно в течении 1 миллисекунды, то устанавливаем задержку в 1 миллисекунду.
// i/=1000; h=i/60/60%24; m=i/60%60; s=i%60; // Рассчитываем часы, минуты и секунды.
// myOLED.setCursor(40,0); // Устанавливаем курсор в 16 столбец 4 строки.
// if(h<10){myOLED.print(0);} myOLED.print(h); // Выводим часы прошедшие с момента старта скетча, в формате ЧЧ.
// myOLED.print(":"); // Выводим текст состоящий из одного символа «:»
// if(m<10){myOLED.print(0);} myOLED.print(m); // Выводим минуты прошедшие с момента старта скетча, в формате ММ.
// myOLED.print(":"); // Выводим текст состоящий из одного символа «:»
// if(s<10){myOLED.print(0);} myOLED.print(s); // Выводим секунды прошедшие с момента старта скетча, в формате СС.
// } //
// } //
//
/* ДОСТУПНЫЕ ШРИФТЫ: // Шрифты можно менять и добавлять в файле: src/DefaultFonts.h
* SmallFont // Маленький шрифт 6x8 ( 95 символов) только латиница
* SmallFontRus // Маленький шрифт 6x8 (176 символов) латиница и кириллица
* MediumFont // Средний шрифт 12x16 ( 95 символов) только латиница
* MediumFontRus // Средний шрифт 12x16 (176 символов) латиница и кириллица
* MediumNumbers // Средние цифры 12x16 ( 13 символов) 0123456789./-
* BigNumbers // Большие цифры 14x24 ( 13 символов) 0123456789./-
* MegaNumbers // Большие цифры 24x40 ( 13 символов) 0123456789./-
*/