Листать тему в которой более половины сообщений не относитсяя к теме - не состовляет удовольствия. Автору, имеющему свой сайт, следовало бы всё подробно разжевать хотя бы на нём. Или здесь в первом сообщении, а не тянутьрезину на 15 листов
Листать тему в которой более половины сообщений не относитсяя к теме - не состовляет удовольствия. Автору, имеющему свой сайт, следовало бы всё подробно разжевать хотя бы на нём. Или здесь в первом сообщении, а не тянутьрезину на 15 листов
в пакете с библиотекой есть файлы описалова на ангельском и русском языке.
есть краткий WIKI
есть примеры
вот у тебя лично есть вопросы по существу?
нет.
потому, что ты в глаза библиотеки не видел, описалово и вики не читал, то мнение имеешь.
Клапа, иди накати пивка или чего покрепче, да пошли всех на этот, как его, суд. Вчувствующую, с даром прорицания, кнопку еще не скоро придумают. Дай людям помечтать.
Давича собирал кодовый замок на четырех кнопках т.к. 4 шт проще паять и разнес их под 4 пальца для удобства нажатий :))))) так в замке реализовал алгоритм распознавания: одновременного нажатия нескольких кнопок, удержание кнопки, короткое и двойное нажатие... потом, за неудобством выкинул удержание и двойное нажатие - товарищи попросили, им трудно было запомнить :)))))))))))))))))) и все это катается на первом велосипеде и delay без delay() . Я это написал к тому, что я знал чего хочу, брал кубики готового конструктора и складывал. А этот срач на 15 страниц образовался из-за того, что многие хотят дом, а сами даже не представляют что такое кирпич и чем его можно заменить.
Р.С. хватит цапаться и оффтопить , достало пустопорожнее словоизлияние, оставьте страничку для дела.
Р.Р.С. Мир вашему дому и этому топику :))))))))))))))))))))
Р.Р.Р.С был еще вариант с азбукой морзе на одной кнопке - это тоже вариант, только он состоит из кирпичей и не является кирпичом сам.
Я предлагаю стопе. Ибо оффтоп. библа приятна и очень полезна. Есть куча функционала которая она из коробки не поддерживает, но... какие-то плюшки можно и обсудить, но опять же не терки без существа.
в очередной раз поддержу ползателя форума под ником sirota:
- предлагайте кучу фунцикнала, который библиотека не поддерживает искаропки.
фильтр дребезга, отслеживание событий: нажатие, отпускание, двойное нажатие(doubleclick), нажато и удерживается в течении определённого времени, отпущено и неактивно в течении определённого времени.
Спасибо! Есть одно пожелание для титанового велосипеда: переключатель логического уровня сигнала кнопки.
Так как кнопки могут как подтягивать сигнал к питанию, так и стягивать к земле, эта функция будет очень удобна для новичков и ленетяев.
Спасибо за ответ! Разобрался благодаря вам, можно было бы оформить это так:
UPD: упустил из вида очевидное - надеюсь, пользателям ясно, что код титанового велосипеда работает одинаково хорошо для кнопок, у которых сигнал при нажатии подтягивается к питанию, и для тех, у которых он стягивается к земле.
Я уверен, что ты, дорогой человек, встал сегодня не с той ноги.
Я ступил и признаю это. Ступил я после того, как в моем коде титановый велосипед не стал работать с подтяжкой на питание, но работал с подтяжкой на землю. После того, как я разобрался, я написал об этом с приставокой "можно было бы".
Но все это ни разу не повод посылать кого угодно на север, учти. Спасибо за код, он действительно хорош!
Клапа, здоров! Слушай, можно твою библу прикрутить к сенсорным кнопкам тача? Чето с ходу не нашел. Типа передавать библиотеке аппаратное состояние кнопки, а дальше все как обычно.
сделал сенсорные кнопки так. Может корявенько конечно исполнено, но функционирует пока отлично. Единственное, не смог нормально присваивать событие event_inactivity_Up(i)к конкретной кнопке (отрабатывает после отпускания любой из кнопок), но я этим не пользуюсь. Либо надо это всё манстырить не к Click.h , а к оболочке Button.h, но там нет в открытом доступе входа аппаратного состояния кнопок.
/////////////Ниже библиотеки экрана и тача
#include <Adafruit_GFX.h>
#include <UTFTGLUE.h>
UTFTGLUE myGLCD(0x7783, A2, A1, A3, A4, A0);
#include <stdint.h>
#include "TouchScreen.h"
#define YP A1 // must be an analog pin, use "An" notation!
#define XM A2 // must be an analog pin, use "An" notation!
#define YM 7 // can be a digital pin
#define XP 6 // can be a digital pin
#define MINPRESSURE 10
#define MAXPRESSURE 1000
TouchScreen myTouch = TouchScreen(XP, YP, XM, YM, 300);
TSPoint p;
///////////////выше библиотеки экрана и тача
#include <Click.h>
struct type_click in_Click;
Click test;
bool SensButton_PRESSED = 0; // аппаратное состояние сенсорной кнопки
unsigned long timerButton = 0; // стабилизирующий таймер сенсорной кнопки
uint8_t Button_N = 0; // программный номер сенсорной кнопки
bool Button_N_timerenabled = 0; // для таймера сброса программного номера кнопки
unsigned long timerButton_N = 0; // для таймера сброса программного номера кнопки
// дефайним названия кнопок на программные номера кнопок
#define NEXT 1
#define OK 2
void setup()
{
in_Click.timestamp_system = millis();
in_Click.state_hard = SensButton_PRESSED;
in_Click.duration_bounce = 50;
in_Click.duration_click_Db = 250;
in_Click.duration_inactivity_Up = 5000;
in_Click.duration_inactivity_Dn = 1000;
in_Click.duration_press = 500;
test.reset(in_Click);
Serial.begin (9600);
myGLCD.InitLCD();
myGLCD.clrScr();
myGLCD.setFont(BigFont);
myGLCD.setTextSize(2);
// нарисуем кнопки
myGLCD.setColor (255,255,255);
myGLCD.print("NEXT", 227, 47);
myGLCD.drawRect (210, 30, 290, 80);
myGLCD.print("OK", 240, 147);
myGLCD.drawRect (210, 130, 290, 180);
pinMode(YP, OUTPUT); //restore shared pins
pinMode(XM, OUTPUT);
digitalWrite(YP, HIGH); //because TFT control pins
digitalWrite(XM, HIGH);
}
void loop()
{
readResistiveTouch(); // опрос тача
in_Click.timestamp_system = millis();
in_Click.state_hard = SensButton_PRESSED;
test.read(in_Click);
// если давим на сенсорную кнопку "NEXT"
if (test.event_click_Db () == 1 && Button_N == NEXT) {Serial.println ("Double click NEXT");}
if (test.event_press_short () == 1 && Button_N == NEXT) {Serial.println ("Short click NEXT"); }
if (test.event_press_long () == 1 && Button_N == NEXT) {Serial.println ("Long click NEXT"); }
if (test.event_inactivity_Dn () == 1 && Button_N == NEXT) {Serial.println ("Inactivity DN NEXT"); }
// если давим на сенсорную кнопку "OK"
if (test.event_click_Db () == 1 && Button_N == OK) {Serial.println ("Double click OK");}
if (test.event_press_short () == 1 && Button_N == OK) {Serial.println ("Short click OK"); }
if (test.event_press_long () == 1 && Button_N == OK) {Serial.println ("Long click OK"); }
if (test.event_inactivity_Dn () == 1 && Button_N == OK) {Serial.println ("Inactivity DN OK"); }
if (test.event_inactivity_Up () == 1 ) {Serial.println ("Inactivity UP ALL BUTTONS"); }
}
void readResistiveTouch(void)
{
p = myTouch.getPoint(); // опрос тача
if (p.z > MINPRESSURE && p.z < MAXPRESSURE) { //если нажали на тач
//если это область кнопки "1"
if (p.x>=647 && p.x <= 840 && p.y>=245 && p.y <= 400) Button_N=1; //присвоим этот номер переменной
//если это область кнопки "2"
else if (p.x>=647 && p.x <= 840 && p.y>=580 && p.y <= 740) Button_N=2; //присвоим этот номер переменной
SensButton_PRESSED = 1; //аппаратное состояние - делаем "нажато"
timerButton = millis(); //включаем таймер стабилизации на 5мс
Button_N_timerenabled = 1; //активируем таймер на сброс программного номера кнопки
timerButton_N = millis(); //активируем таймер на сброс программного номера кнопки
}
//ниже отпускаем аппаратное состояние через 5мс. (без этого коряво работало)
else if (SensButton_PRESSED && millis()- timerButton>5) SensButton_PRESSED = 0;
//ниже сбрасываем программный номер кнопки после подавления дребезга+10мс
else if (Button_N_timerenabled && millis()- timerButton_N>in_Click.duration_bounce+10) {Button_N = 0; timerButton_N = 0;}
}
может и шумит, дисплей самый дешевый китайский а потому и вредный 2.4 McuFriend . Тут уже не до блекджека со шл... кое как вообще рабочую библиотеку нашел. Когда добавил эти 5мс все заработало отлично. Тоже не понял почему, но без задержки этой не работает. все остальное в качестве примера, вдруг кому пригодится. Наример при нажатии на кнопку она меняет цвет. Немного причесал код, сделал чтобы event_inactivity_Up(i) отрабатывало по конкретной кнопке, также можно это событие в целом после касания в любом месте тача получить.
/////////////Ниже библиотеки экрана и тача
#include <Adafruit_GFX.h>
#include <UTFTGLUE.h>
UTFTGLUE myGLCD(0x7783, A2, A1, A3, A4, A0);
#include <stdint.h>
#include "TouchScreen.h"
#define YP A1 // must be an analog pin, use "An" notation!
#define XM A2 // must be an analog pin, use "An" notation!
#define YM 7 // can be a digital pin
#define XP 6 // can be a digital pin
#define MINPRESSURE 10
#define MAXPRESSURE 1000
TouchScreen myTouch = TouchScreen(XP, YP, XM, YM, 300);
TSPoint p;
///////////////выше библиотеки экрана и тача
#include <Click.h>
struct type_click in_Click;
Click test;
bool SensButton_PRESSED = 0; // аппаратное состояние сенсорной кнопки
unsigned long timerButton = 0; // стабилизирующий таймер сенсорной кнопки
uint8_t Button_N = 0; // программный номер сенсорной кнопки
uint8_t inactivUpButton_N = 0; // программный номер сенсорной кнопки для отработки события неактивности отжатой кнопки
bool Button_N_timerenabled = 0; // для таймера сброса программного номера кнопки
unsigned long timerButton_N = 0; // для таймера сброса программного номера кнопки
// дефайним названия кнопок на программные номера кнопок
#define NEXT 1
#define OK 2
void setup()
{
in_Click.timestamp_system = millis();
in_Click.state_hard = SensButton_PRESSED;
in_Click.duration_bounce = 50;
in_Click.duration_click_Db = 250;
in_Click.duration_inactivity_Up = 5000;
in_Click.duration_inactivity_Dn = 1000;
in_Click.duration_press = 500;
test.reset(in_Click);
Serial.begin (9600);
myGLCD.InitLCD();
myGLCD.clrScr();
myGLCD.setFont(BigFont);
myGLCD.setTextSize(2);
// нарисуем кнопки
myGLCD.setColor (255,255,255);
printNEXTbutton();
printOKbutton();
}
void loop()
{
readResistiveTouch(); // опрос тача
// ниже опрос велосипеда
in_Click.timestamp_system = millis();
in_Click.state_hard = SensButton_PRESSED;
test.read(in_Click);
// ~~~~~~~~~~~~~~~~~~~~~~~~~если давим на сенсорную кнопку "NEXT"
if (test.event_click_Dn () == 1 && Button_N == NEXT) {// на этом событии, например, подкрасим кнопку
myGLCD.setColor (255,0,0); printNEXTbutton();}
if (test.event_click_Up () == 1 && Button_N == NEXT) {// на этом событии, например, вернём кнопке цвет
myGLCD.setColor (255,255,255); printNEXTbutton();}
if (test.event_click_Db () == 1 && Button_N == NEXT) {Serial.println ("Double click \"NEXT\"");}
if (test.event_press_short () == 1 && Button_N == NEXT) {Serial.println ("Short click \"NEXT\""); }
if (test.event_press_long () == 1 && Button_N == NEXT) {Serial.println ("Long click \"NEXT\""); }
if (test.event_inactivity_Dn () == 1 && Button_N == NEXT) {Serial.println ("Inactivity DN \"NEXT\""); }
// ниже событие отработает, если после отпускания кнопки не задевать остальную (кроме данной кнопки) область тача;
// если после отпускания кнопки снова задеть область этой кнопки просто сбросится таймер неактивности, но событие отработает
if (test.event_inactivity_Up () == 1 && inactivUpButton_N == NEXT) {Serial.println ("Inactivity UP \"NEXT\""); }
// ~~~~~~~~~~~~~~~~~~~~~~~~~ если давим на сенсорную кнопку "OK"
if (test.event_click_Dn () == 1 && Button_N == OK) {// на этом событии, например, подкрасим кнопку
myGLCD.setColor (0,255,0); printOKbutton();}
if (test.event_click_Up () == 1 && Button_N == OK) {// на этом событии, например, вернём кнопке цвет
myGLCD.setColor (255,255,255); printOKbutton();}
if (test.event_click_Db () == 1 && Button_N == OK) {Serial.println ("Double click \"OK\"");}
if (test.event_press_short () == 1 && Button_N == OK) {Serial.println ("Short click \"OK\""); }
if (test.event_press_long () == 1 && Button_N == OK) {Serial.println ("Long click \"OK\""); }
if (test.event_inactivity_Dn () == 1 && Button_N == OK) {Serial.println ("Inactivity DN \"OK\""); }
// ниже событие отработает, если после отпускания кнопки не задевать остальную (кроме данной кнопки) область тача;
// если после отпускания кнопки снова задеть область этой кнопки просто сбросится таймер неактивности, но событие отработает
if (test.event_inactivity_Up () == 1 && inactivUpButton_N == OK) {Serial.println ("Inactivity UP \"OK\""); }
if (test.event_click_Up () == 1) inactivUpButton_N = Button_N; // записываем последний программный номер кнопки
// для отработки события неактивности отжатой кнопки
if (test.event_inactivity_Up () == 1) {} // это событие отработает после последнего касания тача и конца таймера неактивности
}
void readResistiveTouch(void)
{
p = myTouch.getPoint(); // опрос тача
pinMode(YP, OUTPUT); //restore shared pins
pinMode(XM, OUTPUT);
digitalWrite(YP, HIGH); //because TFT control pins
digitalWrite(XM, HIGH);
if (p.z > MINPRESSURE && p.z < MAXPRESSURE) { //если нажали на тач
//если это область кнопки "1"
if (p.x>=647 && p.x <= 840 && p.y>=245 && p.y <= 400) Button_N=1; //присвоим этот номер переменной
//если это область кнопки "2"
else if (p.x>=647 && p.x <= 840 && p.y>=580 && p.y <= 740) Button_N=2; //присвоим этот номер переменной
SensButton_PRESSED = 1; //аппаратное состояние - делаем "нажато"
timerButton = millis(); //включаем таймер стабилизации на 5мс
Button_N_timerenabled = 1; //активируем таймер на сброс программного номера кнопки
timerButton_N = millis(); //активируем таймер на сброс программного номера кнопки
}
//ниже отпускаем аппаратное состояние через 5мс. (без этого коряво работало)
else if (SensButton_PRESSED && millis()- timerButton>5) SensButton_PRESSED = 0;
//ниже сбрасываем программный номер кнопки после подавления дребезга+10мс
else if (Button_N_timerenabled && millis()- timerButton_N>in_Click.duration_bounce+10) {Button_N = 0; timerButton_N = 0;}
}
// ниже отрисовка кнопок
void printNEXTbutton() {
myGLCD.print("NEXT", 227, 47);
myGLCD.drawRect (210, 30, 290, 80);
}
void printOKbutton() {
myGLCD.print("OK", 240, 147);
myGLCD.drawRect (210, 130, 290, 180);
}
у тебя три кнопки: t.button( 7, 8, 9); три кнопки - т.е. кнопка(0), кнопка(1), кнопка(2). ты же обращаешься к кнопкам не по индексам, а по номерам пинов: t.event_click_Up (7), t.event_click_Up (8)
у тебя три кнопки: t.button( 7, 8, 9); три кнопки - т.е. кнопка(0), кнопка(1), кнопка(2). ты же обращаешься к кнопкам не по индексам, а по номерам пинов: t.event_click_Up (7), t.event_click_Up (8)
о каких - 0 и 1 ты говоришь?
Если в скетче заменить 7, 8 на 0, 1 (где 0, 1 - пины), то работает нормально, если меняем на любые другие пины, в примере 7 и 8, то не работает. Или я неправильно, что то делаю?
Если в скетче заменить 7, 8 на 0, 1 (где 0, 1 - пины), то работает нормально, если меняем на любые другие пины, в примере 7 и 8, то не работает. Или я неправильно, что то делаю?
ты передал в настройках пины кнопок один раз: t.button( 7, 8, 9);
дальше в скетче не номера пинов фигурируют, а индексы в порядке их перечисления в настройках t.button(..., ..., ...); начиная с 0 - т.е. 0, 1, 2.
Еще вопрос, можно в библиатеку добавить, при длительном удержании, происходило тактирование кнопки, как в скетче. Пример работы, если нажимаем длительностью меньше, чем длительное удержания, кнопка нажимается 1 раз, если больше то нажимается через время циклически (допустим 250мс) пока кнопка нажата.
Еще вопрос, можно в библиатеку добавить, при длительном удержании, происходило тактирование кнопки, как в скетче. Пример работы, если нажимаем длительностью меньше, чем длительное удержания, кнопка нажимается 1 раз, если больше то нажимается через время циклически (допустим 250мс) пока кнопка нажата.
я понял - что бы как в клаве компьютера было.
не знаю - меня тут один и так критикует, что класс жрёт оперативку.
сделать можно, но если тебе нужно срочно, то прикрути уже готовое
Получилось сделать (для примера), 7 и 9 пины увеличивают значение 8 уменьшает.
Подскажите, как можно вынести скетч в процедуру? Допустим, нужно менять несколько значений с разными диапазонами. Например значения Hz0, Hz1,Hz2,Hz3,Hz4,..., от нижнего диапазона Hzn0, Hzn1,Hzn2,Hzn3,Hzn4,..., до верхнего диапазона Hzb0, Hzb1,Hzb2,Hzb3,Hzb4,... Вызывая Процедуру (Hz0), меняем значение Hz0 и т.д. Сами значения и диапазоны хранятся в массиве.
Или хотябы сделать в библиотеки так, что бы событие длинного нажатия кнопки висело до события отпускания кнопки, скетч был бы поменьше, убрал бы флаги.
t.event_inactivity_Up(0) == 1) {} - событие неактивности ненажатой кнопки, как я понял, это для кажной кнопка?
И еще хотелка, if (t.event_inactivity_Up() == 1) {} - что бы это событие было для всех кнопок, срабатывало от последнего нажатия любой кнопки. Будет удобно выходить в основное меню, если в подменю не нажимались длительное время кнопки.
Подскажите, как можно вынести скетч в процедуру? Допустим, нужно менять несколько значений с разными диапазонами. Например значения Hz0, Hz1,Hz2,Hz3,Hz4,..., от нижнего диапазона Hzn0, Hzn1,Hzn2,Hzn3,Hzn4,..., до верхнего диапазона Hzb0, Hzb1,Hzb2,Hzb3,Hzb4,... Вызывая Процедуру (Hzn0), меняем значение Hzn0 и т.д. Сами значения и диапазоны хранятся в массиве.
я не понял, что ты хотел сказать.
skalinas пишет:
Или хотябы сделать в библиотеки так, что бы событие длинного нажатия кнопки висело до события отпускания кнопки, скетч был бы поменьше.
событие от состояния именно тем и отличается, что имеет параметр "время события", но не имеет параметра "продолжительность" - поэтому, "висеть" не может. объявляй переменные-флаги и рули ими переменными класса. взводи флаг длинным нажатием и сбрасывай отпусканием. О_О
skalinas пишет:
t.event_inactivity_Up(0) == 1) {} - событие неактивности ненажатой кнопки, как я понял, это для кажной кнопка?
все переменные экземпляров класса для каждой кнопки абсолютно независимы друг от друга и друг на друга не влияют, если ты это не прописал в теле скетча.
skalinas пишет:
И еще хотелка, if (t.event_inactivity_Up() == 1) {} - что бы это событие было для всех кнопок, срабатывало от последнего нажатия любой кнопки. Будет удобно выходить в основное меню, если в подменю не нажимались длительное время кнопки.
так, что ли?
if (test.state_inactivity_Up() == 0 && test.event_inactivity_Up() == 1) {}
проверь, если работает, то я не понимаю, зачем это пихать в класс.
ну, шо? будет список нереализованных искаропки функций и улучшения сусчествующих?
*отож. звездоболы бессмысленные.
Листать тему в которой более половины сообщений не относитсяя к теме - не состовляет удовольствия. Автору, имеющему свой сайт, следовало бы всё подробно разжевать хотя бы на нём. Или здесь в первом сообщении, а не тянутьрезину на 15 листов
Листать тему в которой более половины сообщений не относитсяя к теме - не состовляет удовольствия. Автору, имеющему свой сайт, следовало бы всё подробно разжевать хотя бы на нём. Или здесь в первом сообщении, а не тянутьрезину на 15 листов
Клапа, иди накати пивка или чего покрепче, да пошли всех на этот, как его, суд. Вчувствующую, с даром прорицания, кнопку еще не скоро придумают. Дай людям помечтать.
Давича собирал кодовый замок на четырех кнопках т.к. 4 шт проще паять и разнес их под 4 пальца для удобства нажатий :))))) так в замке реализовал алгоритм распознавания: одновременного нажатия нескольких кнопок, удержание кнопки, короткое и двойное нажатие... потом, за неудобством выкинул удержание и двойное нажатие - товарищи попросили, им трудно было запомнить :)))))))))))))))))) и все это катается на первом велосипеде и delay без delay() . Я это написал к тому, что я знал чего хочу, брал кубики готового конструктора и складывал. А этот срач на 15 страниц образовался из-за того, что многие хотят дом, а сами даже не представляют что такое кирпич и чем его можно заменить.
Р.С. хватит цапаться и оффтопить , достало пустопорожнее словоизлияние, оставьте страничку для дела.
Р.Р.С. Мир вашему дому и этому топику :))))))))))))))))))))
Р.Р.Р.С был еще вариант с азбукой морзе на одной кнопке - это тоже вариант, только он состоит из кирпичей и не является кирпичом сам.
Гриша, ты всех запутал.
а, как же глас обладателей альтернативного мнения, готовых продать свою задницу за возможность одной кнопкой управлять Вселенной?
Я предлагаю стопе. Ибо оффтоп. библа приятна и очень полезна. Есть куча функционала которая она из коробки не поддерживает, но... какие-то плюшки можно и обсудить, но опять же не терки без существа.
в очередной раз поддержу ползателя форума под ником sirota:
- предлагайте кучу фунцикнала, который библиотека не поддерживает искаропки.
- предлагайте сделать более лучшим имеющийся.
Спасибо. О_О
https://klapautsiy.github.io
Спасибо! Есть одно пожелание для титанового велосипеда: переключатель логического уровня сигнала кнопки.
Так как кнопки могут как подтягивать сигнал к питанию, так и стягивать к земле, эта функция будет очень удобна для новичков и ленетяев.
RTFM
pullUp() - подтяжка пинов кнопок к Vcc
pullDn() - подтяжка пинов кнопок к GND
для увеличения помехозащищённости в режиме pullUp пины кнопок рекомендуется подключать
через резисторы 10KOm к Vcc
в режиме pullDn подключение пинов кнопок через резисторы 10KOm к GND обязательно
Спасибо за ответ! Разобрался благодаря вам, можно было бы оформить это так:
UPD: упустил из вида очевидное - надеюсь, пользателям ясно, что код титанового велосипеда работает одинаково хорошо для кнопок, у которых сигнал при нажатии подтягивается к питанию, и для тех, у которых он стягивается к земле.
Удачи! :)
Спасибо за ответ! Разобрался благодаря вам, можно было бы оформить это так:
нужно было бы послать тебя на Север. О_О
И за что нужно было бы послать меня на север, странный ты человек?
И за что нужно было бы послать меня на север, странный ты человек?
Я уверен, что ты, дорогой человек, встал сегодня не с той ноги.
Я ступил и признаю это. Ступил я после того, как в моем коде титановый велосипед не стал работать с подтяжкой на питание, но работал с подтяжкой на землю. После того, как я разобрался, я написал об этом с приставокой "можно было бы".
Но все это ни разу не повод посылать кого угодно на север, учти. Спасибо за код, он действительно хорош!
Ступил я после того, как в моем коде титановый велосипед не стал работать с подтяжкой на питание, но работал с подтяжкой на землю.
не ври - когда у кого-то что-то не работает: чел притаскивает нерабочий пример сюда и я ему помогаю разобраться.
ты же прочитал первую страницу темы и решил докопаться до гавна мамонта - версии велосипеда 0.0 2015-го года издания.
Извини, не хотел тебя обидеть. Кстати, я и не знал, что где-то на 15 страницах темы есть более совершенный код!
Извини, не хотел тебя обидеть. Кстати, я и не знал, что где-то на 15 страницах темы есть более совершенный код!
сайтик библиотеки "титановый велосипед для кнопки" находится здесь: https://klapautsiy.github.io
вопросы и хотелки писать сюда: https://github.com/Klapautsiy/titanium-bicycle-for-button/issues/new
Клапа, здоров! Слушай, можно твою библу прикрутить к сенсорным кнопкам тача? Чето с ходу не нашел. Типа передавать библиотеке аппаратное состояние кнопки, а дальше все как обычно.
где искал и где не нашёл?
типа меняешь digitalRead на тачRead в примере Click.ino и дальше всё, как обычно.
читал Readme , поюзал немного поиск по форуму, а про примеры то и забыл.
Ок, пасиб! должно получиться.
сделал сенсорные кнопки так. Может корявенько конечно исполнено, но функционирует пока отлично. Единственное, не смог нормально присваивать событие event_inactivity_Up(i) к конкретной кнопке (отрабатывает после отпускания любой из кнопок), но я этим не пользуюсь. Либо надо это всё манстырить не к Click.h , а к оболочке Button.h, но там нет в открытом доступе входа аппаратного состояния кнопок.
вообще, мне это странно - почему у тача нет своей библиотеки для кнопок с казино и шлюхами.
к Button.h ты ничего не прикрутишь - это оболочка для массива экземпляров Click.h аппаратно прикрученных к пинам.
Клапауций 567, спасибо за библиотеку.
вообще, мне это странно - почему у тача нет своей библиотеки для кнопок с казино и шлюхами.
к Button.h ты ничего не прикрутишь - это оболочка для массива экземпляров Click.h аппаратно прикрученных к пинам.
может и есть, но твои шлюхи на титановом велосипеде покруче будут)
может и есть, но твои шлюхи на титановом велосипеде покруче будут)
ок.
но, мне кажется, что достаточно было сделать in_Click.state_hard = SensButton_PRESSED; а всё отсальное не нужно.
хотя, возможно, просто тачкнопка шумит, поэтому тебе приходится её тупить. О_О
может и шумит, дисплей самый дешевый китайский а потому и вредный 2.4 McuFriend . Тут уже не до блекджека со шл... кое как вообще рабочую библиотеку нашел. Когда добавил эти 5мс все заработало отлично. Тоже не понял почему, но без задержки этой не работает. все остальное в качестве примера, вдруг кому пригодится. Наример при нажатии на кнопку она меняет цвет. Немного причесал код, сделал чтобы event_inactivity_Up(i) отрабатывало по конкретной кнопке, также можно это событие в целом после касания в любом месте тача получить.
меня отослали к вам на ветку...
сволочи... О_О
Клапочка, рафик неуиноат, всегда забываю, что нынче читать = писать.((((
Ребят подскажите пожалуйста как в этой библиотеке заново запускать timer неактивности.
Сам таймер у меня работает но тоько один раз через 30 секунд. А надо чтобы он срабатывал каждые 30 секунд.
Запускаю вот так:
Вот эта версия библиотеки.
Взять библиотеку новее.
А что разве в этой неполучится так сделать? Она меня вполне устраивает. Хотелось бы её и оставить.
Получится.
Подскажите как если не секрет .
Я думаю в 69 строке не устанавливать t в 0. И дальше start приравнивать к миллис.
Спасибо друг выручил!
Ребят подскажите пожалуйста как в этой библиотеке заново запускать timer неактивности.
отпустить кнопку. О_О
если нужно генерить события, то не калечить библиотеку, а юзать класс титановый велосипед для delay без delay().
Проверил, не работает по входам. Если задать 0 и 1 вход, работает, если другие входа, как в примере не работает. Поправь библиотеку (version 14.0).
у тебя три кнопки: t.button( 7, 8, 9); три кнопки - т.е. кнопка(0), кнопка(1), кнопка(2). ты же обращаешься к кнопкам не по индексам, а по номерам пинов: t.event_click_Up (7), t.event_click_Up (8)
о каких - 0 и 1 ты говоришь?
Клапочка, ты тут вроде большую стирку затеял, #568 не убирай, эт моя подписка на твою тему.
у тебя три кнопки: t.button( 7, 8, 9); три кнопки - т.е. кнопка(0), кнопка(1), кнопка(2). ты же обращаешься к кнопкам не по индексам, а по номерам пинов: t.event_click_Up (7), t.event_click_Up (8)
о каких - 0 и 1 ты говоришь?
Если в скетче заменить 7, 8 на 0, 1 (где 0, 1 - пины), то работает нормально, если меняем на любые другие пины, в примере 7 и 8, то не работает. Или я неправильно, что то делаю?
Клапочка, ты тут вроде большую стирку затеял, #568 не убирай, эт моя подписка на твою тему.
шедевральные посты остаются... их мало, поэтому - будут.
Если в скетче заменить 7, 8 на 0, 1 (где 0, 1 - пины), то работает нормально, если меняем на любые другие пины, в примере 7 и 8, то не работает. Или я неправильно, что то делаю?
ты передал в настройках пины кнопок один раз: t.button( 7, 8, 9);
дальше в скетче не номера пинов фигурируют, а индексы в порядке их перечисления в настройках t.button(..., ..., ...); начиная с 0 - т.е. 0, 1, 2.
*в скетче исправь t.event_click_Up (7), t.event_click_Up (8), t.event_click_Up (9)на t.event_click_Up (0), t.event_click_Up (1), t.event_click_Up (2).
Тупанул, все заработало!
Еще вопрос, можно в библиатеку добавить, при длительном удержании, происходило тактирование кнопки, как в скетче. Пример работы, если нажимаем длительностью меньше, чем длительное удержания, кнопка нажимается 1 раз, если больше то нажимается через время циклически (допустим 250мс) пока кнопка нажата.
Еще вопрос, можно в библиатеку добавить, при длительном удержании, происходило тактирование кнопки, как в скетче. Пример работы, если нажимаем длительностью меньше, чем длительное удержания, кнопка нажимается 1 раз, если больше то нажимается через время циклически (допустим 250мс) пока кнопка нажата.
я понял - что бы как в клаве компьютера было.
не знаю - меня тут один и так критикует, что класс жрёт оперативку.
сделать можно, но если тебе нужно срочно, то прикрути уже готовое
класс титановый велосипед для delay без delay(). - запускай ега кнопками.
Получилось сделать (для примера), 7 и 9 пины увеличивают значение 8 уменьшает.
Подскажите, как можно вынести скетч в процедуру? Допустим, нужно менять несколько значений с разными диапазонами. Например значения Hz0, Hz1, Hz2, Hz3, Hz4,..., от нижнего диапазона Hzn0, Hzn1, Hzn2, Hzn3, Hzn4,..., до верхнего диапазона Hzb0, Hzb1, Hzb2, Hzb3, Hzb4,... Вызывая Процедуру (Hz0), меняем значение Hz0 и т.д. Сами значения и диапазоны хранятся в массиве.
Или хотябы сделать в библиотеки так, что бы событие длинного нажатия кнопки висело до события отпускания кнопки, скетч был бы поменьше, убрал бы флаги.
t.event_inactivity_Up(0) == 1) {} - событие неактивности ненажатой кнопки, как я понял, это для кажной кнопка?
И еще хотелка, if (t.event_inactivity_Up() == 1) {} - что бы это событие было для всех кнопок, срабатывало от последнего нажатия любой кнопки. Будет удобно выходить в основное меню, если в подменю не нажимались длительное время кнопки.
Подскажите, как можно вынести скетч в процедуру? Допустим, нужно менять несколько значений с разными диапазонами. Например значения Hz0, Hz1, Hz2, Hz3, Hz4,..., от нижнего диапазона Hzn0, Hzn1, Hzn2, Hzn3, Hzn4,..., до верхнего диапазона Hzb0, Hzb1, Hzb2, Hzb3, Hzb4,... Вызывая Процедуру (Hzn0), меняем значение Hzn0 и т.д. Сами значения и диапазоны хранятся в массиве.
я не понял, что ты хотел сказать.
Или хотябы сделать в библиотеки так, что бы событие длинного нажатия кнопки висело до события отпускания кнопки, скетч был бы поменьше.
событие от состояния именно тем и отличается, что имеет параметр "время события", но не имеет параметра "продолжительность" - поэтому, "висеть" не может. объявляй переменные-флаги и рули ими переменными класса. взводи флаг длинным нажатием и сбрасывай отпусканием. О_О
t.event_inactivity_Up(0) == 1) {} - событие неактивности ненажатой кнопки, как я понял, это для кажной кнопка?
все переменные экземпляров класса для каждой кнопки абсолютно независимы друг от друга и друг на друга не влияют, если ты это не прописал в теле скетча.
И еще хотелка, if (t.event_inactivity_Up() == 1) {} - что бы это событие было для всех кнопок, срабатывало от последнего нажатия любой кнопки. Будет удобно выходить в основное меню, если в подменю не нажимались длительное время кнопки.
так, что ли?
проверь, если работает, то я не понимаю, зачем это пихать в класс.
Понятно (про длительное нажатие), придется все делать через флаги (как в скетче). Просто можно было бы упростить жизнь. ))
Для сброса таймера для перехода из подменю на основно экран меню, достатачно такой строчки.
if
(test.event_click_Up () == 1) {тут сбрасываем таймер}
После любой отжатой кнопки таймер будет сбрасывается. Отличная библиотека!
Едиственное, много ест памяти. Например, если нам нужно изменять порядка 7 значений, на это нужно уже порядка 7,5 кбайт.
Понятно (про длительное нажатие), придется все делать через флаги (как в скетче). Просто можно было бы упростить жизнь. ))
ну, впиши это в файл Button.h - жизнь упростится. кнопка "Fork" на https://github.com/Klapautsiy/titanium-bicycle-for-button и пиши, шо захочется.
Для сброса таймера для перехода из подменю на основно экран меню, достатачно такой строчки.
if
(test.event_click_Up () == 1) {тут сбрасываем таймер}
отлично - ты в курсе, что тебе нужно сделать.
Переделал скетч под измененную библиотеку.
Клапауций 555 посмотри, так будет работать библиотека, может чего лишнего добавил?
Выше скетч под эту библиотеку.