class multiKey//создадим класс кнопок
{public://общие функции и переменные
//конструктор класса
multiKey(byte pin,byte state,byte val);
byte read();//функция обработчика нажатий
private://личные переменные и функции класса
//локальные переменные обьекта номер пина/тип сигнала/количество кликов
byte _pin,_state,_val;
uint32_t start_press;//переменная времени нажатия кнопки
uint32_t pressTime;//переменная длительности нажатия кнопки
uint32_t double_press;//переменная времени между нажатиями
boolean pressFlag;//переменная флага нажатия
byte press_one;//переменная количества нажатий
//переменные состояния/временного состояния/нажатия кнопки
byte num,_num,button;
};
byte multiKey::read(){
!_state?button=digitalRead(_pin):button=!digitalRead(_pin);//в зависимости от того, что в конструкторе настраиваем кнопку
if(!button){num=0;}//если кнопка отпущена, выдаем результат 0
if(button&&!pressFlag)//если кнопка нажата и флаг опущен
{pressTime=millis()-start_press;//считаем время нажатия кнопки
if(pressTime>=1500){//если длительность нажатия больше 1,5 сек
pressFlag=1;//поднимаем флаг
num=255;//значение кнопки long
pressTime=0;//сбрасываем длительность нажатия
} }
if(!button){//если кнопка отпущена
start_press=millis();//сбрасываем время нажатия
pressFlag=0;//опускаем флаг
}
if(!button&&!pressFlag){//если кнопка и флаг отпущены
if(pressTime>50&&pressTime<1500)//а время нажатия больше 50мс, но меньше 1,5сек
{press_one++;//увеличиваем счетчик количества нажатий
if(press_one>_val)press_one=_val;//ограничиваем значение счетчика
pressTime=0;//сбрасываем длительность нажатия
double_press=millis();//запускаем таймер ожидания следующего нажатия
}}
if(press_one){//если было короткое нажатие
if(millis()-double_press>=300){//ждем 0,3сек
pressTime=0;//сбрасываем длительность нажатия
num=press_one;//значение кнопки приравниваем к количеству нажатий
press_one=0;//сбрасываем количество нажатий
}}
_num=num;//для одиночного вывода результата, используем временную переменную
num=0;//обнудяем основную переменную значения кнопки
return _num;//возвращаем значение кнопки
}
//функция конструктора класса
/*в конструкторе указываем:
номер пина
тип сигнала (лог0/лог1)
максимальное количество отслеживаемых кликов*/
multiKey::multiKey(byte pin,byte state,byte val)
{_pin = pin;//передаем внутренней переменной номер пина
//!state?_state=2:_state=0;//в зависимости от выбранного типа сигнала меняем значение переменной
_state=state;
_val=val;//передаем внутренней переменной количество кликов
pinMode(pin,_state);//конфигурируем пин согласно типа сигнала
}
boolean led1,led2;
multiKey myBtn(9,0,2);
void setup(){
pinMode(11,1);
pinMode(13,1);
}
void loop(){
byte btn_state=myBtn.read();
switch(btn_state){
case 0:break;
case 1: led1=!led1;digitalWrite(11,led1);break;
case 2: led2=!led2;digitalWrite(13,led2);break;
case 255: break;
}
}
А у меня уже готовый есть. Без SD-карты, на количество DS-ок и реле пока ног хватит на МК. Состояния релюшек сохраняются в EEPROM. Но не за 500р, естественно.
Дык ему еще четыре винды надо установить, чтобы покушать и потом с тобой рассчитаться.)))) Мизантроп ты, аднака, не веришь - "в души прекрасные порывы".))))
Ну как это на ноль. У тебя выделяется переменная, которая требует инициализации. А дефайн позволяет сразу зарядить константу в стек или регистр. Правда у меня это тянется ещё с пиков, там точно оптимизация компилятора делала код с дефайнами меньше.
А вдруг ему нужно , что бы компилятор знал какого именно типа переменная у него указывает на номер пина ? :-)
Ну или вдруг надо будет ему номера пинов в указатели запихать.
Как привык, так и пишет.
Мне вот тоже дефайнами удобнее.
Особенно учитывая, что их подсвечивает другим цветом редактор.
Но тут то ему указатели не нужны. А какого типа переменная и так компилятору понятно. Ну а если хочется экстремизма, никто не мешает указать тип явно в дефайне, бумага все стерпит.
Ну как это на ноль. У тебя выделяется переменная, которая требует инициализации.
#pragma GCC optimize ("O0")
//#define USE_DEFINE
/*
USE_DEFINE:
Sketch uses 1,184 bytes (3%) of program storage space. Maximum is 32,256 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2,039 bytes for local variables. Maximum is 2,048 bytes.
//USE_DEFINE:
Sketch uses 1,184 bytes (3%) of program storage space. Maximum is 32,256 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2,039 bytes for local variables. Maximum is 2,048 bytes.
*/
#if defined(USE_DEFINE)
#define ledPin 13
#else
uint8_t const ledPin = 13;
#endif
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, !digitalRead(ledPin));
delay(1000);
}
Ну что, мы таки вновь имеем подтверждение того, что, 90% пробегающих и забегающих преследуют одну лишь цель - решить сиюминутную проблему. А раз проблема решена - можно свалить без всяких зазрений совести. До следующего раза.
Ну так я тоже далеко не грузчик , гик , хорошую сборку винды могу поставить и настроить все за 300-500 рубасов. Интересно а если нужно большую программу написать , вы будете 50к брать с человека?
Читаю я и ох...уваю. Больше никак не выразишься. "гик" - звучит же... ))
Отошол на неделю, а тут такое без меня происходит.
Ну если на то брать то можно и планку поставить 5к за 50 строчек , может кто в ресторан каждый день ходит. Просто это наглежь, брали бы пропорцию обьем/деньги таких бы цен не было.
Ну, вообще-то такие расценки были. Где-то году в 1985 одна строка кода стоила $12. С учетом инфляции на сегодняшний день это будет примерно $30 за строку.
Сколько там у Вас кода? 50 строк? $1500 платить готовы?
PS. Цифры взяты не с потолка, а из известной книги Брукса - классика в этой области.
PPS. Именно этот самый Брукс как раз в 1985 году показал, что "пропорция объем/деньги" не может отразить реальной стоимости работы в IT-индустрии.
PPPS. Вы тут что-то говорили о большой программе за 50к? Даже если имеются в виду $50к, для большой программы - это просто смешно.
PPPPS. Вы писали, за сколько Вы ставите прошивку или Винду. Наводящий вопрос: а прошивку или Винду Вы сами писали? Мне кажется, Вы принципиально не хотите платить за работу программиста, поэтому и озвучиваете цифры порядка 200р за 100 строк. Напишите 100 строк и, так их быть, я Вам их за 200 рублей прошью.
А нафиг лицензию ставить когда там дохрена шлака который нафиг не нужен?? Только систему тормозит которая может работать быстрее в 2 а то и в 3 раза!! Миллион программ в автозапуска! Зато 1 раз настроил хорошо и работает пока либо ты её сам не поломаешь или жёсткий диск не откажет. Нафиг лицензию ? Когда все оде самое может работать лучше но за бесплатно? Просто платишь за работу и настройку!
Вам сколько лет?
Вот когда в организации крупной поработаете и увидите как из сборок г.... нифига нормальные проги не работаю - посмотрим как поменяется мнение ;)
Ок! Спасибо
Дед зря ты это... таких учить надо, если его жизнь не учит.
да няхай. Он тут мошт первый и последний раз.
Так и есть , мне понадобился всего один макет и не более
Как то так
Ребята, Нужно доработать скетч описанный на
http://tehnopage.ru/ethernet-arduino-control
Доработки:
1. убрать датчики температуры, влажности, дыма
2. подключить к четырём отдельным пинам 4 датчика температуры DS18B20.
3. оставить управления 4 реле.
за какую цену согласны доработать?
1000р
kakmycmail@gmail.com
1500 р
А у меня уже готовый есть. Без SD-карты, на количество DS-ок и реле пока ног хватит на МК. Состояния релюшек сохраняются в EEPROM. Но не за 500р, естественно.
wrk.sadman@gmail.com
Как и ожидалось, ТС ищез с концами. :)
Как и ожидалось, ТС ищез с концами. :)
Дык ему еще четыре винды надо установить, чтобы покушать и потом с тобой рассчитаться.)))) Мизантроп ты, аднака, не веришь - "в души прекрасные порывы".))))
Мизантроп ты, аднака, не веришь - "в души прекрасные порывы".))))
Мои розовые очки пошли трещинами уже примерно 35 лет назад. А к 30-ти годам вапще раскололись нахрен.
Дед, а почему ноги у тебя не дефайнами назначены? Это экономит память :)
На скока? На 0 байт?
На скока? На 0 байт?
Ну как это на ноль. У тебя выделяется переменная, которая требует инициализации. А дефайн позволяет сразу зарядить константу в стек или регистр. Правда у меня это тянется ещё с пиков, там точно оптимизация компилятора делала код с дефайнами меньше.
А вдруг ему нужно , что бы компилятор знал какого именно типа переменная у него указывает на номер пина ? :-)
Ну или вдруг надо будет ему номера пинов в указатели запихать.
Как привык, так и пишет.
Мне вот тоже дефайнами удобнее.
Особенно учитывая, что их подсвечивает другим цветом редактор.
замена на дефайны в коде Деда в 1.8.9, "из кАропки", дает экономию в НОЛЬ байт!
не?
Но тут то ему указатели не нужны. А какого типа переменная и так компилятору понятно. Ну а если хочется экстремизма, никто не мешает указать тип явно в дефайне, бумага все стерпит.
замена на дефайны в коде Деда в 1.8.9, "из кАропки", дает экономию в НОЛЬ байт!
Умный компилятор, но не системный подход :) Это лишний раз указывает, что нужно было юзать дефайны:)
На скока? На 0 байт?
Ну как это на ноль. У тебя выделяется переменная....
Эммм... Мне очень стыдно такое спрашивать, но ответьте мне, мы одни с котом там const видим?
Я, чеснаговоря, думал, что в 2019-м дефайны с константами только у Onkel-я остались в его чесном-пречесном. А тута вон чо....
Нада напица.
Ой..... Уж и потрындеть низя :) ф телефоне все так мелко.... А бесконечное вискикола на лежаке притупляют нюх.
на лежак надо планшет брать. Я вот могу всё пропить, но не планшет. Полезная штучка.
я ищезаю до понедельника. В Н-ске наступает время вечерних Битлов.
я ищезаю до понедельника. В Н-ске наступает время вечерних Битлов.
..но случилась со мною история,
я купил радиолу Эстония,
и в свободный часок, на полчасика,
я прилег позабавиться классикой.
================
;)))
Вот. А у мня кот прилёг классикой позабавица. А я поливать пашол. :)
я ищезаю до понедельника. В Н-ске наступает время вечерних Битлов.
Так Битлы это ж попса! Их только школьники слушают, и то, в своё время.)
я школьнег 80-х, я слушаю. В своё время.
Не, ну если только поностальгировать, поассоциировать... Это да.)
Как и ожидалось, ТС ищез с концами. :)
Ну что, мы таки вновь имеем подтверждение того, что, 90% пробегающих и забегающих преследуют одну лишь цель - решить сиюминутную проблему. А раз проблема решена - можно свалить без всяких зазрений совести. До следующего раза.
Народ разный. Кому и сверху не жалко, а кто и за копейку дрожит. Последних большинство.( Надурил и возрадовался.(
Читаю я и ох...уваю. Больше никак не выразишься. "гик" - звучит же... ))
Отошол на неделю, а тут такое без меня происходит.
Да на личном опыте основано:
Кто то из заказчиков за копейку всю душу готов вытрясти, а другой за указанный минимум доплачивает сверху вдвое.
Используй Gyver button.h
Ну, вообще-то такие расценки были. Где-то году в 1985 одна строка кода стоила $12. С учетом инфляции на сегодняшний день это будет примерно $30 за строку.
Сколько там у Вас кода? 50 строк? $1500 платить готовы?
PS. Цифры взяты не с потолка, а из известной книги Брукса - классика в этой области.
PPS. Именно этот самый Брукс как раз в 1985 году показал, что "пропорция объем/деньги" не может отразить реальной стоимости работы в IT-индустрии.
PPPS. Вы тут что-то говорили о большой программе за 50к? Даже если имеются в виду $50к, для большой программы - это просто смешно.
PPPPS. Вы писали, за сколько Вы ставите прошивку или Винду. Наводящий вопрос: а прошивку или Винду Вы сами писали? Мне кажется, Вы принципиально не хотите платить за работу программиста, поэтому и озвучиваете цифры порядка 200р за 100 строк. Напишите 100 строк и, так их быть, я Вам их за 200 рублей прошью.
Вам сколько лет?
Вот когда в организации крупной поработаете и увидите как из сборок г.... нифига нормальные проги не работаю - посмотрим как поменяется мнение ;)
во во, мы то корпоративные лицензии покупаем )))