SoftwareSerial ежели я правильно понимаю интернет, может работать строго на цифровых выходах ардуино нано, у Вас на аналоговых
PS.
Почему бы модули повышайки не поставить на ребро, подстроечным резистором вверх, крутить удобней , да и уйма места на печатке освобождается и плата становится компактней. Модуль зарядки можно тоже не ребро.
Я, честно говоря, вообще не понимаю, зачем тут печатная плата нужна. Смысл в ней есть, если продаёте один за другим и нужно сэкономить на сборку полчасика или для компактности, но тут мне не понятно зачем уменьшать електронику, если из-за остальных компонентов и конструктивных особенностей, компактнее устройство всё равно не станет.
Или же в этом всё-таки есть смысл?
Я, честно говоря, вообще не понимаю, зачем тут печатная плата нужна. Смысл в ней есть, если продаёте один за другим и нужно сэкономить на сборку полчасика или для компактности, но тут мне не понятно зачем уменьшать електронику, если из-за остальных компонентов и конструктивных особенностей, компактнее устройство всё равно не станет. Или же в этом всё-таки есть смысл?
понимаете, тут уж кому как нравится... вот я, допустим, печатную плату не делал, все на монтажной плате собрал и проводами соединил и за малыми габаритами не гнался, валялась arduoino mega 2560 на ней и собрал, делаю для себя не на продажу, еще один соберу коктейльный вариант по проекту Павла и все. Но если человеку хочется и есть время сделать все красиво, а не только практично, то почему бы и нет)))
P.S. Еще раз огромное спасибо ребятам с форума, Павлу, Роману и Алексею))!
Я, честно говоря, вообще не понимаю, зачем тут печатная плата нужна. Смысл в ней есть, если продаёте один за другим и нужно сэкономить на сборку полчасика или для компактности, но тут мне не понятно зачем уменьшать електронику, если из-за остальных компонентов и конструктивных особенностей, компактнее устройство всё равно не станет. Или же в этом всё-таки есть смысл?
Это как рыбалка (не путать со спортивной рыбалкой или рыбалкой ради промысла). Тут важен сам процесс :)) ИМХО, конечно. Первый танк, так там плату вообще сделал любимым (вот уже с десяток лет) ЛУТом :)) Подарил.. Потом заказал у китайцев пяток, так все разошлись по друзьям. Пайка ради самого процесса пайки. Дома все уснут, а ты под 9-й район или Сектор газа что-нибудь паяешь. Хоть разъем от телефона, хоть жука ребенку в качестве игрушки...
Странный вопрос - зачем платы... Всегда хочется, чтобы было красиво и аккуратно, а не соплями примазано... Я, честно говоря, просто эстетическую эйфорию испытываю, когда всё чисто и одно к одному. На макетке и на соплях я на столе играюсь, а потом хочется сделать так, чтобы было приятно и посмотреть и взять в руки... перфекционист, есть маленечко... но кто не чудаковат - каждый по-своему...
Ну просто для меня это очень странная трата времени. Красиво и аккуратно можно и без платы. Просто знаю, как много времени может занять создание печатной платы, но если его много, то да, почему бы и нет. Во всяком случае всё уже сделано и все довольны)
А насчёт создания платы без модулей (точнее с распаянными компонентами модулей) и заказа у JLC со сборкой, если вдруг решитесь, то сначала посмотрите, есть ли у них все необходимые компоненты, так как припаяют они только то, что у них есть.
...сначала посмотрите, есть ли у них все необходимые компоненты, так как припаяют они только то, что у них есть.
Тут согласен и в плюс к этому: братья наши впаяют то что было под рукой, взамен нужного номинала или вместо резистора смд впаяют кондёр смд... и ищи почему оно не работает... Платы чем хороши это тем что проводов меньше, красиво и быстрая повторяемость. Единственное это разъёмы: их что часто втыкать/вытыкать? Спаял и на века))))
Я, честно говоря, вообще не понимаю, зачем тут печатная плата нужна. Смысл в ней есть, если продаёте один за другим и нужно сэкономить на сборку полчасика или для компактности, но тут мне не понятно зачем уменьшать електронику, если из-за остальных компонентов и конструктивных особенностей, компактнее устройство всё равно не станет. Или же в этом всё-таки есть смысл?
Это как рыбалка (не путать со спортивной рыбалкой или рыбалкой ради промысла). Тут важен сам процесс :)) ИМХО, конечно. Первый танк, так там плату вообще сделал любимым (вот уже с десяток лет) ЛУТом :)) Подарил.. Потом заказал у китайцев пяток, так все разошлись по друзьям. Пайка ради самого процесса пайки. Дома все уснут, а ты под 9-й район или Сектор газа что-нибудь паяешь. Хоть разъем от телефона, хоть жука ребенку в качестве игрушки...
Поддерживаю, мне тоже нравится паять всякие там модули, прозванивать мультметром если что то не работает в цепи, с программированием ардуино бы еще научиться. Даже плату с интересом тут попробовал и наваял. Я уже этих наливатор 5 штук сделал разных версий и прошивок, первый гайверовский был, так как у него было все подробно описано. С его сайта я собственно и увлекся этим делом кстати. Наливаторы раздарил друзьям, себе оставил модель с прошивкой от сюда.
Предлагаю что нибудь новое замутить, есть идея попробовать сделать охранную турель самонавадящуюся для дачи. С голосовым предупреждением и сиреной, корпус а в нем газовый балончик. Даже пробовал такую собрать и не получилось самонаведение организовать из за этого забросил.
Поддерживаю, мне тоже нравится паять всякие там модули, прозванивать мультметром если что то не работает в цепи, с программированием ардуино бы еще научиться. Даже плату с интересом тут попробовал и наваял. Я уже этих наливатор 5 штук сделал разных версий и прошивок, первый гайверовский был, так как у него было все подробно описано. С его сайта я собственно и увлекся этим делом кстати. Наливаторы раздарил друзьям, себе оставил модель с прошивкой от сюда.
Предлагаю что нибудь новое замутить, есть идея попробовать сделать охранную турель самонавадящуюся для дачи. С голосовым предупреждением и сиреной, корпус а в нем газовый балончик. Даже пробовал такую собрать и не получилось самонаведение организовать из за этого забросил.
[/quote]
тут наливаторы.
я думаю следующая версия будет не с радиальным розливом, а с продольным
Странный вопрос - зачем платы... Всегда хочется, чтобы было красиво и аккуратно, а не соплями примазано... Я, честно говоря, просто эстетическую эйфорию испытываю, когда всё чисто и одно к одному. На макетке и на соплях я на столе играюсь, а потом хочется сделать так, чтобы было приятно и посмотреть и взять в руки... перфекционист, есть маленечко... но кто не чудаковат - каждый по-своему...
Согласен на все 100%, эстетика должна быть не только с наружи но и внутри.
Тут согласен и в плюс к этому: братья наши впаяют то что было под рукой, взамен нужного номинала или вместо резистора смд впаяют кондёр смд... и ищи почему оно не работает... Платы чем хороши это тем что проводов меньше, красиво и быстрая повторяемость. Единственное это разъёмы: их что часто втыкать/вытыкать? Спаял и на века))))
уверяю , jlcpcb.com (lcsc.com) , уважаемые конторы, и подобной ху.ней заниматься не будут. А разъемы нужны что бы облегчить сборку компонентов наливатора в единой целое . Смутно представляю тянущие сопли проводов запаяные намертво. Это в первую очередь самому неудобно.
raven78, посмотрел ваши скетчи, хотел глянуть какие библиотеки используете. Я думал Вы как-то делали скетч для шагового двигателя или я ошибаюсь? А эти скетчи с гитхаба на прошивке Гайвера основанны или Гайвер упростил Вашу прошивку? Просто очень много одинакового кода у вас.
Приветствую всех! Огромное спасибо ребятам создающим такие интересные и увлекательные вещи! Решил тоже повторить. Но так как в схемах не очень разбираюсь, подскажите мне что это за детали - На входе К1, перед повышайкой S1 и К2 возле диода D2. Заранее спасибо!
Рандом в плеере, ограничение 100 песенок в папке. При переходе в меню плеера двойным нажатием выбираем пустое место в верхней строке дтисплея, указано галочкой(блин не придумал чего можно там вставить кромя R), крутим энкодером, выбираем R(рандом, параметр пишется в память), клик начинает воспроизведение рандомно треков
Побурчу... Как-то раньше на форумах в начале нулевых шустрее и больше было помощи :) Сейчас же только за денежку. Эх.
если чудо var (что за var?) naStol = false, то условие if(naStol) не выполнится никогда. и только после входа в "никогда" происходит бессмысленное, никогда не выполняющееся naStol = true, которое зациклило бы проигрывание, ибо "если правда -> сделать правду правдой"... подумать над двумя строчками не судьба...
тут нужна переменная, хранящая предыдущие состояния всех рюмочных слотов, чтоб отличить поставленную рюмку от давно стоящей, а не просто какой-то var...
короче, вот это запилить вверху скетча, где-то после объявления max_DrinkCount
bool playOnTable[max_DrinkCount]; //progrik: запрет/разрешение проигрывания мелодии, когда ставим рюмку
memset(playOnTable, 0, max_DrinkCount); //progrik: ставим false для всех слотов
а это там, где и было, снизу
if(currentTime >= (ledTime + 300))
{
// Опрашиваем оптопары ... Если рюмка поставлена , светодиод светится синим, нет ничего - не светится
for(int i = 0; i < max_DrinkCount; i++)
{
int val = analogRead(Optics[i]); // считываем значение
// Serial.println(val);
if(val > Optics_porog[i])
{
strip.setPixelColor(i, strip.Color(0, 0, 255));
if(playOnTable[i]) //progrik: если разрешено проигрывание
{
mp3_play_file_in_folder(2, random (10)+1); //progrik: играем музло
playOnTable[i] = false; //progrik: и сразу запрещаем играть повторно
}
}
else
{
strip.setPixelColor(i, strip.Color(0, 0, 0));
playOnTable[i] = true; //progrik: сняли рюмку - разрешаем играть музло
}
// delay(20);
}
strip.show();
ledTime = currentTime;
}
единственное, эта хрень будет пытаться играть при каждой постановке рюмки, даже если уже что-то играет. поэтому при последовательном опускании рюмок результат не определен... для меня... я не знаю, как поведет себя мп3плеер...
можно каждому слоту сделать свою мелодию - вместо mp3_play_file_in_folder(2, random (10)+1); заюзать mp3_play_file_in_folder(2, i+1); i - номер слота (рюмки)... можно запретить проигрывание, пока не доскрипит играющее музло, или остановить проигрывание текущего и воспроизвести свежий трек... но тогда надо или опрашивать плеер или слать команды (без понятия, не работал с мп3плеерами...), или как-то по времени...
если что не взлетит - бурчи сюдой))) я не проверял на ошибки, но обычно все и так с блокнота работает)) надо пробовать. но если я где забыл точку с запятой, то чините без меня, при помощи алгоритмического и аналитического мышления))
Приветствую коллеги. Как то натыкался тут на проект наливатора в корпусе от струйного принтера, там сама наливайка каталась на родных направляющих. Перечитал всю ветку, но так и не нашёл тот пост. Автор отпишись пожалуйста в личку, есть пара вопросов по реализации.
Наконец-то появилось время (и здоровье :)) снова вернуться к любимой игрушке. Была залита прошивка 38, методом компарации адаптировался к 41, залил и начал проверять. В режиме мушкетёров, почему-то в момент, когда должен крутить туда-сюда краном со звуком рулетки, включает звук, мигает диодами, дёргает сервой, потом всё замолкает, тухнет и он сразу двигается к произвольной рюмке, наливает и произносит тост... Что такое, не пойму... Рандом плеера работает нормально
если что не взлетит - бурчи сюдой))) я не проверял на ошибки, но обычно все и так с блокнота работает)) надо пробовать. но если я где забыл точку с запятой, то чините без меня, при помощи алгоритмического и аналитического мышления))
Спасибо, Друг. Буду пробовать как с дачи приеду в выходные. Внуки облепили, с ними теперь застрял к своему удовольствию на даче, а ноутбук бабка моя отобрала :))) И очередная возможность изучить новое.. Я про memset О_о
Прошить следующий скетч, а если нужно очистить eeprom(только не понятно зачем?), то в примерах к штатной библиотеке eeprom есть eeprom_clear, заливаете его и ждёте немного, пока не загорится светодиод на плате нано, который подключен к 13 пину.
Не появлялось ли обновлённого варианта схемы? Мне кажется, что когда я без релюшек собирал, работало от УСБ стабильно, а на релюхах, как то проседает то там то тут... Может дело не в этом, а в чём-то ещё, но мне кажется, что это они виноваты... Так то вроде нарисовал на мосфете, как раньше собирал, но пока на плате сделал на релюхах - от шнурка по USB прям проседает питание...
Не появлялось ли обновлённого варианта схемы? Мне кажется, что когда я без релюшек собирал, работало от УСБ стабильно, а на релюхах, как то проседает то там то тут... Может дело не в этом, а в чём-то ещё, но мне кажется, что это они виноваты... Так то вроде нарисовал на мосфете, как раньше собирал, но пока на плате сделал на релюхах - от шнурка по USB прям проседает питание...
expected constructor, destructor, or type conversion before '(' token
ай, ой, о, да)) строку с memset надо перенести куда нибудь в функцию setup - куда угодно...
возможно, это извращение и достаточно объявить bool playOnTable[max_DrinkCount] = {false}; и все элементы массива инициализируются в false, без memset, но мне лень проверять)
expected constructor, destructor, or type conversion before '(' token
ай, ой, о, да)) строку с memset надо перенести куда нибудь в функцию setup - куда угодно...
возможно, это извращение и достаточно объявить bool playOnTable[max_DrinkCount] = {false}; и все элементы массива инициализируются в false, без memset, но мне лень проверять)
Если всю строку с memset закомментировать, то работает стабильно. Вроде бы...
Если всю строку с memset закомментировать, то работает стабильно. Вроде бы...
я не совсем ардуинщик, и привык явно инициализировать, ибо на компе в памяти может оказаться что угодно. а тут при включении, видимо, и так ноли везде в памяти... работает - ну и хорошо)
Надеюсь автор не будет против. Выкладываю файлы корпуса наливатора для печати на 3D принтере. Файлы есть в свободном доступе в интернете (выкладывал сам автор). Я единственное, что сделал, разрезал большие детали, чтобы их можно было распечатать на большинстве принтеров, а потом склеить. И добавил еще одну трубку для наливания (трубка10_2.STL) Эта трубка рассчитана на 6x9 Китайский пищевой силиконовый шланг.
Может кому пригодится, уже стоят 15 минут и не вырубаются! Правда шли очень долго.
86,03 руб. | 10 шт. TTP223 кнопочный модуль конденсатора, одноканальный самоблокирующийся сенсорный выключатель, одноканальный переключатель трансформации https://a.aliexpress.com/_eOiwHr
Без релюшек вот, на мосфете... Заказать бы плату с распайкой деталей, конечно, а не как драйвер-борд для модулей...
Поди вышло бы и дешевле и компактнее... Но я не разобрался ещё как такой заказ правильно оформить...
SoftwareSerial ежели я правильно понимаю интернет, может работать строго на цифровых выходах ардуино нано, у Вас на аналоговых
PS.
Почему бы модули повышайки не поставить на ребро, подстроечным резистором вверх, крутить удобней , да и уйма места на печатке освобождается и плата становится компактней. Модуль зарядки можно тоже не ребро.
Без релюшек вот, на мосфете... Заказать бы плату с распайкой деталей, конечно, а не как драйвер-борд для модулей...
Поди вышло бы и дешевле и компактнее... Но я не разобрался ещё как такой заказ правильно оформить...
работа конечно кропотливая: брать схему каждого модуля и вписывать в схему вместо модулей и уплотнять.
Просто тогда можно много лишнего выкинуть из схем модулей - из нано пол схемы, бустеры с фиксированным питанием, уменьшить пассивное потребление....
Всё на этих выводах проверено - работает.
Да, размер можно ещё оптимизировать. тут модули смещены и крутить в принципе удобно.
P.S. Модули ставлю на штырьки от разъёмов XH (male)
Я, честно говоря, вообще не понимаю, зачем тут печатная плата нужна. Смысл в ней есть, если продаёте один за другим и нужно сэкономить на сборку полчасика или для компактности, но тут мне не понятно зачем уменьшать електронику, если из-за остальных компонентов и конструктивных особенностей, компактнее устройство всё равно не станет.
Или же в этом всё-таки есть смысл?
понимаете, тут уж кому как нравится... вот я, допустим, печатную плату не делал, все на монтажной плате собрал и проводами соединил и за малыми габаритами не гнался, валялась arduoino mega 2560 на ней и собрал, делаю для себя не на продажу, еще один соберу коктейльный вариант по проекту Павла и все. Но если человеку хочется и есть время сделать все красиво, а не только практично, то почему бы и нет)))
P.S. Еще раз огромное спасибо ребятам с форума, Павлу, Роману и Алексею))!
Это как рыбалка (не путать со спортивной рыбалкой или рыбалкой ради промысла). Тут важен сам процесс :)) ИМХО, конечно. Первый танк, так там плату вообще сделал любимым (вот уже с десяток лет) ЛУТом :)) Подарил.. Потом заказал у китайцев пяток, так все разошлись по друзьям. Пайка ради самого процесса пайки. Дома все уснут, а ты под 9-й район или Сектор газа что-нибудь паяешь. Хоть разъем от телефона, хоть жука ребенку в качестве игрушки...
Просто так... Авось кому на тосты надо. Что-то вспомнилось... https://www.youtube.com/watch?v=T-b3fqxg1Fw и https://www.youtube.com/watch?v=keTWzU57dQ4 Эх... и это https://www.youtube.com/watch?v=qr5fK_nENoo а так же еще одна классика https://www.youtube.com/watch?v=kNs8VOO8Qpw
Просто так... Авось кому на тосты надо. Что-то вспомнилось... https://www.youtube.com/watch?v=T-b3fqxg1Fw и https://www.youtube.com/watch?v=keTWzU57dQ4 Эх... и это https://www.youtube.com/watch?v=qr5fK_nENoo а так же еще одна классика https://www.youtube.com/watch?v=kNs8VOO8Qpw
За Леонова отдельное спасибо!))
Странный вопрос - зачем платы... Всегда хочется, чтобы было красиво и аккуратно, а не соплями примазано... Я, честно говоря, просто эстетическую эйфорию испытываю, когда всё чисто и одно к одному. На макетке и на соплях я на столе играюсь, а потом хочется сделать так, чтобы было приятно и посмотреть и взять в руки... перфекционист, есть маленечко... но кто не чудаковат - каждый по-своему...
Ну просто для меня это очень странная трата времени. Красиво и аккуратно можно и без платы. Просто знаю, как много времени может занять создание печатной платы, но если его много, то да, почему бы и нет. Во всяком случае всё уже сделано и все довольны)
А насчёт создания платы без модулей (точнее с распаянными компонентами модулей) и заказа у JLC со сборкой, если вдруг решитесь, то сначала посмотрите, есть ли у них все необходимые компоненты, так как припаяют они только то, что у них есть.
Это как рыбалка (не путать со спортивной рыбалкой или рыбалкой ради промысла). Тут важен сам процесс :)) ИМХО, конечно. Первый танк, так там плату вообще сделал любимым (вот уже с десяток лет) ЛУТом :)) Подарил.. Потом заказал у китайцев пяток, так все разошлись по друзьям. Пайка ради самого процесса пайки. Дома все уснут, а ты под 9-й район или Сектор газа что-нибудь паяешь. Хоть разъем от телефона, хоть жука ребенку в качестве игрушки...
Поддерживаю, мне тоже нравится паять всякие там модули, прозванивать мультметром если что то не работает в цепи, с программированием ардуино бы еще научиться. Даже плату с интересом тут попробовал и наваял. Я уже этих наливатор 5 штук сделал разных версий и прошивок, первый гайверовский был, так как у него было все подробно описано. С его сайта я собственно и увлекся этим делом кстати. Наливаторы раздарил друзьям, себе оставил модель с прошивкой от сюда.
Предлагаю что нибудь новое замутить, есть идея попробовать сделать охранную турель самонавадящуюся для дачи. С голосовым предупреждением и сиреной, корпус а в нем газовый балончик. Даже пробовал такую собрать и не получилось самонаведение организовать из за этого забросил.
[/quote]
Поддерживаю, мне тоже нравится паять всякие там модули, прозванивать мультметром если что то не работает в цепи, с программированием ардуино бы еще научиться. Даже плату с интересом тут попробовал и наваял. Я уже этих наливатор 5 штук сделал разных версий и прошивок, первый гайверовский был, так как у него было все подробно описано. С его сайта я собственно и увлекся этим делом кстати. Наливаторы раздарил друзьям, себе оставил модель с прошивкой от сюда.
Предлагаю что нибудь новое замутить, есть идея попробовать сделать охранную турель самонавадящуюся для дачи. С голосовым предупреждением и сиреной, корпус а в нем газовый балончик. Даже пробовал такую собрать и не получилось самонаведение организовать из за этого забросил.
[/quote]
тут наливаторы.
я думаю следующая версия будет не с радиальным розливом, а с продольным
Странный вопрос - зачем платы... Всегда хочется, чтобы было красиво и аккуратно, а не соплями примазано... Я, честно говоря, просто эстетическую эйфорию испытываю, когда всё чисто и одно к одному. На макетке и на соплях я на столе играюсь, а потом хочется сделать так, чтобы было приятно и посмотреть и взять в руки... перфекционист, есть маленечко... но кто не чудаковат - каждый по-своему...
Согласен на все 100%, эстетика должна быть не только с наружи но и внутри.
Тут согласен и в плюс к этому: братья наши впаяют то что было под рукой, взамен нужного номинала или вместо резистора смд впаяют кондёр смд... и ищи почему оно не работает... Платы чем хороши это тем что проводов меньше, красиво и быстрая повторяемость. Единственное это разъёмы: их что часто втыкать/вытыкать? Спаял и на века))))
уверяю , jlcpcb.com (lcsc.com) , уважаемые конторы, и подобной ху.ней заниматься не будут. А разъемы нужны что бы облегчить сборку компонентов наливатора в единой целое . Смутно представляю тянущие сопли проводов запаяные намертво. Это в первую очередь самому неудобно.
raven78, посмотрел ваши скетчи, хотел глянуть какие библиотеки используете. Я думал Вы как-то делали скетч для шагового двигателя или я ошибаюсь? А эти скетчи с гитхаба на прошивке Гайвера основанны или Гайвер упростил Вашу прошивку? Просто очень много одинакового кода у вас.
Не это я на основе Гайвера, утяжелил так сказать его прошивку))). Для шаговика не делал
Может ещё в плеер рандом добавить?
удалил
Привет всем. Ребята, подскажите, пожалуйста, как в данном скетче реализовать мелодию при установки рюмки?
#include <LCD_1602_RUS.h> #include <Servo.h> #include "Adafruit_NeoPixel.h" #include <SoftwareSerial.h>//добавляем библиотеки #include <DFPlayer_Mini_Mp3.h>//добавляем библиотеку МП3 плейера LCD_1602_RUS lcd(0x3F, 16, 2); //Порт дисплея обычно 0x27 или 0x3F, подключение экрана А4-SDA-зеленый, А5-SCL-желтый unsigned long currentTime; unsigned long loopTime; unsigned long ledTime; // Переменные для энкодера ----------- const int pin_A = 2; // Подключение вывода A (CLK) энкодера const int pin_B = 3; // Подключение вывода B (DT) энкодера const int pin_SW = 4; // Подключение вывода кнопки (SW) энкодера unsigned char encoder_A; unsigned char encoder_B; unsigned char encoder_A_prev = 0; unsigned char encoder_sw_prew = 1; //Массив , обозначаем подключенные оптопары по выводам . Оптопары подключены, A0,A1,A2,A3,A6 const byte Optics[] = {0, 1, 2, 3, 6}; // Значения порога срабатывания датчика для каждой рюмки const unsigned int Optics_porog[] = {100,200,200,200,100}; //Серво const int PIN_SERVO = 9; Servo servo; //Позиция каждой рюмки const byte Rumka_pos[] = {3,50,98,145,179}; //12 - 48 - 90 - 135 - 174 const byte servo_speed=20; // Скорость поворота серво, 10 - норм, 20 медленно, 30 очень медленно byte Menu = 0; byte MenuFlag = 0; // Здесь храниться уровень меню. 0 находимся в Главном меню. 1 Вошли в меню Авто, 2 вошли в Ручное управление byte Drink = 20; // По умолчанию в рюмку наливаем 20 мл. //----- Минимальные и максимальные значения наполняемой жидкости и задержки для наполнения. const byte min_Drink = 2; // Минимум в рюмку - 2 мл. const byte max_Drink = 50; // Максимум в рюмку - 50 мл. // Калибровка работы насосика. Значения для налива min_Drink и max_Drink соотвественно const unsigned int min_Drink_delay = 222; const unsigned int max_Drink_delay = 5500; //-------- byte DrinkCount = 1; //По умолчанию, для ручного режима - 1 рюмка const byte max_DrinkCount = 5; //Максимальное кол-во рюмок - 5 // Насосик const byte PIN_PUMP = 12; // Светодиоды const int PIN_LED = 5;// Сюда подключаются светодиоды const int LED_COUNT = max_DrinkCount; Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, PIN_LED, NEO_GRB + NEO_KHZ800); //------- void pump_enable() { digitalWrite(PIN_PUMP, 1); //вкл реле } void pump_disable() { digitalWrite(PIN_PUMP, 0); //выкл реле } void pump_timer(byte Drink) { digitalWrite(PIN_PUMP, 1); //вкл реле delay(map(Drink, min_Drink, max_Drink, min_Drink_delay, max_Drink_delay)); digitalWrite(PIN_PUMP, 0); //выкл реле } void oled_menu(byte Menu) { lcd.clear(); lcd.setCursor(3, 0); lcd.print(F("НАЛИВАТОР+")); lcd.setCursor(0, 1); lcd.print(F(">")); lcd.setCursor(15, 1); lcd.print(F("<")); switch (Menu) { case 0: lcd.setCursor(6, 1); lcd.print(F("АВТО")); break; case 1: lcd.setCursor(2, 1); lcd.print(F("РУЧНОЙ РЕЖИМ")); break; case 2: lcd.setCursor(4, 1); lcd.print(F("ПРОМЫВКА")); break; } } // выводит строчку по чуть чуть, в самый раз и тд. Передается номер строки, на которой выводить сообщение void DrinkInfo(byte pos) { Serial.println(F("INFO_DRINK")); lcd.setCursor(0, 1); if (Drink < 15) { // lcd.setCursor(0, 1); lcd.print(F(" НИ О ЧЕМ ")); } else if (Drink < 28) { // lcd.setCursor(0, 1); lcd.print(F(" ПО ЧУТЬ - ЧУТЬ ")); } else if (Drink < 38) { // lcd.setCursor(0, 1); lcd.print(F(" В САМЫЙ РАЗ ")); } else if (Drink < 48) { // lcd.setCursor(0, 1); lcd.print(F(" ПО ПОЛНОЙ ")); } else { // lcd.setCursor(0, 1); lcd.print(F(" ДО КРАЕВ ")); } } // Меню Авто режим void oled_auto(int Drink) { Serial.println(F("MENU_AUTO")); lcd.clear(); lcd.setCursor(0, 0); lcd.print(F("HАЛИТЬ ПО")); lcd.setCursor(10, 0); lcd.print(Drink); Serial.println(Drink); lcd.setCursor(13, 0); lcd.print(F("мЛ?")); DrinkInfo(57); } // Меню Ручной режим void oled_manual(int DrinkCount, int Drink) { Serial.println(F("MENU_RUCHN")); lcd.clear(); lcd.setCursor(0, 0); lcd.print(F("HАЛИТЬ ПО")); lcd.setCursor(10, 0); lcd.print(Drink); lcd.setCursor(13, 0); lcd.print(F("мЛ?")); Serial.println(Drink); lcd.setCursor(0, 1); lcd.print(F(" В РЮМ")); lcd.setCursor(5, 1); lcd.print(DrinkCount); Serial.println(DrinkCount); if (DrinkCount == 1) { lcd.setCursor(10, 1); lcd.print(F("КУ ")); } else if (DrinkCount <= 4 ) { lcd.setCursor(10, 1); lcd.print(F("КИ ")); } else { lcd.setCursor(10, 1); lcd.print(F("ОК ")); } } // Меню налива void oled_naliv(int MenuFlag, int Drink, int DrinkCount) { Serial.println(F("NALIVAIU")); lcd.clear(); lcd.setCursor(0, 0); lcd.print(F("НАЛИВАЮ ПО")); lcd.setCursor(11, 0); lcd.print(Drink); Serial.println(Drink); lcd.setCursor(14, 0); lcd.print(F("мЛ")); lcd.setCursor(0, 1); lcd.print(F(" В")); lcd.setCursor(5, 1); lcd.print(DrinkCount); Serial.println(DrinkCount); lcd.setCursor(7, 1); lcd.print(F("РЮМ")); if (DrinkCount == 1) { lcd.setCursor(10, 1); lcd.print(F("КУ ")); } else if (DrinkCount <= 4 ) { lcd.setCursor(10, 1); lcd.print(F("КИ ")); } else { lcd.setCursor(10, 1); lcd.print(F("ОК ")); } } // Меню налито void oled_nalito(int MenuFlag, int Nalito, int Drink) { Serial.println(F("NALITO")); lcd.clear(); lcd.setCursor(0, 0); lcd.print(F("HАЛИТО ПО")); lcd.setCursor(11, 0); lcd.print(Drink); Serial.println(Drink); lcd.setCursor(14, 0); lcd.print(F("мЛ")); lcd.setCursor(0, 1); lcd.print(F(" В")); lcd.setCursor(5, 1); lcd.print(Nalito); lcd.setCursor(7, 1); lcd.print(F("РЮМ")); Serial.println(Nalito); if (Nalito == 1) { lcd.setCursor(10, 1); lcd.print(F("КУ ")); } else if (Nalito <= 4 ) { lcd.setCursor(10, 1); lcd.print(F("КИ ")); } else { lcd.setCursor(10, 1); lcd.print(F("ОК ")); } } void Tost() { //Рандом - 1 Serial.println(F("Tost")); randomSeed(currentTime); byte num=random(20); // 0...19 Serial.println(num); mp3_set_volume (20);// устанвливаем громкость 20 (если хотите установить // кнопки для регулировки громкости вручную, закоментируйте эту и с //ледующую строчку) delay (100); lcd.clear(); switch (num){ //switch (random(20)) { // 0...19 case 0: //ЗА ВСТРЕЧУ! lcd.setCursor(7, 0); lcd.print(F("НУ,")); lcd.setCursor(2, 1); lcd.print(F("ЗА ВСТРЕЧУ!")); mp3_play (2); // Проигрываем "mp3/0002.mp3" delay(100); break; case 1: //ЗА КРАСОТУ! lcd.setCursor(7, 0); lcd.print(F("НУ,")); lcd.setCursor(2, 1); lcd.print(F("ЗА КРАСОТУ!")); mp3_play (3); // Проигрываем "mp3/0003.mp3" delay(100); break; case 2: //"ЗА ДРУЖБУ!" lcd.setCursor(7, 0); lcd.print(F("НУ,"));// lcd.setCursor(3, 1); lcd.print(F("ЗА ДРУЖБУ!")); mp3_play (4); // Проигрываем "mp3/0004.mp3" delay(100); break; case 3: //"ЗА БРАТСТВО! lcd.setCursor(7, 0); lcd.print(F("НУ,")); lcd.setCursor(2, 1); lcd.print(F("ЗА БРАТСТВО!")); mp3_play (5); // Проигрываем "mp3/0005.mp3" delay(100); break; case 4: //ЗА СПРАВЕДЛИВОСТЬ! lcd.setCursor(5, 0); lcd.print(F("НУ, ЗА")); lcd.setCursor(1, 1); lcd.print(F("СПРАВЕДЛИВОСТЬ!")); mp3_play (6); // Проигрываем "mp3/0006.mp3"11 delay(100); break; case 5: //ЗА РЫБАЛКУ! lcd.setCursor(7, 0); lcd.print(F("НУ,")); lcd.setCursor(3, 1); lcd.print(F("ЗА РЫБАЛКУ!")); mp3_play (7); // Проигрываем "mp3/0007.mp3" delay(100); break; case 6: //ЗА ИСКУССТВО! lcd.setCursor(7, 0); lcd.print(F("НУ,")); lcd.setCursor(2, 1); lcd.print(F("ЗА ИСКУССТВО!")); mp3_play (8); // Проигрываем "mp3/0008.mp3" delay(100); break; case 7: //ЗА РАЗУМ! lcd.setCursor(7, 0); lcd.print(F("НУ,")); lcd.setCursor(3, 1); lcd.print(F("ЗА РАЗУМ!")); mp3_play (9); // Проигрываем "mp3/0009.mp3" delay(100); break; case 8: //ЗА ИСТИННЫХ ЖЕНЩИН! lcd.setCursor(5, 0); lcd.print(F("НУ, ЗА")); lcd.setCursor(0, 1); lcd.print(F("ИСТИННЫХ ЖЕНЩИН!!")); mp3_play (10); // Проигрываем "mp3/0010.mp3" delay(100); break; case 9: //ЗА ПОНИМАНИЕ! lcd.setCursor(7, 0); lcd.print(F("НУ,")); lcd.setCursor(2, 1); lcd.print(F("ЗА ПОНИМАНИЕ!")); mp3_play (11); // Проигрываем "mp3/0011.mp3" delay(100); break; case 10: //ЗА ЕДИНЕНИЕ! lcd.setCursor(7, 0); lcd.print(F("НУ,")); lcd.setCursor(2, 1); lcd.print(F("ЗА ЕДИНЕНИЕ!")); mp3_play (13); // Проигрываем "mp3/0013.mp3" delay(100); break; case 11: //ЗА ПОБЕДУ! lcd.setCursor(7, 0); lcd.print(F("НУ,")); lcd.setCursor(3, 1); lcd.print(F("ЗА ПОБЕДУ!")); mp3_play (16); // Проигрываем "mp3/0016.mp3" delay(100); break; case 12: //ЗА РОДИНУ! lcd.setCursor(7, 0); lcd.print(F("НУ,")); lcd.setCursor(3, 1); lcd.print(F("ЗА РОДИНУ!")); mp3_play (21); // Проигрываем "mp3/0021.mp3" delay(100); break; case 13: //ЧТОБ ГОЛОВА НЕ ТРЕЩАЛА! lcd.setCursor(0, 0); lcd.print(F("НУ, ЧТОБ ГОЛОВА")); lcd.setCursor(2, 1); lcd.print(F("НЕ ТРЕЩАЛА!")); mp3_play (17); // Проигрываем "mp3/0017.mp3" delay(100); break; case 14: //ЗА СОЛИДНОЕ МУЖСКОЕ МОЛЧАНИЕ lcd.setCursor(0, 0); lcd.print(F("НУ, ЗА СОЛИДНОЕ"));//НУ, lcd.setCursor(0, 1); lcd.print(F("МУЖСКОЕ МОЛЧАНИЕ!")); mp3_play (12); // Проигрываем "mp3/0012.mp3" delay(100); break; case 15: //ЧТОБ МОРЩИЛО НАС МЕНЬШЕ! lcd.setCursor(0, 0); lcd.print(F("НУ,ЧТОБЫ МОРЩИЛО")); lcd.setCursor(2, 1); lcd.print(F("НАС МЕНЬШЕ ЧЕМ")); mp3_play (18); // Проигрываем "mp3/0018.mp3" delay(100); break; case 16: //ЧТОБ В СТОРОНУ НЕ ВИЛЬНУЛО! lcd.setCursor(0, 0); lcd.print(F("НУ,ЧТОБ В СТОРО-")); lcd.setCursor(0, 1); lcd.print(F("НУ НЕ ВИЛЬНУЛО!")); mp3_play (19); // Проигрываем "mp3/0019.mp3" delay(100); break; case 17: //НУ ВЫ БЛИН ДАЁТЕ! lcd.setCursor(2, 0); lcd.print(F("НУ ВЫ БЛИН")); lcd.setCursor(5, 1); lcd.print(F("ДАЁТЕ!")); mp3_play (20); // Проигрываем "mp3/0020.mp3" delay(100); break; case 18: //ЗА МИР ВО ВСЕМ МИРЕ lcd.setCursor(5, 0); lcd.print(F("ЗА МИР")); lcd.setCursor(2, 1); lcd.print(F("ВО ВСЕМ МИРЕ")); delay(2000); lcd.clear(); lcd.setCursor(0, 0); lcd.print(F("И БОЛЬШИЕ СИСЬКИ")); lcd.setCursor(5, 1); lcd.print("!!!!"); break; case 19: //ЗА НАС С ВАМИ lcd.setCursor(1, 0); lcd.print(F("ЗА НАС С ВАМИ")); lcd.setCursor(1, 1); lcd.print(F("И ХРЕН С НИМИ")); delay(100); break; } delay(2000); } void ServoNaliv(byte rumka) { servo.attach(PIN_SERVO); for (int pos = servo.read(); pos <= Rumka_pos[rumka]; pos += 1) { // с шагом в 1 градус servo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной 'pos' delay(servo_speed); // ждем , пока ротор сервы выйдет в заданную позицию } servo.detach(); } void ServoParking () { //Serial.println(servo.read()); servo.attach(PIN_SERVO); for (int pos = servo.read(); pos >= 0; pos -= 1) { // с шагом в 1 градус servo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной 'pos' delay(servo_speed); // ждем , пока ротор сервы выйдет в заданную позицию } servo.detach(); } void CvetoMuzik() { for (int i = 0; i <= 7; i++) { for (int y = 0; y < max_DrinkCount; y++) { strip.setPixelColor(y, strip.Color(255, 0, 0)); strip.show(); delay(30); } for (int y = 0; y < max_DrinkCount; y++) { strip.setPixelColor(y, strip.Color(0, 255, 0)); strip.show(); delay(30); } for (int y = 0; y < max_DrinkCount; y++) { strip.setPixelColor(y, strip.Color(0, 0, 255)); strip.show(); delay(30); } } } void setup() { Serial.begin(9600);// //устанавливаем Serial порт МП3 плейера если вывод в монитор TX(D0) и RX(D1)не нужен mp3_set_serial (Serial);//инициализируем Serial порт МП3 плейера /* при необходимости создаем програмный порт для управдения МП3 плейером, если вывод в монитор TX(D0) RX(D1) необходим SoftwareSerial mySoftwareSerial(10, 11); // RX, TX обозначаем програмный порт как mySoftwareSerial //плейер подключаем D10 D11 mySoftwareSerial.begin(9600);//инициализируем програмный Serial порт mp3_set_serial (mySoftwareSerial);// указываем програмный порт для МП3 плейера //инициализируем Serial с скоростью 115200, если вывод в монитор TX(D0) RX(D1) необходим Serial.begin(115200); */ delay (100);//Между двумя командами необходимо делать задержку 100 миллисекунд, в противном случае некоторые команды могут работать не стабильно. mp3_set_volume (30);// устанвливаем громкость 30 delay (100); mp3_play (1); // Проигрываем "mp3/0001.mp3"(0001_get started!.mp3) delay (100); lcd.init();// Инициализация дисплея lcd.backlight(); lcd.setCursor(7, 0); lcd.print(F("НУ,")); lcd.setCursor(1, 1); lcd.print(F("НАА-ЧАА-ЛИИИИ!")); delay (3500); pinMode(pin_SW, INPUT); // устанавливаем pin pin_SW как вход digitalWrite(pin_SW, HIGH); // Поддяжка вывода к 1 pinMode(pin_A, INPUT); pinMode(pin_B, INPUT); pinMode(PIN_PUMP, OUTPUT); digitalWrite(PIN_PUMP, 0); currentTime = millis(); loopTime = currentTime; //--------------- oled_menu(0); strip.begin(); for (int i = 0; i < 5; i++) { pinMode(Optics[i], INPUT); } ServoParking(); } void loop() { currentTime = millis(); if (currentTime >= (loopTime + 5)) { // проверяем каждые 5мс // int val = analogRead(0); // считываем значение // Serial.println(val); encoder_A = digitalRead(pin_A); // считываем состояние выхода А энкодера encoder_B = digitalRead(pin_B); // считываем состояние выхода B энкодера if ((!encoder_A) && (encoder_A_prev)) { // если состояние изменилось с положительного к нулю //Вращение влево if (encoder_B) { if (MenuFlag == 0) { (Menu <= 0 ) ? Menu = 2 : Menu--; // Перемещение курсора по главному меню назад oled_menu(Menu); } else if (MenuFlag == 1) { (Drink <= min_Drink ) ? Drink = max_Drink : Drink--; // Уменьшаем кол-во милилитров в рюмку oled_auto(Drink); } else if (MenuFlag == 2) { (DrinkCount >= max_DrinkCount ) ? DrinkCount = 1 : DrinkCount++; // Влево увечичиваем рюмки для ручного режима oled_manual(DrinkCount, Drink); } //Вращение вправо } else { if (MenuFlag == 0) { (Menu >= 2 ) ? Menu = 0 : Menu++; // Перемещение курсора по главному меню вперед. oled_menu(Menu); } else if (MenuFlag == 1) { (Drink >= max_Drink ) ? Drink = min_Drink : Drink++; oled_auto(Drink); } else if (MenuFlag == 2) { (Drink >= max_Drink ) ? Drink = min_Drink : Drink++; oled_manual(DrinkCount, Drink); } } } encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла int encoder_sw = digitalRead(pin_SW); if (encoder_sw == 0 && encoder_sw != encoder_sw_prew) { // Нажата кнопка int pause_sw = 0; boolean promivka = false; while (digitalRead(pin_SW) == 0) { // Держим кнопку. Считаем сколько времени прошло... delay(100); pause_sw++; if (pause_sw > 20 && Menu != 2 ) break; if (pause_sw > 20 && Menu == 2 && promivka == false) { // Если пункт меню промывка и держим кнопку больше 2 секунд. promivka = true; pump_enable(); // Включаем насос lcd.clear(); lcd.setCursor(0, 0); lcd.print(F("П Р О М Ы В К А")); lcd.setCursor(2, 1); lcd.print(">>>>>>>>>>>>"); } } //После отпускания кнопки , обрабатываем if (promivka == true) { //Отпустили кнопку. Если включена промывка, выключаем насос и возвращаемся в главное меню promivka = false; pump_disable() ; //Выключаем насос oled_menu(2); } else { //Обработка всех нажатий кнопки if (Menu == 0 && MenuFlag == 0 && pause_sw < 10) { //Нажатие кнопки меню авто MenuFlag = 1; oled_auto(Drink); } else if (MenuFlag == 1 && pause_sw > 20) { //Выход из меню авто в главное MenuFlag = 0; oled_menu(0); } else if (MenuFlag == 1 ) { //Начинается автоматический разлив Serial.println("AUTO"); //Начало автоматического разлива oled_naliv(MenuFlag, Drink, DrinkCount); // Выводим на экран наливаем ... byte drink_count = 0; for (int y = 0; y < max_DrinkCount; y++) { if (analogRead(Optics[y]) > Optics_porog[y] ) { strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подствечиваем красным цветом strip.show(); ServoNaliv(y); // Перемещяемся к рюмке pump_timer(Drink); // Налив. strip.setPixelColor(y, strip.Color(0, 255, 0)); // Подствечиваем зеленым , налито. strip.show(); drink_count++; } } if (drink_count > 0) { oled_nalito(MenuFlag, drink_count, Drink ); ServoParking(); delay(1000); Tost(); CvetoMuzik(); oled_auto(Drink); } else { lcd.setCursor(7, 1); lcd.print(F("НЕТ РЮМОК!")); delay(2000); oled_auto(Drink); } } else if (Menu == 1 && MenuFlag == 0 && pause_sw < 10) { // Нажатие меню ручное MenuFlag = 2; oled_manual(DrinkCount, Drink); } else if (MenuFlag == 2 && pause_sw > 20) { //Выход из меню ручное в главное MenuFlag = 0; oled_menu(1); } else if (MenuFlag == 2 ) { //Начинается ручной разлив Serial.println("RUCHNOY" + String(DrinkCount)); oled_naliv(MenuFlag, Drink, DrinkCount); // Выводим на экран наливаем ... for (int y = 0; y < DrinkCount; y++) { strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подствечиваем красным цветом strip.show(); ServoNaliv(y); // Перемещяемся к рюмке pump_timer(Drink); // Налив. strip.setPixelColor(y, strip.Color(0, 255, 0)); // Подствечиваем зеленым , налито. strip.show(); } oled_nalito(MenuFlag, DrinkCount, Drink ); // Выводим на экран налито ... ServoParking(); Tost(); CvetoMuzik(); oled_manual(DrinkCount, Drink); } } } if (currentTime >= (ledTime + 300)) { //Опрашиваем оптопары ... Если рюмка поставлена , светодиод светится синим, нет ничего - не светится for (int i = 0; i < max_DrinkCount; i++) { int val = analogRead(Optics[i]); // считываем значение // Serial.println(val); if (val > Optics_porog[i]) { strip.setPixelColor(i, strip.Color(0, 0, 255)); } else { strip.setPixelColor(i, strip.Color(0, 0, 0)); } // delay(20); } strip.show(); ledTime = currentTime; } encoder_sw_prew = encoder_sw; loopTime = currentTime; } }Пробовал тут
Приветствую всех! Огромное спасибо ребятам создающим такие интересные и увлекательные вещи! Решил тоже повторить. Но так как в схемах не очень разбираюсь, подскажите мне что это за детали - На входе К1, перед повышайкой S1 и К2 возле диода D2. Заранее спасибо!
del
подскажите мне что это за детали - На входе К1, перед повышайкой S1 и К2 возле диода D2. Заранее спасибо!
Всё что К1 и К2 это два реле на 5 вольт, с одной группой контактов каждое
S1 обычный выключатель, любой на вкус
Благодарю и еще раз спасибо за работу!
Может ещё в плеер рандом добавить?
Рандом в плеере, ограничение 100 песенок в папке. При переходе в меню плеера двойным нажатием выбираем пустое место в верхней строке дтисплея, указано галочкой(блин не придумал чего можно там вставить кромя R), крутим энкодером, выбираем R(рандом, параметр пишется в память), клик начинает воспроизведение рандомно треков
41 тест
Спасибо! попробую!
Побурчу... Как-то раньше на форумах в начале нулевых шустрее и больше было помощи :) Сейчас же только за денежку. Эх.
(блин не придумал чего можно там вставить кромя R)
А так и напиши Random Play (RndPlay, Рандомайзер, Пьяный ДиДжей)
тут нужна переменная, хранящая предыдущие состояния всех рюмочных слотов, чтоб отличить поставленную рюмку от давно стоящей, а не просто какой-то var...
короче, вот это запилить вверху скетча, где-то после объявления max_DrinkCount
а это там, где и было, снизу
if(currentTime >= (ledTime + 300)) { // Опрашиваем оптопары ... Если рюмка поставлена , светодиод светится синим, нет ничего - не светится for(int i = 0; i < max_DrinkCount; i++) { int val = analogRead(Optics[i]); // считываем значение // Serial.println(val); if(val > Optics_porog[i]) { strip.setPixelColor(i, strip.Color(0, 0, 255)); if(playOnTable[i]) //progrik: если разрешено проигрывание { mp3_play_file_in_folder(2, random (10)+1); //progrik: играем музло playOnTable[i] = false; //progrik: и сразу запрещаем играть повторно } } else { strip.setPixelColor(i, strip.Color(0, 0, 0)); playOnTable[i] = true; //progrik: сняли рюмку - разрешаем играть музло } // delay(20); } strip.show(); ledTime = currentTime; }единственное, эта хрень будет пытаться играть при каждой постановке рюмки, даже если уже что-то играет. поэтому при последовательном опускании рюмок результат не определен... для меня... я не знаю, как поведет себя мп3плеер...
можно каждому слоту сделать свою мелодию - вместо mp3_play_file_in_folder(2, random (10)+1); заюзать mp3_play_file_in_folder(2, i+1); i - номер слота (рюмки)... можно запретить проигрывание, пока не доскрипит играющее музло, или остановить проигрывание текущего и воспроизвести свежий трек... но тогда надо или опрашивать плеер или слать команды (без понятия, не работал с мп3плеерами...), или как-то по времени...
если что не взлетит - бурчи сюдой))) я не проверял на ошибки, но обычно все и так с блокнота работает)) надо пробовать. но если я где забыл точку с запятой, то чините без меня, при помощи алгоритмического и аналитического мышления))
Если можно soroginoleg@rambler.ru
Приветствую коллеги. Как то натыкался тут на проект наливатора в корпусе от струйного принтера, там сама наливайка каталась на родных направляющих. Перечитал всю ветку, но так и не нашёл тот пост. Автор отпишись пожалуйста в личку, есть пара вопросов по реализации.
Наконец-то появилось время (и здоровье :)) снова вернуться к любимой игрушке. Была залита прошивка 38, методом компарации адаптировался к 41, залил и начал проверять. В режиме мушкетёров, почему-то в момент, когда должен крутить туда-сюда краном со звуком рулетки, включает звук, мигает диодами, дёргает сервой, потом всё замолкает, тухнет и он сразу двигается к произвольной рюмке, наливает и произносит тост... Что такое, не пойму... Рандом плеера работает нормально
Я обновлял скетч с 41 версией, попробуйте по новой скачать.
если что не взлетит - бурчи сюдой))) я не проверял на ошибки, но обычно все и так с блокнота работает)) надо пробовать. но если я где забыл точку с запятой, то чините без меня, при помощи алгоритмического и аналитического мышления))
Да, перекачал, заработало
В плеере, где переключатель R. можно второй сделать L чтобы не пустое поле было
Random/Line
А как можно очистить ардуинку от поедыдущего скетча?
Прошить следующий скетч, а если нужно очистить eeprom(только не понятно зачем?), то в примерах к штатной библиотеке eeprom есть eeprom_clear, заливаете его и ждёте немного, пока не загорится светодиод на плате нано, который подключен к 13 пину.
короче, вот это запилить вверху скетча, где-то после объявления max_DrinkCount
Приветствую. Хоть и не мне, но попробовал скомпилировать. Ругается на строку
Не появлялось ли обновлённого варианта схемы? Мне кажется, что когда я без релюшек собирал, работало от УСБ стабильно, а на релюхах, как то проседает то там то тут... Может дело не в этом, а в чём-то ещё, но мне кажется, что это они виноваты... Так то вроде нарисовал на мосфете, как раньше собирал, но пока на плате сделал на релюхах - от шнурка по USB прям проседает питание...
Не появлялось ли обновлённого варианта схемы? Мне кажется, что когда я без релюшек собирал, работало от УСБ стабильно, а на релюхах, как то проседает то там то тут... Может дело не в этом, а в чём-то ещё, но мне кажется, что это они виноваты... Так то вроде нарисовал на мосфете, как раньше собирал, но пока на плате сделал на релюхах - от шнурка по USB прям проседает питание...
на USB тока маловато
Если всю строку с memset закомментировать, то работает стабильно. Вроде бы...
я не совсем ардуинщик, и привык явно инициализировать, ибо на компе в памяти может оказаться что угодно. а тут при включении, видимо, и так ноли везде в памяти... работает - ну и хорошо)
Сколько в рублях такой курпус?
Дофига. Точно не скажу. Но автор пластик не экономил. Корпус слишком толстый. Ушло грамм 700 ( примерно). Почти катушка.
PLA BestFilament катушка 1 кг. 1590 рублей + доставка 380 р.
Без релюшек вот, на мосфете... Заказать бы плату с распайкой деталей, конечно, а не как драйвер-борд для модулей...
Поди вышло бы и дешевле и компактнее... Но я не разобрался ещё как такой заказ правильно оформить...
Acket, файлом платы не поделишься? vuster75@mail.ru
Может кому пригодится, уже стоят 15 минут и не вырубаются! Правда шли очень долго.
86,03 руб. | 10 шт. TTP223 кнопочный модуль конденсатора, одноканальный самоблокирующийся сенсорный выключатель, одноканальный переключатель трансформации
https://a.aliexpress.com/_eOiwHr