такой?Кто знает как ?
#include <Math.h>
#include <Wire.h>
#include <GyverOLED.h>
GyverOLED <SSD1306_128x64, OLED_NO_BUFFER> oled;
#define WindSensorPin (2)
volatile unsigned long Rotations;
volatile unsigned long ContactBounceTime;
float WindSpeed;
void setup() {
Serial.begin(9600);
pinMode (WindSensorPin, INPUT);
attachInterrupt(digitalPinToInterrupt(WindSensorPin), isr_rotation, FALLING);
Serial.println ("Wind Speed Test");
Serial.println ("Rotations\tM/S");
oled.init();
oled.flipV(0);
oled.clear();
oled.setScale(2);
oled.clear();
oled.setCursor(10, 2);
oled.print ("M/S");
oled.setCursor(42, 4);
oled.print(WindSpeed);
delay (3000);
}
void loop() {
Rotations = 0;
sei();
delay (3000);
cli();
WindSpeed = Rotations*0.12;
delay (3000);
Serial.print(Rotations); Serial.print("\t\t");
Serial.print(WindSpeed);
}
void isr_rotation() {
if ((millis()-ContactBounceTime) > 15){
Rotations++;
ContactBounceTime = millis();
}
}
#include <Math.h>
#include <Wire.h>
#include <GyverOLED.h>
GyverOLED <SSD1306_128x64, OLED_NO_BUFFER> oled;
#define WindSensorPin (2)
volatile unsigned long Rotations;
volatile unsigned long ContactBounceTime;
float WindSpeed;
void setup() {
Serial.begin(9600);
pinMode (WindSensorPin, INPUT);
attachInterrupt(digitalPinToInterrupt(WindSensorPin), isr_rotation, FALLING);
Serial.println ("Wind Speed Test");
Serial.println ("Rotations\tM/S");
oled.init();
}
void loop() {
Rotations = 0;
sei();
delay (3000);
cli();
WindSpeed = Rotations*0.12;
delay (3000);
Serial.print(Rotations); Serial.print("\t\t");
Serial.print(WindSpeed);
oled.flipV(0);
oled.clear();
oled.setScale(2);
oled.clear();
oled.setCursor(10, 2);
oled.print ("M/S");
oled.setCursor(42, 4);
oled.print(Rotations);
delay (3000);
}
void isr_rotation() {
if ((millis()-ContactBounceTime) > 15){
Rotations++;
ContactBounceTime = millis();
}
}
#define OLED_SOFT_BUFFER_64 // Буфер на стороне МК
#include <GyverOLED.h> // Библиотека дисплея
GyverOLED<SSD1306_128x64> oled; // Обьект дисплея
#include <GyverButton.h> // Либа кнопок
GButton up(3, HIGH_PULL); // Кнопки
GButton down(4, HIGH_PULL);
GButton ok(2, HIGH_PULL);
#define ITEMS 24 // Общее кол во пунктов (больше 8 - нужно несколько страниц)
// Битмап с картинкой стрелочки (Если нужен)
const uint8_t ptr_bmp[] PROGMEM = {
0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0xFF, 0xFF, 0x7E, 0x3C, 0x18,
};
void setup() {
oled.init(); // Инциализация дисплея
oled.setContrast(255); // Макс. яркость
}
void loop() {
static int8_t pointer = 0; // Переменная указатель
/* Кнопки */
up.tick(); // Опрос кнопок
down.tick();
ok.tick();
if (up.isClick() or up.isHold()) { // Если кнопку нажали или удерживают
pointer = constrain(pointer - 1, 0, ITEMS - 1); // Двигаем указатель в пределах дисплея
}
if (down.isClick() or down.isHold()) {
pointer = constrain(pointer + 1, 0, ITEMS - 1);
}
if (ok.isClick()) { // Нажатие на ОК - переход в пункт меню
switch (pointer) { // По номеру указателей располагаем вложенные функции (можно вложенные меню)
case 0: func(); break; // По нажатию на ОК при наведении на 0й пункт вызвать функцию
case 1: break;
case 2: break;
case 3: break;
case 4: break;
case 5: break;
case 6: break;
case 7: break;
// И все остальные
}
}
/* меню */
oled.clear(); // Очищаем буфер
oled.home(); // Курсор в левый верхний угол
if (pointer < 8) { // Первая страница
oled.print // Вывод всех пунктов
(F(
" Parameter 0:\n" // Не забываем про '\n' - символ переноса строки
" Parameter 1:\n"
" Parameter 2:\n"
" Parameter 3:\n"
" Parameter 4:\n"
" Parameter 5:\n"
" Parameter 6:\n"
" Parameter 7:\n"
));
} else if (pointer < 16) {// Вторая страница
oled.print
(F(
" Parameter 8:\n"
" Parameter 9:\n"
" Parameter 10:\n"
" Parameter 11:\n"
" Parameter 12:\n"
" Parameter 13:\n"
" Parameter 14:\n"
" Parameter 15:\n"
));
} else { // Последняя страница
oled.print
(F(
" Parameter 16:\n"
" Parameter 17:\n"
" Parameter 18:\n"
" Parameter 19:\n"
" Parameter 20:\n"
" Parameter 21:\n"
" Parameter 22:\n"
" Parameter 23:\n"
));
}
printPointer(pointer); // Вывод указателя
oled.update(); // Выводим кадр на дисплей
}
void printPointer(uint8_t pointer) {
// Символьный указатель - лучший выбор в многостраничном меню
// Указатель в начале строки
oled.setCursor(0, pointer);
oled.print(">");
// Можно еще в конце
/*oled.setCursor(20, pointer);
oled.print("<");*/
// Указатель в виде прямоугольной рамки со скругленными углами
/*oled.roundRect(0, pointer * 8, 127, (pointer * 8) + 6);*/
// Указатель в виде битмапа (картинки)
/*oled.drawBitmap(0, pointer * 8, ptr_bmp, 10, 8);*/
}
/* пример вложеной функции, которую можно вызвать из под меню */
void func(void) {
oled.clear();
oled.home();
oled.print(F("Press OK to return"));
oled.update();
while (1) {
ok.tick();
if (ok.isClick()) return; // return возвращает нас в предыдущее меню
}
}
void loop() {
static boolean scr;
static int8_t pointer = 0; // Переменная указатель
/* Кнопки */
up.tick(); // Опрос кнопок
down.tick();
ok.tick();
if (up.isClick() or up.isHold()) { // Если кнопку нажали или удерживают
scr = 0; //обновили экран
pointer = constrain(pointer - 1, 0, ITEMS - 1); // Двигаем указатель в пределах дисплея
}
if (down.isClick() or down.isHold()) {
scr = 0; //обновили экран
pointer = constrain(pointer + 1, 0, ITEMS - 1);
}
if (ok.isClick()) { // Нажатие на ОК - переход в пункт меню
scr = 0; //обновили экран
switch (pointer) { // По номеру указателей располагаем вложенные функции (можно вложенные меню)
case 0: func(); break; // По нажатию на ОК при наведении на 0й пункт вызвать функцию
case 1: break;
case 2: break;
case 3: break;
case 4: break;
case 5: break;
case 6: break;
case 7: break;
// И все остальные
}
}
if (!scr) {
scr = 1; сбросили флаг обновления экрана
/* меню */
oled.clear(); // Очищаем буфер
oled.home(); // Курсор в левый верхний угол
if (pointer < 8) { // Первая страница
oled.print // Вывод всех пунктов
(F(
" Parameter 0:\n" // Не забываем про '\n' - символ переноса строки
" Parameter 1:\n"
" Parameter 2:\n"
" Parameter 3:\n"
" Parameter 4:\n"
" Parameter 5:\n"
" Parameter 6:\n"
" Parameter 7:\n"
));
} else if (pointer < 16) {// Вторая страница
oled.print
(F(
" Parameter 8:\n"
" Parameter 9:\n"
" Parameter 10:\n"
" Parameter 11:\n"
" Parameter 12:\n"
" Parameter 13:\n"
" Parameter 14:\n"
" Parameter 15:\n"
));
} else { // Последняя страница
oled.print
(F(
" Parameter 16:\n"
" Parameter 17:\n"
" Parameter 18:\n"
" Parameter 19:\n"
" Parameter 20:\n"
" Parameter 21:\n"
" Parameter 22:\n"
" Parameter 23:\n"
));
}
printPointer(pointer); // Вывод указателя
oled.update(); // Выводим кадр на дисплей
}
}
Ну мне пара таких попадались. Интересно, чем поможет Вам такая информация?Кто-то встречался с тем, что дисплеи умирали сами собой?