void longPressStart2() {
digitalWrite(MOTOR1, 0); delay(400);
digitalWrite(MOTOR2, 1); delay(5000); digitalWrite(MOTOR2, 0);
}
Реверс двигателя без концевиков стопа, параллельно выполняются другие действия. Как заменить delay.
void longPressStart2() {
digitalWrite(MOTOR1, 0); delay(400);
digitalWrite(MOTOR2, 1); delay(5000); digitalWrite(MOTOR2, 0);
}
Реверс двигателя без концевиков стопа, параллельно выполняются другие действия. Как заменить delay.
3.2.1… картинка исчезает!
@alexshuv72 если хотите помощи, - вставьте код полностью, что бы любой мог его скомпилировать у себя. И не забудьте отформатироваться его, прежде чем выложить по правилам форума.
Читать про миллис. Долго читать, пока не дойдет. Иначе никак.
Форум не благотворительный кружок по бесплатному написанию кода для лентяев.
какие действия? тут несколько вариантов решения возможны, но желательно понимать, что ваш скетч делает.
если скетч сферический, в вакууме, тогда ответ будет сообразным: вам нужно сделать цикл, внутри которого считывать текущее значение времени , сравнивать его с какими-то своими числами и, по достижении нужных интервалов - вызывать ваши digitalWrite() с мотором связанные, а все остальное время можете делать “другие действия“
#define MOT1 11
#define MOT2 12
#define MOT3 10
#define ButtonPin_1 3
#define ButtonPin_2 2
#define ButtonPin_3 4
#include “OneButton.h”
OneButton button1(ButtonPin_1, true);
OneButton button2(ButtonPin_2, true);
OneButton button3(ButtonPin_3, true);
void setup() {
pinMode (MOT1, OUTPUT);
pinMode (MOT2, OUTPUT);
pinMode (MOT3, OUTPUT);
button1.attachLongPressStart(longPressStart1);
button2.attachLongPressStart(longPressStart2);
button3.attachLongPressStart(longPressStart3);
button1.setPressTicks(500);
button2.setPressTicks(50);
button3.setPressTicks(50);
button1.setClickTicks(500);
button2.setClickTicks(50);
button3.setClickTicks(50);
}
void loop() {
button1.tick();
button2.tick();
button3.tick();
}
void longPressStart1() { //вперед
digitalWrite(MOT1, 1);
}
void longPressStart2() { //назад
digitalWrite(MOT1, 0); delay(400);
digitalWrite(MOT2, 1); delay(5000); digitalWrite(MOT2, 0);
}
void longPressStart3() { //если не открылся
static int m = LOW;
m = !m;
digitalWrite(MOT3, m); digitalWrite(MOT1, 0); delay(400);
digitalWrite(MOT2, 1); delay(3000); digitalWrite(MOT2, 0);
}
Все просто я не программист решил сделать на авто открывание багажника с помощью линейного привода
из библиотек делаю свой скетч можно было оставить и так но хочу добавить датчик по току иногда не открывается
замок хочу избавиться от delay пару дней боролся с милс но он меня пока побеждает не останавливается цикл видимо
чтото не допанимаю.
Это не главная проблема. Главная проблема в том, что Вы не умеете читать. А без этого умения … “милс всегда будет Вам побеждать!”
Вы вот это видели?
Так, какого ж …?
```
#define MOT1 11
#define MOT2 12
#define MOT3 10
#define ButtonPin_1 3
#define ButtonPin_2 2
#define ButtonPin_3 4
#include "OneButton.h"
OneButton button1(ButtonPin_1, true);
OneButton button2(ButtonPin_2, true);
OneButton button3(ButtonPin_3, true);
void setup() {
pinMode (MOT1, OUTPUT);
pinMode (MOT2, OUTPUT);
pinMode (MOT3, OUTPUT);
button1.attachLongPressStart(longPressStart1);
button2.attachLongPressStart(longPressStart2);
button3.attachLongPressStart(longPressStart3);
button1.setPressTicks(500);
button2.setPressTicks(50);
button3.setPressTicks(50);
button1.setClickTicks(500);
button2.setClickTicks(50);
button3.setClickTicks(50);
}
void loop() {
button1.tick();
button2.tick();
button3.tick();
}
void longPressStart1() { //вперед
digitalWrite(MOT1, 1);
}
void longPressStart2() { //назад
digitalWrite(MOT1, 0); delay(400);
digitalWrite(MOT2, 1); delay(5000); digitalWrite(MOT2, 0);
}
void longPressStart3() { //если не открылся
static int m = LOW;
m = !m;
digitalWrite(MOT3, m); digitalWrite(MOT1, 0); delay(400);
digitalWrite(MOT2, 1); delay(3000); digitalWrite(MOT2, 0);
}
```
Отлично. Спасибо за правильное оформление кода.
Только это не тот код.
Вы вставили код с делеями. А вам надо показать свои попытки заменить делеи на миллис
```
#define MOT2 11 // реверс
#define MOT3 12 //
#define SENSOR A0
//#define RelayPin_1 5 // управление отрицательным "0"
//#define RelayPin_2 6 // управление отрицательным "0"
uint32_t tmr; // переменная таймера
bool state; // состояние таймера
#define ButtonPin_1 2
#define ButtonPin_2 3
#include "OneButton.h"
OneButton button1(ButtonPin_1, true);
OneButton button2(ButtonPin_2, true);
//OneButton button3(ButtonPin_3, true);
//unsigned long timing;
void setup() {
Serial.begin(9600);
//pinMode (AIN1, OUTPUT);
pinMode (AIN2, OUTPUT);
pinMode (AIN3, OUTPUT);
button1.attachLongPressStart(longPressStart1);
button2.attachLongPressStart(longPressStart2);
//button3.attachLongPressStart(longPressStart3);
button1.setPressTicks(50);
button2.setPressTicks(50);
//button3.setPressTicks(100);
button1.setClickTicks(50);
button2.setClickTicks(50);
//button3.setClickTicks(100);
// запустить таймер
tmr = millis();
state = true;
}
void loop() {
button1.tick();
button2.tick();
//button3.tick();
int val = analogRead(SENSOR);
//Serial.println(val);
if (val > 570) {
//digitalWrite(AIN1, 0); delay(4000); digitalWrite(AIN2, 0);
}
tmr = millis();
state = true;
}
void longPressStart1() { //назад
digitalWrite(MOT1, 1); //delay(4000);
//digitalWrite(MOT2, 0); delay(5000); digitalWrite(MOT2, 0);
}
void longPressStart2() {
digitalWrite(MOT2, 0);
// включить светодиод
digitalWrite(MOT, 1);
if (state && millis() - tmr >= 3000) {
// остановить таймер
state = false;
// выключить светодиод
digitalWrite(MOT2, 0);
}
}
```
Это последний черновик с началом по току. Собираю на макетке с диодами.
Ваши функции longPressStart1() и longPressStart2() в коде нигде не вызываются. Каким образом вы предполагаете что-то будет работать?
внимательнее! Это коллбэки. стр 30 и 31
и объяснить человеку, как переделать коллбэки без делей будет ох как непросто… если он “не программист”. Но пробуйте! Совершенствуйте педагогический скилл! ![]()
ТС, дорогой. Колбэк переделать нельзя. МОжно вместо этого сделать так:
в колбэке ты только поднимаешь флаг. А в бесконечном цикле loop() ты проверяешь флаги и делаешь неблокирующие действия, как учат в примере “блинк без делей”.
Попробуй… если IQ трехзначный - должно получиться.
без обидок, бевакаша.
Точно. Я слепой
Прихожу в больницу говорю доктор болит голова
Доктор: как болит?
Я: сильно
Доктор: Где болит?
Я: везде
Доктор: как лечили?
Я: ни как
P.S. ЕСЛИ-БЫ Я БЫЛ ДОКТОРОМ Я В БОЛЬНИЦУ НЕ ПОШЁЛ-БЫ!!!
Поучать и ёрничать может каждый, а дать дельный совет навряд ли!!!
Я зашёл в раздел для новичков а не в Академию “королей программирования”!!!
А никто и не ерничал. Вам дали совет. Если вы его не поняли - переспросите.
Но не рассчитывайте, что кто-то напишет вам готовый код.
Тема миллис обсосана во всех учебниках и в примерах до безобразия, нужно только желание научиться.
я ж написал: без обид, пожалуйста!
Все точно тебе написал:
вот тебе от ИИ приличный пример.
переменная flag допустим где-то поднимается… в каком-то колбеке.
У тебя, для отслеживания состояния чего-то, в данном примере светодиода, появляется еще одна переменная ledOn.
При поднятом флаге и выключенном объекте (тут можно еще одну проверку добавить) ты сбрасываешь внешний флаг, шоп потом второй раз не сработало, и поднимаешь внутренний.
НУ все ж понятно? Еще нет?
const int ledPin = 13;
bool flag = false;
bool ledOn = false;
unsigned long timer = 0;
const unsigned long delayTime = 1000; // 1 секунда
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
// где-то в коде флаг может быть поднят, например в колбэке
// flag = true;
if (flag) {
flag = false; // сбросили, чтобы не повторялось
ledOn = true; // включаем
digitalWrite(ledPin, HIGH);
timer = millis(); // запоминаем момент включения
}
if (ledOn && millis() - timer >= delayTime) {
digitalWrite(ledPin, LOW);
ledOn = false;
}
}
Код написан и представлен единственный недостаток что во время (delay) я не могу выполнить другие действия которыми хочу дополнить скетч:
ButtonPin_1 3 (-) с сигналки включается линейный привод толкает крышку багажника
ButtonPin_2 2 2команда(-) концевик который включает: стоп, пауза, реверс, отключение реверса
ButtonPin_3 4 3команда(-) доп канал с сигналки(если не сработал замок багажника и “ток превысил допустимое значение” в написании) стоп,пауза,реверс,отключение.
```
#define MOT1 11
#define MOT2 12
#define MOT3 10
#define ButtonPin_1 3
#define ButtonPin_2 2
#define ButtonPin_3 4
#include "OneButton.h"
OneButton button1(ButtonPin_1, true);
OneButton button2(ButtonPin_2, true);
OneButton button3(ButtonPin_3, true);
void setup() {
pinMode (MOT1, OUTPUT);
pinMode (MOT2, OUTPUT);
pinMode (MOT3, OUTPUT);
button1.attachLongPressStart(longPressStart1);
button2.attachLongPressStart(longPressStart2);
button3.attachLongPressStart(longPressStart3);
button1.setPressTicks(500);
button2.setPressTicks(50);
button3.setPressTicks(50);
button1.setClickTicks(500);
button2.setClickTicks(50);
button3.setClickTicks(50);
}
void loop() {
button1.tick();
button2.tick();
button3.tick();
}
void longPressStart1() { //вперед
digitalWrite(MOT1, 1);
}
void longPressStart2() { //назад
digitalWrite(MOT1, 0); delay(400);
digitalWrite(MOT2, 1); delay(5000); digitalWrite(MOT2, 0);
}
void longPressStart3() { //если не открылся
static int m = LOW;
m = !m;
digitalWrite(MOT3, m); digitalWrite(MOT1, 0); delay(400);
digitalWrite(MOT2, 1); delay(3000); digitalWrite(MOT2, 0);
}
Аминь!
Ну шо, православные! Спорить будем?
Ваши ставки, господа!