Ви не увійшли.
Доброго дня. Є стандартний екран з енкодером RepRapDiscountFullGraphicSmartController, плата RAMPS та Mega 2560.
Також є такий скетч, який робить наступне - генерується частота за допомогою tone() та виводиться на екран, частота регулються потенціометром. Переробити треба так, щоби частота змінювалась не потенциометром, а енкодером в діапазоні від 1000 до 10000герц з кроком 500гц, а також щоби ця частота була на виходах 26 та 36, як відомо, tone() може працювати одночасно тільки на одному порті, тому треба зробти якесь швидке перекидання чи якийсь інший фокус, щоби вона була на цих двух портах.
#include <U8glib.h>
#define DOGLCD_CS 16
#define DOGLCD_MOSI 17
#define DOGLCD_SCK 23
#define BTN_EN1 31
#define BTN_EN2 33
#define pson 5
const int potPin = A1;
const int StepA = 26;
const int StepB = 36;
int potValue = 0;
int frequency = 1000;
U8GLIB_ST7920_128X64_1X u8g(DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS);
void setup(void) {
u8g.begin();
pinMode(StepA, OUTPUT);
pinMode(StepB, OUTPUT);
pinMode(pson, OUTPUT);
u8g.setColorIndex(1);
}
void loop() {
u8g.firstPage();
do {
u8g.setFont(u8g_font_unifont);
u8g.setPrintPos(30, 30);
u8g.print(frequency);
u8g.print(" Hz");
} while (u8g.nextPage());
potValue = analogRead(potPin);
frequency = map(potValue, 0, 1023, 1000, 10000);
tone(StepA, frequency);
tone(StepB, frequency);
digitalWrite(pson, HIGH);
}
Из частей hex тоже можно комбинировать и составлять программы.
Можно, но зачем мне это если я получу от человека готовый скетч, который я модифицирую и внедрю куда мне нужно. Извратом заниматься нет никакого желания.
Не, ну этого в ТЗ не было, так шо звиняйте...
Ну если там hex, то в любом случае Вы сделали бессмысленные телодвижения, о чем я конечно же сожалею, но мне он не нужен, так как я буду менять абсолютно все команды (сериал сообщения) и дописывать другие функции, которые я умею дописывать, мне нужно было получить скетч с функционалом, которые я описал, я тогда использовал бы этот рабочий кусок для создания уже большого скетча. Но, к счастью, по моему заказу за 200грн уже трудится в поте лица другой специалист. Как-то так...
Вот тибе бисплатна по случаю праздника. Пользуйся
https://files.dp.ua/ru/wM34WUSyD
Это какой-то подарочный вирус на прощанье?
Наверное воздержусь от скачивания. Но спасибо))
Конечно, конечно, обязательно буду держать в курсе.
Можете уже начинать.
Ладно, пацаны, с вами весело, но у меня уже целая куча желающих сделать за 200грн с подробными коментами, с библиотекой или без,как пожелаешь. Хорошо, когда есть конкуренция, тогда можно найти исполнителя за любой бюджет, а вы сидите и ждите "крупную рыбку".
martinways пише:Скетч как раз рабочий.
Нихрена он не рабочий. Постоянно молотит в сериал никак не реагируя на кнопки. Да и не может он на них реагировать если они нигде не прописаны и не опрашиваются...
Вы прикалываетесь что ли? Я имею ввиду скетч из самого первого поста. Что он там молотит если сообщение в сериал выдает только по нажатию кнопки? Все работает, вот еще раз, если вам лень страницу перемотать
#include "GyverButton.h" /// https://github.com/AlexGyver/GyverLibs/releases/download/GyverButton/GyverButton.zip
GButton load;
GButton unload;
GButton motorstop;
void setup() {
Serial.begin(9600);
load.setStepTimeout(81);
unload.setStepTimeout(81);
}
void loop() {
int analog = analogRead(7);
motorstop.tick(analog < 940 && analog > 865); //2
load.tick(analog < 1024 && analog > 940); //1
unload.tick(analog < 865 && analog > 800); //3
if (motorstop.isSingle()) Serial.println("mStopSingle");
if (motorstop.isHold()) Serial.println("mStopHold");
if (motorstop.isDouble()) Serial.println("mStopDouble");
if (motorstop.isTriple()) Serial.println("mStopTriple");
motorstop.resetStates();
if (unload.isStep()) {Serial.println("UnLoadStep");}
if (unload.isClick()) {
Serial.println("StartLoad");
}
if (load.isStep()) {Serial.println("loadStep");}
if (load.isClick()) {
Serial.println("StartUnload");
}
}
martinways пише:Дружище, если Вы полностью прочитали мой первый пост и посмотрели скетч и у Вас возникают такие вопросы, то давайте не будем продолжать.
Дружище, если бы ваш скетч был рабочим или хотя бы нормально составлено ТЗ, думаю, ни у кого бы не возникло вопросов. Еще раз повторю с гайверовскими библиотеками не работал и изучать их функции нет никакого желания. Мог бы вам помочь и без них, но, раз пошла такая пьянка, действительно, давайте не будем продолжать.
Скетч как раз рабочий. Но к load.isClick() надо добавить запуск серии с интервалом и на срок 1 минуту, и возможность её досрочной остановки кликом кнопки motorstop.isClick или длинным нажатием load.isStep(), и это load.isStep() должно отработать так как обычно, как если бы не было запущено никакой серии, что там непонятного?? Я все нормально описал как должно работать. Вопросы только у Вас возникли и ни у кого более. А то, что за такую цену никто не хочет делать - это уже другой вопрос, это не связано с качеством ТЗ.
Пацан, попробуй включить логику ...
Если на многих форумах относятся отрицательно к гайверовскому ресурсу, неужели ты думаешь, что такое количество людей ему завидует ...
После этого возможно и на вторую часть своего вопроса сможешь ответить.
У меня лично такая логика - если я скачал библиотеку и там все функции работают как заявлено, то великого презрения она не может заслуживать. Вы мне так и не объяснили чем они так плохи.
P.S. И не развеяли мысли о зависти. На Ардуино ру про Гайвера написали старички форума (те же слова про "моветон") , думаю это просто у вас всех что-то личное к нему))) а не к его коду.
Другой форумчанин отсюда ничего плохого про эту библиотеку не сказал, так что не думаю что там все НАСТОЛЬКО плохо, чтобы аж сразу кидаться тапками в любого упоминающего Гайвера. Мне сам Гайвер по барабану, просто смешно это все.
Давайте я вам (ТС) немного уточню ситуацию.
У большинства профильных форумчан считается считается моветоном использование гайверовских библиотек.
Поэтому ваши объяснения функций этих библиотек воспринимается как бессмысленный набор действий.По моему вам лучше обращаться на гайверовский форум если использование его библиотек вам принципиально важно.
Здесь на форуме вам вполне могут помочь написать нужный код. Именно помочь, но для этого нужно желание изучать язык программирования.
Если такого желания нет, то существуют разделы для заказов, на этом форуме и на других аналогичных.
Хахаха и здесь Гайвера люто ненавидят?? Ну вы даете пацаны)) Объясните человеку не в теме за что такая "анафема" (отлучение от церкви) данному индивидууму?)))) Мне, человеку со стороны, без разницы, какую библиотеку использовать, я набрал в гугле "библиотека для кнопок" и выдало Гайвера, посмотрел, попробовал, понравилось. Это зависть или че? Посмотрел его канал, сайт, все все красиво и понятно, видно, что человек любит свое дело и старается. Разъясните, буду знать.
"Поэтому ваши объяснения функций этих библиотек воспринимается как бессмысленный набор действий." - это потому что они такие плохие эти библиотеки или только из-за того, что их Гайвер написал?
Так вам при удержании надо надо однократно или многократно?
p/s тут одних уточнений уже гривен на 100 набегает
Дружище, если Вы полностью прочитали мой первый пост и посмотрели скетч и у Вас возникают такие вопросы, то давайте не будем продолжать.
martinways пише:конечно же библиотек куча и Вы не должны их все знать.
Ну так я и прошу вас - объясните своим словами что должно выполняться при длительном нажатии кнопки
В функционале библиотеки есть вариант обработки длинного нажатия кнопки - isStep, пример кода из моего скетча - if (load.isStep()) {Serial.println("LoadStep");} - при таком коде в порт будет постоянно выдаваться сообщение LoadStep с интервалом заданным в настройках библиотеки до тех пор пока держишь кнопку. Если же например присвоить кнопке isHold - if (load.isHold()) {Serial.println("LoadStep");} - то при длительном нажатии сообщение LoadStep выдаст только 1 раз. Не знаю как еще лучше объяснить))
martinways пише:Вы что не смотрели самый первый скетч, там же все есть.
Вы думаете что все должны знать работу всех библиотек? Я, например, гайверовскими библиотеками не пользуюсь
Я имел ввиду, что в скетче есть ссылка на библиотеку и сайт разработчика (в данном случае Гайвера), конечно же библиотек куча и Вы не должны их все знать.
Объясните подробней что это значит
martinways пише:пока держишь кнопку должна отрабатываться выдача сообщений "LoadStep" в соответствии с этой функцией библиотеки.
Какой функции и какой библиотеки?
#include "GyverButton.h" /// https://github.com/AlexGyver/GyverLibs/releases/download/GyverButton/GyverButton.zip
Вот инструкции к библиотеке https://alexgyver.ru/gyverbutton/
Вы что не смотрели самый первый скетч, там же все есть.
Такая работа у нас, именно работа, а не разводилово на бОльшие чем положено суммы как всем кажется))
Я считаю, что заниматься разбором кода и подробными обучающими комментариями не имеет смысла, если за день не добавится хотя бы 1300 грн. Вот отсюда и считаем, всё по-честному ))
1300 за такую фиговенькую функцию.... ну прекрасно, что Вы себя так высоко цените. Никаких претензий. Ваше дело предложить, мое дело отказаться. Пойду лучше намотаю пару помпончиков))))
realsoft3d@gmail.com но токо не за 200 грн )) если договоримся, распишу код с комментами на понятном для тебя уровне, дальше сможешь по этой методике делать много чего, уже самостоятельно.
Спасибо за предложение, но меня удивляет почему программисты в основном не называют цену? Я же понятия не имею сколько это может стоить, также не хочу, чтобы меня разводили на круглую сумму за услугу, которая стоит гораздо дешевле. Это знаете то же самое если бы Вы хотели купить в магазине какую-то конкретную вещь, а продавец цену не говорит, а спрашивает "Сколько Вы готовы за нее заплатить", и если вы не отвечаете или называете сумму которая продавца не устраивает, то он посылает вас в другое место.
Нет на это моральных сил и времени))
Я и так уже фотошопер, веб-дизайнер, электронщик, конструктор, 3д-печатник, медик, предприниматель. Конечно же я не супер-специалист во всех этих сферах, но тем не менее мозг и терпение не резиновые)))
Может и возьмусь за Си, но пока в данный момент нет.
martinways пише:мне просто нужно получить рабочий код, который я буду внедрять в гораздо бОльший скетч управления устройством, которое я задумал. Не могу себе позволить изучать сейчас C++ ради одного устройства, я не планирую становиться программистом))
и как вы собираетесь внедрять, если не знаете и не умеете...
Я же писал выше - метод научного тыка)) У меня получается иногда лепить скетчи из кусков чужих и дописывать по аналогии, плюс библиотеки, инструкции к которым есть. Смотрю какие куски кода примерно за что отвечают, изменяю под себя и вроде получается. Уже сделал так несколько уникальных и полезных для себя устройств.
Звернись на https://freelancehunt.ua/ там швидко допоможуть.
А тут что меньше чем за 100$ никто не помогает?
Дорогой друг Honey, я понимаю, что Вы подсказываете загадками, чтобы я понял принцип и чему-то научился, благодарен Вам за это, но в данный момент для меня в приоритете затраченное время, мне просто нужно получить рабочий код, который я буду внедрять в гораздо бОльший скетч управления устройством, которое я задумал. Не могу себе позволить изучать сейчас C++ ради одного устройства, я не планирую становиться программистом))
То есть void runUnload вообще не нужно применять? Поместил все в Loop, тогда вообще все не работает, это тыкать пальцем в небо.... Еще что-то рабочее я могу изменить под себя, а с нуля эт сильно вряд ли..
#include "GyverButton.h" /// https://github.com/AlexGyver/GyverLibs/releases/download/GyverButton/GyverButton.zip
GButton load;
GButton unload;
GButton motorstop;
void setup() {
Serial.begin(9600);
load.setStepTimeout(81);
unload.setStepTimeout(81);
}
void loop() {
int analog = analogRead(7);
motorstop.tick(analog < 940 && analog > 865); //2
load.tick(analog < 1024 && analog > 940); //1
unload.tick(analog < 865 && analog > 800); //3
if (motorstop.isSingle()) Serial.println("mStopSingle");
if (motorstop.isHold()) Serial.println("mStopHold");
if (motorstop.isDouble()) Serial.println("mStopDouble");
if (motorstop.isTriple()) Serial.println("mStopTriple");
motorstop.resetStates();
if (load.isStep()) {Serial.println("LoadStep");}
if (load.isClick()) {
Serial.println("StartLoad");
}
if (unload.isStep()) {Serial.println("UnloadStep");}
if (unload.isClick()) {
Serial.println("StartUnload");
}
uint8_t flag1;
uint32_t mil1, mil1end;
for (;;) {
if (unload.isClick()) {
flag1 = 1;
mil1 = millis();
mil1end = mil1 + 60*1000;
}
if (unload.isStep()) {
flag1 = 0;
Serial.println("UnloadStep");
}
if (motorstop.isClick()) {
flag1 = 0;
Serial.println("UnLoadStop");
}
if (flag1 && millis() >= mil1) {
Serial.println("StartUnload");
mil1 += 200;
if (mil1 > mil1end) {
flag1 = 0;
}
}
}
}
Подставил свои значения и вставил это все в void runUnload() , но не работает... Что за 200грн никто не хочет помочь? На дороге 200 не валяются, а если и валяются, то недолго))
#include "GyverButton.h" /// https://github.com/AlexGyver/GyverLibs/releases/download/GyverButton/GyverButton.zip
GButton load;
GButton unload;
GButton motorstop;
void runUnload(){
uint8_t flag1;
uint32_t mil1, mil1end;
int analog = analogRead(7);
unload.tick(analog < 865 && analog > 800); //3
motorstop.tick(analog < 940 && analog > 865); //2
for (;;) {
if (unload.isClick()) {
flag1 = 1;
mil1 = millis();
mil1end = mil1 + 60*1000;
}
if (unload.isStep()) {
flag1 = 0;
Serial.println("UnloadStep");
}
if (motorstop.isClick()) {
flag1 = 0;
Serial.println("UnLoadStop");
}
if (flag1 && millis() >= mil1) {
Serial.println("StartUnload");
mil1 += 200;
if (mil1 > mil1end) {
flag1 = 0;
}
}
}
}
void setup() {
Serial.begin(9600);
load.setStepTimeout(81);
unload.setStepTimeout(81);
}
void loop() {
int analog = analogRead(7);
motorstop.tick(analog < 940 && analog > 865); //2
load.tick(analog < 1024 && analog > 940); //1
unload.tick(analog < 865 && analog > 800); //3
if (motorstop.isSingle()) Serial.println("mStopSingle");
if (motorstop.isHold()) Serial.println("mStopHold");
if (motorstop.isDouble()) Serial.println("mStopDouble");
if (motorstop.isTriple()) Serial.println("mStopTriple");
motorstop.resetStates();
if (load.isStep()) {Serial.println("LoadStep");}
if (load.isClick()) {
Serial.println("StartLoad");
}
if (unload.isStep()) {Serial.println("UnloadStep");}
if (unload.isClick()) {
Serial.println("StartUnload");
runUnload();
}
}
Есть вот мой вариант скетча на основе запуска FOR, но в нем 3 проблемы - не получается добавить в void runLoad() и void runUnload() остановку при помощи load.isStep или unload.isStep (пробовал дописывать условие else if, но не работает, может неправильно дописывал), а также если запустил серию кликом load.isClick, то если еще раз сделать клик на нее, то она уже не останавливается одним нажатием motorstop, просто проскакивает сообщение StopLoad, а серия продолжается и только по второму нажатию motorstop срабатывает остановка, ну и нет ограничения по времени. Может будет дешевле и проще доделать этот полурабочий скетч и фиг с ними уже с этими флагами
#include "GyverButton.h" /// https://github.com/AlexGyver/GyverLibs/releases/download/GyverButton/GyverButton.zip
GButton load;
GButton unload;
GButton motorstop;
long previousMillis = 0;
long interval = 100;
void runLoad(){
for (;;){
int analog = analogRead(7);
load.tick(analog < 1024 && analog > 940); //1
motorstop.tick(analog < 940 && analog > 865);//2
if (motorstop.isClick()){
Serial.println("LoadStop");
break;
}
else {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
Serial.println("StartLoad");
}
}
}
}
void runUnload(){
for (;;){
int analog = analogRead(7);
unload.tick(analog < 865 && analog > 800); //3
motorstop.tick(analog < 940 && analog > 865);//2
if (motorstop.isClick()){
Serial.println("UnloadStop");
break;
}
else {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
Serial.println("StartUnload");
}
}
}
}
void setup() {
Serial.begin(9600);
load.setStepTimeout(81);
unload.setStepTimeout(81);
}
void loop() {
int analog = analogRead(7);
motorstop.tick(analog < 940 && analog > 865); //2
load.tick(analog < 1024 && analog > 940); //1
unload.tick(analog < 865 && analog > 800); //3
if (motorstop.isSingle()) Serial.println("mStopSingle");
if (motorstop.isHold()) Serial.println("mStopHold");
if (motorstop.isDouble()) Serial.println("mStopDouble");
if (motorstop.isTriple()) Serial.println("mStopTriple");
motorstop.resetStates();
if (load.isStep()) {Serial.println("LoadStep");}
if (load.isClick()) {
Serial.println("StartLoad");
runLoad();
}
if (unload.isStep()) {Serial.println("UnloadStep");}
if (unload.isClick()) {
Serial.println("StartUnload");
runUnload();
}
}
А я откуда знаю расценки? Блин, ну я понимаю, что это не супер-сложная задача для тех, кто в теме. Делаю устройство для себя. 200грн например.
Друзья, кто и за сколько денег поможет мне допилить несложную функцию в скетч, я не учил C++ и пока не планирую, делаю скетчи при помощи библиотек и методом научного тыка, но тут уже без знаний никуда. Использовал библиотеку Гайвера обработки кнопок, есть 3 кнопки - load, unload и motorstop. В скетче расписаны разные варианты отработки нажатий кнопки - просто клик isClick, одиночное нажатие isSingle, двойное нажатие isDouble и тройное isTriple, удержание кнопки isHold, функция isStep - выдача серии сообщений с заданным интервалом пока держишь кнопку.
Значит что требуется допилить:
- При клике на кнопку load (событие load.isClick) в сериал должна запуститься выдача сообщения "StartLoad" с периодичностью например 100ms максимум на время например 1 минута, но при клике на кнопку motorstop - (событие motorstop.isClick) выдача сообщений "StartLoad" должна прекратиться и 1 раз выдается сообщение "LoadStop", также эта серия должна остановиться при длительном нажатии на кнопку load (событие load.isStep) и пока держишь кнопку должна отрабатываться выдача сообщений "LoadStep" в соответствии с этой функцией библиотеки.
- то же самое надо сделать и по отношению к кнопке unload - клик unload.isClick - запуск серии сообщений "StartUnload" интервал 100ms на 1 минуту, остановить серию преждевременно можно кликом на motorstop (событие motorstop.isClick) с однократной выдачей "UnloadStop" или же долгим нажатием на кнопку unload (unload.isStep) с выдачей "UnloadStep" в соответствии с заданным в библиотеке или настройках интервалом.
Требуется сделать это все без применения delay. Код должен быть простым и правильным))
Что-то мне там люди советовали это делать при помощи флагов, но я в этом ниче не шурупаю и нет сил разбираться, сделал запуск серии при помощи for (;;) , но мне сказали так неправильно и не все из задуманного таким образом получилось реализовать, поэтому жду Ваших предложений.
#include "GyverButton.h" /// https://github.com/AlexGyver/GyverLibs/releases/download/GyverButton/GyverButton.zip
GButton load;
GButton unload;
GButton motorstop;
void setup() {
Serial.begin(9600);
load.setStepTimeout(81);
unload.setStepTimeout(81);
}
void loop() {
int analog = analogRead(7);
motorstop.tick(analog < 940 && analog > 865); //2
load.tick(analog < 1024 && analog > 940); //1
unload.tick(analog < 865 && analog > 800); //3
if (motorstop.isSingle()) Serial.println("mStopSingle");
if (motorstop.isHold()) Serial.println("mStopHold");
if (motorstop.isDouble()) Serial.println("mStopDouble");
if (motorstop.isTriple()) Serial.println("mStopTriple");
motorstop.resetStates();
if (unload.isStep()) {Serial.println("UnLoadStep");}
if (unload.isClick()) {
Serial.println("StartLoad");
}
if (load.isStep()) {Serial.println("loadStep");}
if (load.isClick()) {
Serial.println("StartUnload");
}
}