Что бы начинать писать меню надо знать где оно будет отображаться это моменты принципиальные. Само меню и схемы адресации я сначало просто рисую на бумажке, так очень удобно.
Виктрыч
Профессор
Екатеринбург
9.1K 2.4K
Отв.1281 28 Авг. 24, 19:12
Отображаться на телефоне по блютузу. Аналогично монитору IDE. Во многих моих поделках нет своего дисплея и кнопок. С телефона мне удобнее послать прямое указание, чем искать пункт меню. И вывести в монитор бесконечное колличество данных. Или группу избраных. Опять же на графиках удобнее видеть динамику. И что было допустим час назад. Пользуюсь готовыми приложениями с маркета. К примеру теплица. Отчёт раз в секунду. Переставил раз в 5 минут. Переустановил термостат с 30 на 57. Сбросил датчик углерода. Вернул отчёт раз в секунду Screenshot_2024-08-28-20-49-10-768_de. Аппаратная платформа Arduino для автоматизации наших процессов. Автоматика. Из другого приложения. Сунул один из датчиков температуры подмышку(зелёное) Screenshot_2024-08-28-20-53-17-382_com. Аппаратная платформа Arduino для автоматизации наших процессов. Автоматика. То есть уже сложившийся и удобный способ общения с ардуиной. Дисплеи кое где припаиваю. Но в основном без них. Если он за стенкой или в подвале как на него смотреть? Кроме того можно вывести напоминалку команд или вызвать инструкцию. Не всё можно удержать в голове.
Добавлено через 6мин.:
А по меню. Пока путаюсь в флагах и свойствах буфера сериала. Память уже подводит. Не моё это, да и поздно. Но интересно. Затянуло.
DIMA1965
Профессор
новый иерусалим
3K 654
Отв.1282 28 Авг. 24, 20:32
или использовать кофемашину с вайфаемdee, 28 Авг. 24, 14:42
Хорошая идея. Не жалко ее на плитку ставить?? 🤣🤣
dee
Научный сотрудник
Минск
8.6K 2.3K
Отв.1283 28 Авг. 24, 21:44
DIMA1965, на мраморную можно и поставить, а так на шкафчик удобнее )))
svarnoy
Профессор
Жуковский.
9.2K 4.6K
Отв.1284 29 Авг. 24, 07:39
Для приготовления еды надо не плитку ардуинить, а электрокастрюльку, мультиварку. У меня лет 10 назад была редмонд, у них на то время был самый живой форум, чего там народ не готовил, в пределах штатных программ. И пельмени сразу с корочкой, торты, и тд. Я делал завтраки, с вечера продуктов накидаешь, утром к будильнику все горяченькое. Надоело правда быстро. И вот теперь хочу заардуинить аэрогриль, чтоб приходишь в гараж, а там уже крылышки хрустящие готовы. Пиво в холодильнике холодное и без ардуины.
Виктрыч
Профессор
Екатеринбург
9.1K 2.4K
Отв.1285 29 Авг. 24, 08:54
Мультиварка есть. Продуманный девайс. Но только на свою кастрюлю. На квас в ней солод осахариваю в режиме подогрева. Иван чай в режиме йогурта. И потом сразу в выпечку. Очень нравиться автоматический уход в подогрев. К ней как бы вопросов нет. Тё же каши нормально варит. Были бы ещё часы, а не таймер утро расчитывать. А с индукцией пока пауза. В этой блин динамическая клавиатура. Релюшки или оптроны нужны. Или отлавливать эту динамику. На даче только вилы. Шлифую скетч виртуально.
DIMA1965
Профессор
новый иерусалим
3K 654
Отв.1286 29 Авг. 24, 09:20 (через 27 мин)
с вечера продуктов накидаешь, утромsvarnoy, 29 Авг. 24, 07:39
И всю всю ночь они там с дикими дрожжами мокнут и киснут.
Кодите хорошо, а бизнес аналитика ( ответ на вопрос - КАК работает? И ЗАЧЕМ это нужно? ) хромает.
Добавлено через 2мин.:
а так на шкафчик удобнееdee, 28 Авг. 24, 21:44
Так скушно и уныло - куда ж ардуину то привинтить то 😜😜
svarnoy
Профессор
Жуковский.
9.2K 4.6K
Отв.1287 29 Авг. 24, 09:32 (через 12 мин)
И всю всю ночь они там с дикими дрожжами мокнут и киснут.DIMA1965, 29 Авг. 24, 09:20
Я не про теорию говорил, про практику, в мультях прекрасно делаются завтраки к утреннему будильнику.
Виктрыч
Профессор
Екатеринбург
9.1K 2.4K
Отв.1288 29 Авг. 24, 10:47
DIMA1965, а ты зачем здесь, если всё в магазине есть? С анализируй потраченные средства и время на выхлоп.
dee
Научный сотрудник
Минск
8.6K 2.3K
Отв.1289 29 Авг. 24, 13:49
Так скушно и уныло - куда ж ардуину то привинтить то 😜😜DIMA1965, 29 Авг. 24, 09:20
ардуино к шкафчику ? Мсье знает толк в автоматизации ))) вам с виктрычем по пути )))
Виктрыч
Профессор
Екатеринбург
9.1K 2.4K
Отв.1290 14 Окт. 24, 14:36
По ходу появился вопрос. Вот из примера
void loop() { uint16_t ir, red;
sensor.update();
while (sensor.getRawValues(&ir, &red)) { Serial.print("IR="); Serial.print(ir); Serial.print(" RED="); Serial.println(red); } } Всё работает и льёт в сериал как ошпаренный и почти мгновенно переполняет его буфер. & , как я понял из интернета, обращение по адресу переменной допустим ir. Как этот абзац заставить работать без while? Что бы вставить в свой код? Вывести ir и red и поработать с ними?
dee
Научный сотрудник
Минск
8.6K 2.3K
Отв.1291 14 Окт. 24, 15:41
Виктрыч, просто пропиши строку sensor.getRawValues(&ir, &red); она тебе обновит значение переменных "ir" и "red" а что б не переполняло добавь delay(100); что не очень хорошо, я делаю вызов по программному таймеру, все остальное свободное время МК занят опросом клавиатуры
proces_Button(kbs, kbl, kbr, kbu, kbd); //SEL LF RT UP DW
time_now_1sec = millis() / 1000; //переменная времени для текущего хранения секунд time_now_01sec = millis() / 200; //переменная времени для текущего хранения 1/5 секунды
if (time_01s != time_now_01sec) { // срабатывание 5 раз в секунду process_STATE(); //обработка состояния контроллера process_RGB(); //обработка цвета с датчика time_01s = time_now_01sec; // запомнить текущую 1/10 секунду и не обрабатывать содержимое до изменения }
if (time_1s != time_now_1sec) { // срабатывание 1 раз в секунду if (cooling != 3 || cooling != 4) { process_TEMP(); // если не форcировано охлаждение пробирки то идет обработка датчика температуры, преобразование температуры занимает около 850мс } process_COOLING(); process_DISPLAY(); time_1s = time_now_1sec; // запомнить текущую секунду и не обрабатывать содержимое до изменения }
}
если очень интересно то это кусок кода для определения на самодельном ФЭК пробы Ланга с охлаждением и термостабилизированием пробирки, каждое действие вынесено в отдельную функцию, типа процесс
Виктрыч
Профессор
Екатеринбург
9.1K 2.4K
Отв.1292 14 Окт. 24, 15:53 (через 12 мин)
Вроде этот вариант самый первый напрашивался. По нолям. В смысле монитор ваще ни чего не показывает. Нет обмена. Может чего и пропустил. Попробую ещё раз. Температуру из сетапа перенёс а цикл, показывает. float temperature = sensor.retrieveTemperature(); Serial.print("temp="); Serial.print(temperature); Serial.println("C"); А эта фигня из while не откликается. Буду копать дальше.
dee
Научный сотрудник
Минск
8.6K 2.3K
Отв.1293 14 Окт. 24, 15:54 (через 1 мин)
Виктрыч, пропустил
sensor.update();
что-то у тебя много начинается на sensor. моих знаний не хватает но это вроде название класса, оно должно быть уникальным а у тебя одно и для цвета и для температуры, как я понимаю по названию переменных, или у тебя и температура тоже из датчика цвета ?
Volume
Доктор наук
Уфа
597 333
Отв.1294 14 Окт. 24, 18:31
стандартный вариант неблокирующего периодического вызова чего-то в ардуине обычно делают так:
#define PERIOD_MS 100 unsigned long timing; // глобальная переменная для хранения последнего времени выполнения цикла
void loop(){ if (millis() - timing > PERIOD_MS){ //код выполняется с периодом PERIOD_MS timing = millis(); ....<какой-то код> } }
не спора ради, просто интересно - почему используешь иной вариант, через деление?
... time_now_01sec = millis() / 200; //переменная времени для текущего хранения 1/5 секунды ... if (time_01s != time_now_01sec) { // срабатывание 5 раз в секунду dee, 14 Окт. 24, 15:41
Виктрыч
Профессор
Екатеринбург
9.1K 2.4K
Отв.1295 14 Окт. 24, 18:45 (через 15 мин)
много начинается на sensor.dee, 14 Окт. 24, 15:54
Это тот же сенсор. Оксиметр, про который неделю назад говорили. max30100. Так то работает в классическом режиме. Но всегда же хочется заглянуть за горизонт. Пс. В классическом режиме с переменными пульса,кислорода и температуры проблем нет. Это всё можно кроить. А вот непосредственно с данными от цветоприемников засада. Только как показометры через монитор. Пробовал копнуть библиотеки. Пока для меня это китайская грамота.
Добавлено через 16мин.:
Сам скетч для демонстрации работы светодиодов. #include <Wire.h> #include "MAX30100.h"
MAX30100 sensor;
void setup() { Serial.begin(115200);
Serial.print("Initializing MAX30100..");
if (!sensor.begin()) { Serial.print("FAILED: ");
uint8_t partId = sensor.getPartId(); if (partId == 0xff) { Serial.println("I2C error"); } else { Serial.print("wrong part ID 0x"); Serial.print(partId, HEX); Serial.print(" (expected: 0x"); Serial.println(EXPECTED_PART_ID, HEX); } // Stop here for(;;);//ВОТ ЭТО НЕПОНЯТНО ЧТО ЗА ФИГНЯ } else { Serial.println("Success"); }
И бесконечное while внутри фигурных скобок. Не позволяющее там поковыряться. Строчит данные с фотоприемников как из пулемёта.
dee
Научный сотрудник
Минск
8.6K 2.3K
Отв.1296 14 Окт. 24, 19:23 (через 38 мин)
не спора ради, просто интересно - почему используешь иной вариант, через деление?Volume, 14 Окт. 24, 18:31
миллис() переполняется вроде через 4ро суток и в этот момент будет глюк а если поставить условие millis() > timer то выполнение вообще остановится, понятно что столько устройство работать не будет но как-то с предыдущих проектов осталось. Ну и четко видно сколько раз в секунду выполняется подпрограмма, время усреднения данных цветного сенсора как раз выставлено на 199мс.
Volume
Доктор наук
Уфа
597 333
Отв.1297 15 Окт. 24, 08:06
если поставить условие millis() > timer то выполнение вообще остановитсяdee, 14 Окт. 24, 19:23
да, при переполнении. Грешен, попадался. Лекарство: вычислять разность текущего времени с предыдущим, при использовании unsigned она всегда корректна. Или как у тебя, делить.
dee
Научный сотрудник
Минск
8.6K 2.3K
Отв.1298 15 Окт. 24, 09:34
Volume, вычитание побыстрее будет чем деление но что-то с ним тоже было не сложилось, не помню почему, проект часов и метеостанции был лет десять назад, глюков слишком долго было ждать что бы отладить )))
Volume
Доктор наук
Уфа
597 333
Отв.1299 15 Окт. 24, 12:08
Как этот абзац заставить работать без while? ... Строчит данные с фотоприемников как из пулемёта.Виктрыч, 14 Окт. 24, 14:36
так "сырые" данные и должны "сыпаться", в описании чипа "Sampling frequency set to 100Hz" И без while работать корректно не будет - здесь проверка буфера, пока там данные есть они вычитываются в переменные ir, red. Как буфер опустел, sensor.getRawValues(&ir, &red) вернет false, выход из цикла и loop, потом loop опять вызовется, строка sensor.update(); заполнит буфер - и опять цикл будет его вычитывать