С одной стороны согласен, но надо же думать и о дальнейшем использовании устройства, апгрейдить, добавлять что то новое, добовлять добавлять расширять. А не сделал его по расчетам и точка на этом. Это называется конечным продуктом без улучшений.
Nayn, это Ваш последний проект в жизни?
Определитесь с ресурсами и доведите этот проект до конца.
Есть пословица: "Первый блин - комом".
У Вас выбор между:
1. Сделать текущий проект, поработать с ним выявить недостатки, которые будут устранены в следующем проекте.
2. Препираться на форуме в поисках недостижимого совершенства (никакой проект при этом сделан не будет).
Я вообще не понимаю, зачем Вы сейчас пишете на форум.
Мне кажется, для Вас наиболее полезным было бы внимательно перечитать все, что было написано в этой теме, найти и осмыслить полезные советы и наводящие вопросы ("посему 4 байта на строку?" так и остался без ответа), а их было немало. Обдумать, что можно сделать и попробовать это сделать на Ардуине. А огрызаться на форуме - дело абсолютно бесполезное.
Так что совет: ближайшие 2-3 дня на форум не пишите, а внимательно читайте уже написанное и пытайтесь воплотить это на Ардуине.
Определитесь с ресурсами и доведите этот проект до конца.
Есть пословица: "Первый блин - комом".
У Вас выбор между:
1. Сделать текущий проект, поработать с ним выявить недостатки, которые будут устранены в следующем проекте.
2. Препираться на форуме в поисках недостижимого совершенства (никакой проект при этом сделан не будет).
1. Изначально делал проект на Атмега328, добавлял функциональность, не хватило памяти. Открылся вопрос либо использовать внешнюю память или Атмега2560. (Не важно как написан код, оптимизация дело последнее, всегда так было и будет. Первый блин комом)
2. Это вообще лишнее. Чисто людям хотелось себя возвысить и пообщаться с новичком. От сюда оффтоп.
P.S> Ответ очевиден. К моему проекту на Atmega328 не достаточно вместить количество мелодий, которые хочу добавить. Тема закрыта.
Пойду 2-3 дня потрачу на проект, который смогу улучшить. А писать на форуме буду по возможности...
Ппц ТС, у тебя с чайником проблемы ?
Тебе уже описали способ как впихнуть "твое невпихуемое".
Ты бы хоть почитал, о том, что такое PROGMEM.
Посмотрел , что такое массив, узнал как значения в функции передавать.
Примеры поискал.
Конкретно это помогло бы сократить размер кода в несколько раз. А если разбирать каждую мелодию отдельно(а там встречается куча подобных отрезков), то вообще ужать можно чуть не в ноль.
Кактус - пусть варится в своем соку. Он с такими "знаниями" много не напишет, небось завтра же придет на форум снова код клянчить... вот тогда и повеселимся :)))
Нет, есть посильнее ))) Беллатрикс Звезда второй величины, имеет природу Меркурия и Марса. Связана с Марсом, Плутоном и Ураном. Звезда войны, насилия, жестокости, хаоса, крушения, превращения всего в пыль. Она стремится стереть всё в порошок, разрушить. Сильно выраженная Беллатрикс в гороскопе даёт человека, который не может сидеть на месте, которого вечно тянет ругаться, скандалить, просто делать всё, что угодно, всем назло. С Луной - рождаются буйно помешанные. С Венерой - опасность изнасилований (справедливо и для мужчин). У Гитлера она была в соединении с Лилит, и это во многом определило его преступные наклонности.
Название звезды - "Амазонка" - указывает на ее марсианскую природу. Кроме того, она проводит влияние меркурианского характера. Отсюда характерные черты которые она проецирует: быстрое принятие решений, смелая и энергичная реализация планов и замыслов, воинственный дух, стратегический талант, организаторские способности, проницательность, но дает также и этаких бесшабашных воинственных смельчаков.
- ̶Т̶е̶м̶а̶ ̶с̶и̶с̶е̶к̶ ̶н̶е̶ ̶р̶а̶с̶к̶р̶ы̶т̶а̶ Нет защиты от дребезга
- Срабатывание кнопки по отпусканию далеко не всегда подходит
- Таймауты бы в дефайны вынести. А лучше и вообще сделать настраиваемыми
Предложения по оптимизации:
Можно махом урезать осетра на 6 байта на кнопку если хранить time stamps в uint16_t
- ̶Т̶е̶м̶а̶ ̶с̶и̶с̶е̶к̶ ̶н̶е̶ ̶р̶а̶с̶к̶р̶ы̶т̶а̶ Нет защиты от дребезга
- Срабатывание кнопки по отпусканию далеко не всегда подходит
- Таймауты бы в дефайны вынести. А лучше и вообще сделать настраиваемыми
Предложения по оптимизации:
Можно махом урезать осетра на 6 байта на кнопку если хранить time stamps в uint16_t
1. Защита от дребезга есть см. стр#21 в *.срр
2. Мне до сих пор подходило.
В конце концов, никто не запрещает параллельно использовать стандартный digitalRead()
3. Не считаю, что тайматы нужно дергать извне.
Можно и внутри библиотеки поправить если приспичило.
4. Код писал давно,как уже было сказано, через 3 месяца знакомства с дуриной.
Даже не задумывался тогда(да и сейчас) о том,что вполне можно миллисы писать в таких местах в uint16_t. Спасибо, это по делу было
Даже не задумывался тогда(да и сейчас) о том,что вполне можно миллисы писать в таких местах в uint16_t. Спасибо, это по делу было ЗЫ: поправил по замечаниям
Пожалуйста. Только если для time stamps использовать uint16_t то надо в начале kakmyc_btn::read() добавить
Больше кнопок хороших и разных
я один файлик добавил, чтобы пример из IDE открывался
library.properties
name=kakmyc Button
version=1.0.0
author=kakmyc, kakmyc, <kakmycmail@gmail.com>
maintainer=kakmyc, kakmyc, <kakmycmail@gmail.com>
sentence=Button
paragraph=This library allows you to work with various buttons.
category=Other
url=https://github.com/kakmyc-github/kakmyc_btn
architectures=avr
Даже не задумывался тогда(да и сейчас) о том,что вполне можно миллисы писать в таких местах в uint16_t. Спасибо, это по делу было ЗЫ: поправил по замечаниям
Пожалуйста. Только если для time stamps использовать uint16_t то надо в начале kakmyc_btn::read() добавить
uint16_t currentTime = millis() & 0xFFFF;
И дальше его везде использовать вместо millis
В "& 0xFFFF"; нет надобности. Мало того, компилятор его "с оптимизирует", что легко по размеру кода отследить.
А uint16_t currentTime = millis(); вполне годно. Даже uint8_tгодно для коротких интервалов, но надо помнить что компилятор приводит к int при вычитании, потому if(byte(t-OldTime)<PERIOD)
Для 1,5 сек конечно. Но правда есть такой подход. На uint8_t делаем короткий интервал, например 100мс. А все остальные уже через него меряем. Тогда 1,5сек - это 15 "тиков" по 100мс. И тоже на одном байте. Удобно если много интервалов нужно. При этом снижается точность, но longpress с точностью 1мс и не нужен.
Для 1,5 сек конечно. Но правда есть такой подход. На uint8_t делаем короткий интервал, например 100мс. А все остальные уже через него меряем. Тогда 1,5сек - это 15 "тиков" по 100мс. И тоже на одном байте. Удобно если много интервалов нужно.
А смысл ?
Если ещё байт нужен для подсчёта тиков .
Смысл в удобстве для нескольких интервалов. Пусть переменную N установили по событию в 0. И каждые 100мс инкрементим. Потом проверяем, при N==10 выполняем функцию 1, при N==20 выполняем функцию 2 и т.д. .... при N==50 выполняем функцию 5 и снова устанавливаем в 0. Так по кругу. Это то что топикстартер хотел.
Аналогично для кнопки, на одной переменной и время для дребезга и для longpress получаем. А если шототипа if(N&3==0)... то и для событий раз в 400мс по удержанию кнопки сделаем.
Для 1,5 сек конечно. Но правда есть такой подход. На uint8_t делаем короткий интервал, например 100мс. А все остальные уже через него меряем. Тогда 1,5сек - это 15 "тиков" по 100мс. И тоже на одном байте. Удобно если много интервалов нужно. При этом снижается точность, но longpress с точностью 1мс и не нужен.
Да. Годно, если степени двойки устроят. Но я как то для времени в районе секунды больше степени десятки привык. 1,024сек ну совсем не нравится. Наверно влияние RTC. А на самом деле - ну что плохого если longpress 1,536сек вместо 1,5сек. Пофиг в общем.
Да. Годно, если степени двойки устроят. Но я как то для времени в районе секунды больше степени десятки привык. 1,024сек ну совсем не нравится. Наверно влияние RTC. А на самом деле - ну что плохого если longpress 1,536сек вместо 1,5сек. Пофиг в общем.
Целочисленное деление - самая тяжелая операция, хуже плавающей точки. Поэтому, если полторы секунды просто не влезают в байт, лучше просто подобрать масштабный множитель (степень двойки), чтобы влезало.
Задумчиво просмотрел сообщения... andriano, где деления? Причем они тут?
На всяк случай собрал из кусков подобие кода
uint8_t t;
static uint8_t OldTime;
static uint8_t N;
#define PERIOD 100
t=millis();
if(byte(t-OldTime)>PERIOD)
{
OldTime += PERIOD; //здесь через каждые 100 миллисекунд в среднем
N++;
switch(N)
{
case 10: //здесь через секунду
case 20: //здесь через 2 секунды
.....
case 50: N=0;//здесь через 5 секунд и по кругу
}
digitalWrite(13, N & 4); //здесь мигаем светодиодом
}
еще как будут , у нас в группе через день обсасываются некоторые проблеммы (одни и те же) и прилетает вопрос помогите не могу найти , даже ленту не листают
С одной стороны согласен, но надо же думать и о дальнейшем использовании устройства, апгрейдить, добавлять что то новое, добовлять добавлять расширять. А не сделал его по расчетам и точка на этом. Это называется конечным продуктом без улучшений.
Определитесь с ресурсами и доведите этот проект до конца.
Есть пословица: "Первый блин - комом".
У Вас выбор между:
1. Сделать текущий проект, поработать с ним выявить недостатки, которые будут устранены в следующем проекте.
2. Препираться на форуме в поисках недостижимого совершенства (никакой проект при этом сделан не будет).
Я вообще не понимаю, зачем Вы сейчас пишете на форум.
Мне кажется, для Вас наиболее полезным было бы внимательно перечитать все, что было написано в этой теме, найти и осмыслить полезные советы и наводящие вопросы ("посему 4 байта на строку?" так и остался без ответа), а их было немало. Обдумать, что можно сделать и попробовать это сделать на Ардуине. А огрызаться на форуме - дело абсолютно бесполезное.
Так что совет: ближайшие 2-3 дня на форум не пишите, а внимательно читайте уже написанное и пытайтесь воплотить это на Ардуине.
Вот что бывает, когда ленивого халявщика, пришедшего за кодом - не посылают сразу...
Определитесь с ресурсами и доведите этот проект до конца.
Есть пословица: "Первый блин - комом".
У Вас выбор между:
1. Сделать текущий проект, поработать с ним выявить недостатки, которые будут устранены в следующем проекте.
2. Препираться на форуме в поисках недостижимого совершенства (никакой проект при этом сделан не будет).
1. Изначально делал проект на Атмега328, добавлял функциональность, не хватило памяти. Открылся вопрос либо использовать внешнюю память или Атмега2560. (Не важно как написан код, оптимизация дело последнее, всегда так было и будет. Первый блин комом)
2. Это вообще лишнее. Чисто людям хотелось себя возвысить и пообщаться с новичком. От сюда оффтоп.
P.S> Ответ очевиден. К моему проекту на Atmega328 не достаточно вместить количество мелодий, которые хочу добавить. Тема закрыта.
Пойду 2-3 дня потрачу на проект, который смогу улучшить. А писать на форуме буду по возможности...
Спасибо всем кто реально помог с кодом, написал пару строк для новичка.
А те кто посылает и обзывается. Идите к черту, он вас поймет и примет как родную душу!
Бестолковые людишки...
И тут начинается смех - хахахахаха. :)
Цитата: Кому то хлеб, кому то грязь, каждый поделит между собой...
До встречи!
Ппц ТС, у тебя с чайником проблемы ?
Тебе уже описали способ как впихнуть "твое невпихуемое".
Ты бы хоть почитал, о том, что такое PROGMEM.
Посмотрел , что такое массив, узнал как значения в функции передавать.
Примеры поискал.
Конкретно это помогло бы сократить размер кода в несколько раз. А если разбирать каждую мелодию отдельно(а там встречается куча подобных отрезков), то вообще ужать можно чуть не в ноль.
Несомненно :)
Кактус - пусть варится в своем соку. Он с такими "знаниями" много не напишет, небось завтра же придет на форум снова код клянчить... вот тогда и повеселимся :)))
так поделись, сам то я за четыре года только светодиодиком помаргать могу
Нате, мне не жалко.
Претензии а-ля "не работаит","не понимаю" не принимаются, писалось для себя.
https://github.com/kakmyc-github/kakmyc_btn
Седня какой-то день особоый. что ли?
На Амперке человек требует прошивку для Уно под кварц 1 ГГц. Что за ардуины слабые делают, одному нубу памяти не хвататет. другому - скорости :)))
А вот он и сюда пришел
http://arduino.ru/forum/obshchii/nuzhna-proshivka-dlya-mk-arduino-nestandartnaya-zagruzchik
Седня какой-то день особоый. что ли?
На Амперке человек требует прошивку для Уно под кварц 1 ГГц. Что за ардуины слабые делают, одному нубу памяти не хвататет. другому - скорости :)))
А вот он и сюда пришел
http://arduino.ru/forum/obshchii/nuzhna-proshivka-dlya-mk-arduino-nestandartnaya-zagruzchik
Это все ретроградный Меркурий :-)
Седня какой-то день особоый. что ли?
На Амперке человек требует прошивку для Уно под кварц 1 ГГц. Что за ардуины слабые делают, одному нубу памяти не хвататет. другому - скорости :)))
А вот он и сюда пришел
http://arduino.ru/forum/obshchii/nuzhna-proshivka-dlya-mk-arduino-nestandartnaya-zagruzchik
Нет, есть посильнее )))
Беллатрикс Звезда второй величины, имеет природу Меркурия и Марса. Связана с Марсом, Плутоном и Ураном. Звезда войны, насилия, жестокости, хаоса, крушения, превращения всего в пыль. Она стремится стереть всё в порошок, разрушить. Сильно выраженная Беллатрикс в гороскопе даёт человека, который не может сидеть на месте, которого вечно тянет ругаться, скандалить, просто делать всё, что угодно, всем назло. С Луной - рождаются буйно помешанные. С Венерой - опасность изнасилований (справедливо и для мужчин). У Гитлера она была в соединении с Лилит, и это во многом определило его преступные наклонности.
Название звезды - "Амазонка" - указывает на ее марсианскую природу. Кроме того, она проводит влияние меркурианского характера. Отсюда характерные черты которые она проецирует: быстрое принятие решений, смелая и энергичная реализация планов и замыслов, воинственный дух, стратегический талант, организаторские способности, проницательность, но дает также и этаких бесшабашных воинственных смельчаков.
так поделись, сам то я за четыре года только светодиодиком помаргать могу
поставил на квоновской 9050/369 на на твоей 8902 /367, длину долгого нажатия уменьшил до 1200, но даже это еще многовато
так поделись, сам то я за четыре года только светодиодиком помаргать могу
Претензий нет. Есть замечания :
- ̶Т̶е̶м̶а̶ ̶с̶и̶с̶е̶к̶ ̶н̶е̶ ̶р̶а̶с̶к̶р̶ы̶т̶а̶ Нет защиты от дребезга
- Срабатывание кнопки по отпусканию далеко не всегда подходит
- Таймауты бы в дефайны вынести. А лучше и вообще сделать настраиваемыми
Предложения по оптимизации:
Можно махом урезать осетра на 6 байта на кнопку если хранить time stamps в uint16_t
Претензий нет. Есть замечания :
- ̶Т̶е̶м̶а̶ ̶с̶и̶с̶е̶к̶ ̶н̶е̶ ̶р̶а̶с̶к̶р̶ы̶т̶а̶ Нет защиты от дребезга
- Срабатывание кнопки по отпусканию далеко не всегда подходит
- Таймауты бы в дефайны вынести. А лучше и вообще сделать настраиваемыми
Предложения по оптимизации:
Можно махом урезать осетра на 6 байта на кнопку если хранить time stamps в uint16_t
1. Защита от дребезга есть см. стр#21 в *.срр
2. Мне до сих пор подходило.
В конце концов, никто не запрещает параллельно использовать стандартный digitalRead()
3. Не считаю, что тайматы нужно дергать извне.
Можно и внутри библиотеки поправить если приспичило.
4. Код писал давно,как уже было сказано, через 3 месяца знакомства с дуриной.
Даже не задумывался тогда(да и сейчас) о том,что вполне можно миллисы писать в таких местах в uint16_t. Спасибо, это по делу было
ЗЫ: поправил по замечаниям
1. Защита от дребезга есть см. стр#21 в *.срр м
По нажатию есть, а по отпусканию? В результае при подстчете многократных нажатий могут происходить сбои.
вот я нажимал по 5 раз подряд с одинаковой скоростью (ну кнопка реально плохая, я ее специально для тестов использую)
Пожалуйста. Только если для time stamps использовать uint16_t то надо в начале kakmyc_btn::read() добавить
uint16_t currentTime = millis() & 0xFFFF;
И дальше его везде использовать вместо millis
Больше кнопок хороших и разных
я один файлик добавил, чтобы пример из IDE открывался
library.properties
Пожалуйста. Только если для time stamps использовать uint16_t то надо в начале kakmyc_btn::read() добавить
uint16_t currentTime = millis() & 0xFFFF;
И дальше его везде использовать вместо millis
В "& 0xFFFF"; нет надобности. Мало того, компилятор его "с оптимизирует", что легко по размеру кода отследить.
А uint16_t currentTime = millis(); вполне годно. Даже uint8_t годно для коротких интервалов, но надо помнить что компилятор приводит к int при вычитании, потому if(byte(t-OldTime)<PERIOD)
Не uint8_t не вариант.
Там longpress 1,5сек
Для 1,5 сек конечно. Но правда есть такой подход. На uint8_t делаем короткий интервал, например 100мс. А все остальные уже через него меряем. Тогда 1,5сек - это 15 "тиков" по 100мс. И тоже на одном байте. Удобно если много интервалов нужно. При этом снижается точность, но longpress с точностью 1мс и не нужен.
Для 1,5 сек конечно. Но правда есть такой подход. На uint8_t делаем короткий интервал, например 100мс. А все остальные уже через него меряем. Тогда 1,5сек - это 15 "тиков" по 100мс. И тоже на одном байте. Удобно если много интервалов нужно.
А смысл ?
Если ещё байт нужен для подсчёта тиков .
Смысл в удобстве для нескольких интервалов. Пусть переменную N установили по событию в 0. И каждые 100мс инкрементим. Потом проверяем, при N==10 выполняем функцию 1, при N==20 выполняем функцию 2 и т.д. .... при N==50 выполняем функцию 5 и снова устанавливаем в 0. Так по кругу. Это то что топикстартер хотел.
Аналогично для кнопки, на одной переменной и время для дребезга и для longpress получаем. А если шототипа if(N&3==0)... то и для событий раз в 400мс по удержанию кнопки сделаем.
В "& 0xFFFF"; нет надобности. Мало того, компилятор его "с оптимизирует", что легко по размеру кода отследить.
Что uint16_t currentTime = millis() & 0xFFFF;
что uint16_t currentTime = millis();
Компилиются в один и тот же код. Но в первом случае сразу наглядно видно что используется только половина от millis()
Я польщен.
В "& 0xFFFF"; нет надобности. Мало того, компилятор его "с оптимизирует", что легко по размеру кода отследить.
Что uint16_t currentTime = millis() & 0xFFFF;
что uint16_t currentTime = millis();
Компилиются в один и тот же код. Но в первом случае сразу наглядно видно что используется только половина от millis()
Я польщен.
Не стоит благодарности.
Для 1,5 сек конечно. Но правда есть такой подход. На uint8_t делаем короткий интервал, например 100мс. А все остальные уже через него меряем. Тогда 1,5сек - это 15 "тиков" по 100мс. И тоже на одном байте. Удобно если много интервалов нужно. При этом снижается точность, но longpress с точностью 1мс и не нужен.
Да. Годно, если степени двойки устроят. Но я как то для времени в районе секунды больше степени десятки привык. 1,024сек ну совсем не нравится. Наверно влияние RTC. А на самом деле - ну что плохого если longpress 1,536сек вместо 1,5сек. Пофиг в общем.
Да. Годно, если степени двойки устроят. Но я как то для времени в районе секунды больше степени десятки привык. 1,024сек ну совсем не нравится. Наверно влияние RTC. А на самом деле - ну что плохого если longpress 1,536сек вместо 1,5сек. Пофиг в общем.
Задумчиво просмотрел сообщения... andriano, где деления? Причем они тут?
На всяк случай собрал из кусков подобие кода
То byte, то uint8_t. То заглавными, то строчными... То с отступами, то без... Одни хацкеры.))
То byte, то uint8_t. То заглавными, то строчными... То с отступами, то без... Одни хацкеры.))
Ой кашмар, кашмар... Кроме отступов ты видать ничего и не понял..
"Да как же мне тя понять, барин!" Если ты спецом всё шифруешь.)
"Да как же мне тя понять, барин!" Если ты спецом всё шифруешь.)
Криптограмма говоришь. )))) Пиши исчо! Раздел ты выбрал верно, песочница именно для тех кому код шифровкой выглядит.
еще как будут , у нас в группе через день обсасываются некоторые проблеммы (одни и те же) и прилетает вопрос помогите не могу найти , даже ленту не листают
Ну раз тебе 35 лет, тогда заслужил вполне оправданно. Повесь на стену
Такие специалисты по выдачи сертификатов, говорит о том что они сами такие, это же их профессия! :)))
не сцы прорвемся мне 46 ток зарегестрировался так мне уже не только за вопрос натыкали , так еще и всех дохлых собак на меня повесили
не сцы прорвемся мне 46 ток зарегестрировался так мне уже не только за вопрос натыкали , так еще и всех дохлых собак на меня повесили
и еще натыкают. потому что не доходит - раньше писали не в тот раздел, теперь спамите в чужую ветку.
Если есть вопросы - создайте новое сообщение и задавайте их там. Если нужен код, а знаний нет - тогда в платный раздел
мне уже не только за вопрос натыкали , так еще и всех дохлых собак на меня повесили
так кто же Сергея Звягинцева не пнет )))
То byte, то uint8_t. То заглавными, то строчными... То с отступами, то без... Одни хацкеры.))
И не говори. При всем при том, ни одного unsigned char'a.
так и создавал отдельно , ток ошибся разделом
А кто это такой?