Пт окт 26, 2018 17:38:34
Вт окт 30, 2018 12:17:51
Вт окт 30, 2018 20:49:02
Ср ноя 14, 2018 19:25:58
Пт ноя 16, 2018 08:26:31
Сб ноя 21, 2020 04:33:13
Вт мар 29, 2022 16:15:02
extern enum ButtonValues
{
BUTTON_NONE,
BUTTON_UP,
BUTTON_DOWN,
BUTTON_LEFT,
BUTTON_RIGHT,
};
enum ButtonValues GetButtonPress(void)
{
return BUTTON_NONE;
};
Вт мар 29, 2022 20:52:57
надо эту функцию реализовать самостоятельно так, чтобы она возвращала одно из значений ButtonValues в зависимости от того, какая именно кнопка нажата. сейчас это просто заглушка, чтобы проект собирался.Land писал(а):Ее надо вызывать после определения нажатой кнопки и передать ей значение нажатой кнопки?
Вт мар 29, 2022 21:35:08
Ср мар 30, 2022 04:16:44
Ср мар 30, 2022 10:53:59
#include <avr/io.h>
#ifndef LIBRARY
#define LIBRARY
#include "Button.h"
#include "globals.h"
#endif
extern enum ButtonValues
{
BUTTON_NONE,
BUTTON_UP,
BUTTON_DOWN,
BUTTON_LEFT,
BUTTON_RIGHT,
};
uint8_t BtnAntdr[COUNT_KEY][2];
extern uint8_t BUTTON;
const uint8_t KeyPause[]={210,180,160,140,115,90,70,44,35,20,5};
//[0]антидрб [1]повторы
static void antdr_key(uint8_t Pin, uint8_t *p, uint8_t bit){
if (Pin==0){
if ( ++p[0] == KEY_SHORT_TIME){//антидрб
BUTTON = bit;
if (p[1]<sizeof(KeyPause)-1) p[1]++;//повторы
}
if (p[0] == KeyPause[p[1]])
p[0]=0;//антидрб убыстрение
}
else{
p[0]=0;
p[1]=0;
}
GetButtonPress();
}
void skan_key(void){//вызывать через 1мс
BUTTON &= BUTTON_NONE;//сбросить все кроме KEY_EXIT
antdr_key(BUTTON_UP_STATE, &BtnAntdr[BUTTON_UP][0], 1);
antdr_key(BUTTON_DOWN_STATE, &BtnAntdr[BUTTON_DOWN][0], 2);
antdr_key(BUTTON_LEFT_STATE, &BtnAntdr[BUTTON_LEFT][0], 3);
antdr_key(BUTTON_RIGHT_STATE,&BtnAntdr[BUTTON_RIGHT][0], 4);
}
enum ButtonValues GetButtonPress(void)
{
return BUTTON;
}
Чт мар 31, 2022 05:39:33
Чт мар 31, 2022 08:24:50
суть вот в чем: микроменю отрисовывает структуру меню по своей логике. но логика эта построена на использовании двух функций, которые реализовать должен пользователь, то есть вы: это функция ВЫВОДА, которая отвечает за "изображение" пункта меню, и функция ВВОДА, которая отвечает за то, как пользователь воздействует на органы управления для перемещений по меню. так вот, рассматриваемая вами функция - это ВВОД. она обязана вернуть коды, которые готова принять система микроменю. как эта функуия получит эти коды - системе микроменю не важно: эти коды могут прийти по интернету, получиться из нажатий кнопок или вращения энкодера - это ВАШЕ ДЕЛО. но так или иначе выдать на выход функция должна один из наперед заданных кодов - для перемещения вперед-назад и вглубь-наверх по системе меню.Land писал(а):я обработал нажатие кнопки, получил код кнопки и вызвал эту функцию, в качестве параметра передав код кнопки? но ведь функция пустая, она же не производит никаких действий над данными? Или я не правильно тут понимаю?
Чт мар 31, 2022 09:19:36
Чт мар 31, 2022 09:22:47
ей не надо, это она должна этот код родить!Land писал(а): а ей надо только код кнопки передать
Чт мар 31, 2022 10:39:56
Чт мар 31, 2022 11:46:04
Чт мар 31, 2022 17:02:41
Пт апр 01, 2022 12:35:16
Сб апр 02, 2022 09:42:05
// NAME NEXT(DOWN) PREVIOS(UP) PARENT(LEFT) CHILD(RIGHT) SELECT ENTER TEXT:
MENU_ITEM( Menu_1, Menu_2, Menu_6, NULL_MENU, Menu_1_1, NULL , NULL , "SET_DATE");
MENU_ITEM( Menu_2, Menu_3, Menu_1, NULL_MENU, Menu_2_1, NULL , NULL , "SET_TIME");
MENU_ITEM( Menu_3, Menu_4, Menu_2, NULL_MENU, Menu_3_1, NULL , NULL , "SET_OPEN");
MENU_ITEM( Menu_4, Menu_5, Menu_3, NULL_MENU, Menu_4_1, NULL , NULL , "SET_CLOSE");
MENU_ITEM( Menu_5, Menu_6, Menu_4, NULL_MENU, Menu_5_1, NULL , NULL , "SET_TEMPR");
MENU_ITEM( Menu_6, Menu_7, Menu_5, NULL_MENU, Menu_6_1, NULL , NULL , "SET_BRIGHTNES");
MENU_ITEM( Menu_7, Menu_1, Menu_6, NULL_MENU, Menu_7_1, NULL , NULL ,"SAVE&EXIT");
static void Generic_Write(const char* Text)
{
if (Text)
lcd_clear();
sprintf(string_M, "%s", Text);
lcd_gotoxy(0,0);;
lcd_str_out(string_M);
}
char string_M[14] = {0};
const char Text[];
#define MENU_ITEM(Name, Next, Previous, Parent, Child, SelectFunc, EnterFunc, Text) \
extern Menu_Item_t MENU_ITEM_STORAGE Next; \
extern Menu_Item_t MENU_ITEM_STORAGE Previous; \
extern Menu_Item_t MENU_ITEM_STORAGE Parent; \
extern Menu_Item_t MENU_ITEM_STORAGE Child; \
Menu_Item_t MENU_ITEM_STORAGE Name = {&Next, &Previous, &Parent, &Child, SelectFunc, EnterFunc, Text}
// Вывести время
sprintf(string, "%02i:%02i:%02i", time[0], time[1], time[2]);
lcd_gotoxy(0,0);
lcd_str_out(string);