Помогите не пойму... Выбор из меню

Есть три скетча. Задача - объединить в один. Как написать меню для дисплея на Arduino - YouTube - посмотрел видео, но чтот не понятно… Создам менюхи, а как выбирать, чтоб при нажатии срабатывало то что нужно? Есть задумка, но не хочу пока афишировать(всему свое время).
Допустим вот один скеч:
// к какому аналоговому пину мы подключены

#define THERMISTORPIN A0

// сопротивление при 25 градусах по Цельсию

#define THERMISTORNOMINAL 10000

// temp. для номинального сопротивления (практически всегда равна 25 C)

#define TEMPERATURENOMINAL 25

// сколько показаний используем для определения среднего значения

#define NUMSAMPLES 5

// бета коэффициент термистора (обычно 3000-4000)

#define BCOEFFICIENT 3950

// сопротивление второго резистора

#define SERIESRESISTOR 10000

int samples[NUMSAMPLES];

void setup(void) {

Serial.begin(9600);

analogReference(EXTERNAL);

}

void loop(void) {

uint8_t i;

float average;

// сводим показания в вектор с небольшой задержкой между снятием показаний

for (i=0; i< NUMSAMPLES; i++) {

samples[i] = analogRead(THERMISTORPIN);

delay(10);

}

// рассчитываем среднее значение

average = 0;

for (i=0; i< NUMSAMPLES; i++) {

average += samples[i];

}

average /= NUMSAMPLES;

Serial.print("Average analog reading ");

Serial.println(average);

// конвертируем значение в сопротивление

average = 1023 / average - 1;

average = SERIESRESISTOR / average;

Serial.print("Thermistor resistance ");

Serial.println(average);

float steinhart;

steinhart = average / THERMISTORNOMINAL; // (R/Ro)

steinhart = log(steinhart); // ln(R/Ro)

steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro)

steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)

steinhart = 1.0 / steinhart; // инвертируем

steinhart -= 273.15; // конвертируем в градусы по Цельсию

Serial.print("Temperature ");

Serial.print(steinhart);

Serial.println(" *C");

delay(1000);

}

А вот второй:

//Created 2017 by AlexGyver

// -------НАСТРОЙКИ-------
// длина корпуса в сантиметрах, для переноса начала отсчёта в заднюю часть корпуса
float case_offset = 10.0;
// -------НАСТРОЙКИ-------

// сонар
#define ECHO 2
#define TRIG 3
#define sensVCC 4

// дисплей
#define dispGND 5
byte DIO = 6;
byte RCLK = 7;
byte SCLK = 8;
#define dispVCC 9

// переключатель
#define buttPIN 11
#define buttGND 12

// создаём дисплей
#include <TM74HC595Display.h>
#include <TimerOne.h>
TM74HC595Display disp(SCLK, RCLK, DIO);
unsigned char SYM[47];

// крутая библиотека сонара
#include <NewPing.h>
NewPing sonar(TRIG, ECHO, 400);

float dist_3[3] = {0.0, 0.0, 0.0}; // массив для хранения трёх последних измерений
float middle, dist, dist_filtered;
float k;
byte i, delta;
unsigned long dispIsrTimer, sensTimer;

void setup() {
Serial.begin(9600);
symbols(); // создать символы для отображения на дисплее

// настройка пинов
pinMode(sensVCC, OUTPUT);
pinMode(dispGND, OUTPUT);
pinMode(dispVCC, OUTPUT);
pinMode(buttPIN, INPUT_PULLUP);
pinMode(buttGND, OUTPUT);

// подаём сигналы на пины
digitalWrite(sensVCC, 1);
digitalWrite(dispGND, 0);
digitalWrite(dispVCC, 1);
digitalWrite(buttGND, 0);
}

void loop() {
if (millis() - sensTimer > 50) { // измерение и вывод каждые 50 мс
// счётчик от 0 до 2
// каждую итерацию таймера i последовательно принимает значения 0, 1, 2, и так по кругу
if (i > 1) i = 0;
else i++;

dist_3[i] = (float)sonar.ping() / 57.5;                 // получить расстояние в текущую ячейку массива
if (!digitalRead(buttPIN)) dist_3[i] += case_offset;    // если включен переключатель стороны измерения, прибавить case_offset
dist = middle_of_3(dist_3[0], dist_3[1], dist_3[2]);    // фильтровать медианным фильтром из 3ёх последних измерений

delta = abs(dist_filtered - dist);                      // расчёт изменения с предыдущим
if (delta > 1) k = 0.7;                                 // если большое - резкий коэффициент
else k = 0.1;                                           // если маленькое - плавный коэффициент

dist_filtered = dist * k + dist_filtered * (1 - k);     // фильтр "бегущее среднее"

disp.clear();                                           // очистить дисплей
disp.float_dot(dist_filtered, 1);                       // вывести
sensTimer = millis();                                   // сбросить таймер

}

if (micros() - dispIsrTimer > 300) { // таймер динамической индикации (по-русски: КОСТЫЛЬ!)
disp.timerIsr(); // “пнуть” дисплей
dispIsrTimer = micros(); // сбросить таймер
}
}

// медианный фильтр из 3ёх значений
float middle_of_3(float a, float b, float c) {
if ((a <= b) && (a <= c)) {
middle = (b <= c) ? b : c;
}
else {
if ((b <= a) && (b <= c)) {
middle = (a <= c) ? a : c;
}
else {
middle = (a <= b) ? a : b;
}
}
return middle;
}

// символы для дисплея
void symbols() {
// обычные
SYM[0] = 0xC0; //0
SYM[1] = 0xF9; //1
SYM[2] = 0xA4; //2
SYM[3] = 0xB0; //3
SYM[4] = 0x99; //4
SYM[5] = 0x92; //5
SYM[6] = 0x82; //6
SYM[7] = 0xF8; //7
SYM[8] = 0x80; //8
SYM[9] = 0x90; //9

// с точкой
SYM[10] = 0b01000000; //0.
SYM[11] = 0b01111001; //1.
SYM[12] = 0b00100100; //2.
SYM[13] = 0b00110000; //3.
SYM[14] = 0b00011001; //4.
SYM[15] = 0b00010010; //5.
SYM[16] = 0b00000010; //6.
SYM[17] = 0b01111000; //7.
SYM[18] = 0b00000000; //8.
SYM[19] = 0b00010000; //9.
}

Это только пример, но на них хочется понять, а именно меню - 2 пункта: выбираешь(и как выбираешь?) Первый - меряет темпиратуру, выбираешь второй - замеряет расстояние.

Это не скетч, это тест на IQ. Ты провалил.

Господа, есть люди, которым надо медленно говорить, а вам надо медленно писать?!
Да, неправильно вставил скечи… Но они не нужны! Вопрос в другом!
Кстати, DetSimen, тебя мама учила поддакивать, чтоб ничего не делать?! Плохое обучение!
Вернемся к вопросу. Ссылку на видео я закинул правильно! Пишу вопрос медленно: как, выбирая пункты меню, запускать разные функции программы? Два скеча на примере могут быть любыми. Если, ты не понимаешь смысла вопроса-не пиши никакой ответ) Спасибо!

Написать разные функции для каждого пункта меню.

И, да, вот ты посмотрел видео и нихрена не понял. Наерно вопросы надо задавать автору видео же, правда? Или ты думаешь, ношкой топнул, и все немедленно на ютубчик полезли смотреть твоё бесполезное видео?

1 лайк

А зачем вставлял? А так как собрано первое сообщение это неуважение к людям. В этой мешанине невозможно разобраться где программы с комментариями где вопросы.

1 лайк

Пока это не задача, это хотелка. Если лень разбирацца - добро пожаловать в платный раздел.

Ввести переменную, сопоставляющую пункты и функции.
VID_20230308_100257
Вот тут у переменной всего 5 значений, переход к меню и переходы к 4 эпизодам.

Дет! Кидай эти помои в ЧЧ сразу. Всем уже ясно, что с этим дурачком разговаривать не нужно.

Владушка, если обиженка не хочет со мной разговаривать-я рад)

Если устраивает короткий ответ, то:
Ответ: Элементарно!
Если нужен более развернутый, я тоже могу дать ссылку на видео:

А Ваш пост? Нужен? Кому?

Да, вопрос простой: Вы пришли сюда задать вопрос с минимальным уважением к присутствующим или с порога заявили “мне срать на Ваши правила и традиции, у меня проблема - решайте”? Я вижу второй ответ.

1 лайк

А вот и вторая “педалька”. Здравствуй, Женечка) Я тут один раз ошибся с оформлением, а дискуссию развели! Нет, мне не плвать на всех.
Да, я в ардуино-новичек! Ничего еще не знаю и не понимаю. Я фонтанирую идеями, которые требуют реализации. Но так как на каждой из них можно поднять денюшек, то из-за такихкак ты, я не могу их выложить для обозрения…

Именно поэтому я тут был) Мне нужно было направление, подсказки, помощь. А тут только накидываются, как ПЕТУХИ) неправильно оформил, не так написал, ты меня не уважаешь…
Да, я не уважаю, таких задротов, как ты! Выучил все и гордишься, скрываешь знания? Слушай, а ты перед зеркалом сам себя не нахваливаешь?!

Если весь форум такой, то сами знаете куда пройти …

Да, весь форум такой. И ты знаешь, куда тебе пойти

Предлагаю тебе фонтанировать идеями в другом месте.
Тут учат вежливых и терпеливых людей.
Фонтанирующие бизнесмены тут ни куда никому не уперлись. Ну разве, что в разделе “Ищу исполнителя”

Жаль, хотелось показать, что обосрать - легче, чем помочь. Рад,что все это поняли. Нормальные форумчане - простите мою словоблюдность!
Но владушка и женечка, к вам это не относится…

как-то больше на понос похоже.

3 лайка

Есть очень простой алгоритм - найми программиста, подпиши с ним NDA и фонтанируй. А побирушек в жизни и без тебя хватает.

1 лайк

Ты аккуратнее фонтанируй. Лучше - в носок. Многие говорят, что от этого волосы на руках растут и зрение слабеет. Переживаем, беспокоимся.

вот любопытная мысль : сам вопрошающий(в 90% случаев) сам агриться ТОЛЬКО на заковырки чем только добавляет еще больший срач. почему вопрошающий сам не следует своему совету “если не хотите [глагол], то проходите мимо” .То есть ,почему он вообще обращает внимание только на “издевки” а не на советы по теме вместо того что бы игнорить издевки но прислушаться к советам? загадака.