Помогите новичку!

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Ок, если еще не запарил, то мне непонятно, что такое start/stop, а также смысл переменной-члена класса s? Иначе с т.з. кнопки - это можно понять по-разному. Например, принудительно считать, что кнопка была нажата, принудительно считать, что кнопка была отжата, вроде бы смысл какой то наблюдается. А вот что такое смена нажата на отжата или отжата на нажата, как то с трудом понимаю смысл этих действий. Отсюда будет и название действия, когда будет понятен смысл этого действия. toggleStartStop тоже как то криво, хотя, в моем понимании более или менее нормально, пока не понимаю смысл этого действия. А еще это можно понять, как начать/закончить отслеживание какого то события, например, длительности нажатия кнопки, типа нажата дольше какого то времени. Короче контекст объяснит всё.

Философия ON [можно игнорировать]

А еще, если это действительно отслеживание длительности нажатия, то тут уже возникает вопрос наследования от базового класса, а не лепить все яйца в одну корзину, хотя в embedded порожденные классы - это скорее нонсенс. Зато базовый класс можно вылизать и забыть про него, а в порожденном накидать функциональность отслеживания длительности нажатия. Ладно, это философия, можно забить, если не труЪ. А если еще подбросить какашек на вентилятор, то можно использовать разные длительности, типа 0,5с это генерация повтора нажатия, 2с - переход в режим редактирования, 3с - выход в главное меню. Это всё условные события, как пример того, что длительность нажатия может быть разной.

PS Работы мало, вот меня и прет пофилософствовать ;)

Философия OFF

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

какая тема -> какой вопрос -> такой и ответ должен быть ! 

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

kisoft пишет:

Ок, если еще не запарил, то мне непонятно, что такое start/stop, а также смысл переменной-члена класса s? Иначе с т.з. кнопки - это можно понять по-разному. Например, принудительно считать, что кнопка была нажата, принудительно считать, что кнопка была отжата, вроде бы смысл какой то наблюдается. А вот что такое смена нажата на отжата или отжата на нажата, как то с трудом понимаю смысл этих действий. Отсюда будет и название действия, когда будет понятен смысл этого действия. toggleStartStop тоже как то криво, хотя, в моем понимании более или менее нормально, пока не понимаю смысл этого действия. А еще это можно понять, как начать/закончить отслеживание какого то события, например, длительности нажатия кнопки, типа нажата дольше какого то времени. Короче контекст объяснит всё.

смысл переменной s простой: запустил start() - поехало. запустил stop() - остановилось.

НО! на практике юзание start()&stop() оказывается неудобно, т.к. что-то делает, но не возвращает состояние.

пример мигания светодиода, запускаемого/отсанавливаемого нажатием кнопки:


#include <class_BUTTON.h>
#include <class_noDELAY.h>

BUTTON BUTTON_01(3);
noDELAY nD_01;

void setup () {
pinMode(14, OUTPUT); // LED_01
digitalWrite(14, 1);
}

void loop() {
BUTTON_01.read();
nD_01.read(1000); // 

if (BUTTON_01.click_down) {nD_01.s = !nD_01.s; digitalWrite(14, !nD_01.s);}

if (nD_01.tick) {digitalWrite(14, !digitalRead(14));}
}

класс class_noDELAY.h

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// класс титановый велосипед для delay без delay().
// динамически управляемая генерация событий с динамически изменяемым интервалом времени между событиями.

#include <Arduino.h>

class noDELAY {

public:
unsigned long previous;
unsigned long interval;
boolean s;
boolean tick;

noDELAY() {
previous = millis();
s        =        0;
tick     =        0;
}

void start()                        {s =  1;                      }
void  stop()                        {s =  0;                      }
// void start_stop()                   {s = !s;                      } // ???

void  read(unsigned long _interval) {
              interval = _interval;
unsigned long current  =  millis();                      tick = 0;
if (s                  ==        0) {previous = current;          }
if (current - previous >  interval) {previous = current; tick = 1;}
}

};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

получается, что start()&stop() нафиг не нужно.

kisoft пишет:

А еще, если это действительно отслеживание длительности нажатия

не - функционал работы с кнопкой находится в классе class_BUTTON.h класс титановый велосипед для тактовой кнопки.

а, для работы с интервалами между событиями есть совсем простой класс, который возвращает интервал между последним и предпоследним событием.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

опять 322.....
:(
"крайним и предкрайним событием" - а то сибе накаркаешь ( ......  .......     ......    ....... , бля )

как переменную ( или функцию ) звать-то будешь ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

конкретная ложь !!!!!!!!!!!!!!
н е ч е г о повреждать-то :)

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Вообще, в моем понимании noDELAY, start - это фактически {s = 0; read(millis()); s = 1;}

В read было бы логично при инициализации previous устанавливать s = 1; в конце строки 28 внутри скобок. В этом ключе stop нафиг не нужен. Вместо стоп, достаточно в строке 29 вместе с tick = 1; устанавливать s = 0;

А еще tick лучше сбрасывать при старте. Не в 27 строке, а в 28 внутри скобок. Это для того, чтобы знать, сработало ли предыдущее событие до старта текущего. Иначе получается, что tick сбрасывается случайным "образом", т.е. непрогнозируемо в методе read, который будет вызван неизвестно когда и мы моем легко пропустить срабатывание события. А если сбрасывать тик по старту нового ожидания, то это логичней.

Я бы вообще s забил в приват и никому бы его не показывал, потому что эта переменная нафиг не нужна снаружи класса. Ладно, не буду тебе мозг маять, у меня своё видение, у тебя - своё. Боюсь мы друг друга можем не понять. :) 

 

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

kisoft пишет:

Иначе получается, что tick сбрасывается случайным "образом", т.е. непрогнозируемо в методе read, который будет вызван неизвестно когда и мы моем легко пропустить срабатывание события. А если сбрасывать тик по старту нового ожидания, то это логичней.

ну, да - один уже забил обработчик класса титановой кнопки в цикл и спрашивал, почему кнопка не работает.

*ежу понятно, что код не реалтайм - всё происходит в лупе.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Вот вот, про то я и пишу, что тик надо сбрасывать либо при старте отслеживания нового события, либо еще можно сбрасывать при чтении, но тогда здесь тоже найдутся Колумбы, которые будут считывать по нескольку раз и набрасывать говнеца на вентилятор.

Классы вообще надо рассматривать как черный ящик, который не позволяет шаловливым ручкам делать что они захотят. Потому я и говорю, что все внутренние переменные должны быть недоступны. Оставляют обычно только паблик методы, которые позволяют делать только то, что можно, а не то, что хочу. Еще есть плюсы в том, что внутернние переменные закрыты и для них делаются геттеры/сеттеры (т.е. доступ к переменных только через паблик методы), что например, в сеттер можно добавить не только установку переменной, но и какое то действие. Как пример (не совсем, но всё-таки) то, что я писал про start, когда он не только s=1, но сначала запускает read(millis()), например. Хотя read я бы переделал (писал в предыдущих сообщениях), тогда он будет независим от того, как часто он запускается.

 

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

kisoft пишет:

Вот вот, про то я и пишу, что тик надо сбрасывать либо при старте отслеживания нового события, либо еще можно сбрасывать при чтении, но тогда здесь тоже найдутся Колумбы, которые будут считывать по нескольку раз и набрасывать говнеца на вентилятор.

так и происходит

25 void  read(unsigned long _interval) {
26               interval = _interval;
27 unsigned long current  =  millis();                      tick = 0;

kisoft пишет:

Классы вообще надо рассматривать как черный ящик, который не позволяет шаловливым ручкам делать что они захотят. Потому я и говорю, что все внутренние переменные должны быть недоступны. Оставляют обычно только паблик методы, которые позволяют делать только то, что можно, а не то, что хочу. Еще есть плюсы в том, что внутернние переменные закрыты и для них делаются геттеры/сеттеры (т.е. доступ к переменных только через паблик методы), что например, в сеттер можно добавить не только установку переменной, но и какое то действие. Как пример (не совсем, но всё-таки) то, что я писал про start, когда он не только s=1, но сначала запускает read(millis()), например. Хотя read я бы переделал (писал в предыдущих сообщениях), тогда он будет независим от того, как часто он запускается.

ты в который раз повторяешь read(millis()) - я не понимаю, что это и как делает.

по поводу переменной s - и, какая разница, чем ты будешь ею рулить, если её НУЖНО изменять.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Я предполагал, что этот класс используется другим образом. Теперь я понимаю, что я вообще ничего не понял. Ну тогда нафиг. Себе и тебе мозг заполоскал. Извини. :)

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

зацените жучок для прослушки

http://www.online-life.cc/1173-strela-2012.html

1 сезон 6 серия 25:35

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

jeka_tm пишет:

зацените жучок для прослушки

http://www.online-life.cc/1173-strela-2012.html

1 сезон 6 серия 25:35

  А чего нам в нем оценивать? Все эти вещи уже давно оценены и расценены в УК РФ ст.138.1, если не ошибаюсь )))

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Весна, спамеры расцвели, вот нескушный сад, мля. Иногда по нескольку раз в день попадаются. Когда ж им жабу то разорвет. На необитаемый остров и никакого интернета!

Araris
Offline
Зарегистрирован: 09.11.2012

Ага, чищу неустанно, особенно умиляет спам на польском языке (тексты, впрочем, не отличаются от русских/английских).

В аду у спаммеров отдельный большой котёл, и дрова под него подкладывают не черти, а прочие грешники ))).

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Probelzaelo пишет:

jeka_tm пишет:

зацените жучок для прослушки

http://www.online-life.cc/1173-strela-2012.html

1 сезон 6 серия 25:35

  А чего нам в нем оценивать? Все эти вещи уже давно оценены и расценены в УК РФ ст.138.1, если не ошибаюсь )))

шутник посмотри сначала

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

jeka_tm пишет:

зацените жучок для прослушки

http://www.online-life.cc/1173-strela-2012.html

1 сезон 6 серия 25:35

Не очень разглядел, конденсатор что ли в карман ему бросил? :)

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

Jeka_M пишет:

Не очень разглядел, конденсатор что ли в карман ему бросил? :)

странно - раньше они литиевыми батарейками всех прослушивали

Картинки по запросу литиевая батарейка

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Araris пишет:

Ага, чищу неустанно, особенно умиляет спам на польском языке (тексты, впрочем, не отличаются от русских/английских).

В аду у спаммеров отдельный большой котёл, и дрова под него подкладывают не черти, а прочие грешники ))).


Что б их так дети кормили. :)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Jeka_M пишет:

Не очень разглядел, конденсатор что ли в карман ему бросил? :)

ага))

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

jeka_tm пишет:

Probelzaelo пишет:

jeka_tm пишет:

зацените жучок для прослушки

http://www.online-life.cc/1173-strela-2012.html

1 сезон 6 серия 25:35

  А чего нам в нем оценивать? Все эти вещи уже давно оценены и расценены в УК РФ ст.138.1, если не ошибаюсь )))

шутник посмотри сначала

да посмотреть то посмотрел, но таки разглядеть совсем не удалось, размазано все

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

Спасибо, разжевали-с ))  Интеесно где они там нашли "раздетый" электролит )) или реквизиторы потрудились сняли термоусадочку ))))

droid
Offline
Зарегистрирован: 02.04.2016
Нужно спроектировать, а в идеале собрать робота
 
Назначение:
 Прохождение каждого метра в заданном квадрате несмотря на уклоны (не большие) и почву(не крупная пахота), проверка цвета почвы - если найден цвет, остановка, доп проверка, фиксация на GPS, маркировка на месте.
 
 Управление: через сервер и GSM модуль в идеале. (сервер есть - серверную часть сделаю). Доп способ управления - Телеметрия и т.п. (нужен ваш опыт и мнение).
 Ходовая: моторы от шуруповертов 12В по двум сторонам, поворот за счет движения одной строны, колеса диаметром 300мм из пулеуретана. Остальное чем легче тем лучше.
 Вес: в зависимости от нужного количества акумуляторов и оборудования.
 Размер: 1м на 1м (не строго) главное устойчивость.
 Питание: аккумуляторы с перспективой заменить на бензогенератор.
 Скорость: от 1 до 10км час. (нужна регулировка скорости).
 Желаемое расстояние на одном заряде: 100 на 100метров.
 
 Очень важно проходить каждый метр независимо от пробуксовки и почвы - что приводит к мысли движения по GPS + компас  и корректировки хода контроллером.
 
 Что есть: 
 1.АПМ 2.6 + ЖПС+ Компас 
 2.Ардуины разные + ЖПС и любой нужный модуль
 3.Моторы шуруповертов на 12в и током до 10А
 
 С большим уважением отнесусь к помощи людей которые сталкивались с подобными задачами и смогут помоч советом.
Probelzaelo
Offline
Зарегистрирован: 15.04.2011

Порубилли парубков. А чего там ниггеры среди мяса? совсем кусать нечего в незалэжной?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

или только в Киеве и живут ?

Sogdiec
Offline
Зарегистрирован: 23.04.2016

Добрый день всем!
Коль для чайно-чайнутых тем нет, позвольте со своим наивом здесь к вам, эксперты, обратиться с горстью моих вопросов.
Конечно, если у кого найдется время и возможность - просветите, пожалуйста, буду признателен. 

Собираю слайдер на основе рельсы и каретки HIWIN. Планирую его "обвесить" моторчиками и вдохновится созданием таймлапсов. Средний вес конструкции на рельсе(1метр) - около 1,5-2 кг предполагаю - каретка, голова под фотоаппарат сам фот + блок вращения по другой оси..

1. Как я понимаю - мне придется собрать два слайдера - под свои задачи. Один слайдер планирую использовать в видеорежиме - набирать репортажные фрагменты разных событий(свадьба, концерт) в движении камеры, которую планирую запускать в ритме  "маятника" - вариант с концевиками, переключащими на обратный ход; скорость перемещения каретки 20-200 секунд за метр. Какие DC-движки есть для этих задач и какие к ним есть блоки управления (на алиэкспр или-или)?

2. Второй вариант слайдера - для таймлапсов (фото-режим) и как понимаю - здесь уже нужны шаговые движки. Один движок планирую на движение каретки по рельсе через привод на резьбовой рейке (грубо 200руб/метр - самое простое решение). Второй движок разместить на каретке в блоке для движения камеры по линии горизонта (тут я уже, наверное, через чур фантазирую - хотя бы по рельсе двигать для начала :) ) . Nema 17? Какой к нему нужен простейший драйвер/контроллер для движения по рельсе со скоростью 15-200минут/метр? 

 

Sergante
Offline
Зарегистрирован: 06.05.2016

Еще попыта - я под другим именем(Sogdiec) нечаянно вновь зарегился.. уж извините..
Итак, я пока к чему пришел - для фото-таймлапсов надо бы собрать NEMA17+ ардуино и пр.

Коль решит кто ..снизойти - надеюсь, подскажете - где и каким "поездом" далее двигаться :)

Пока читаю, изучаю - как за-драйверить ардуино-плату - нашел здесь на сайте. Схемы подключения - https://robom.ru/blog/mehanica/shagovyj-dvigatel-i-ego-drajver.html
И пока два вопроса остается:

1. Как синхронизировать АРдуино с моим фотоаппаратом gh3? В фоте есть режим интервальной съемки. И чтоб создать синхрон - надо либо комммуницировать фот с Ардуино, либо дисплей в схему ввести.. В общем - пока запутался..

2. Писать скетчи - не мое.. Наверняка есть простые и готовые скетчи, которые можно использовать для движения каретки по рельсе в синхроне с фотографирующим фотоаппаратом..?