Помогите запустить мотор 1 раз (новичок)
- Войдите на сайт для отправки комментариев
Сб, 03/03/2018 - 19:15
Доброго времени суток, собственно нужно запустить мотор один раз пока верно условие, запустить повторно только после того когда условие станет не верным и снова верным. Зарание спасибо, перечитал много но непонял, нужно наглядно.
#include <DallasTemperature.h>
#include <OneWire.h>
#define ONE_WIRE_BUS 5 // пин шины BUS DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// первый двигатель
int in1 = 9;
int in2 = 8;
// второй двигатель
int in3 = 7;
int in4 = 6;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void sendTemps()
{
sensors.requestTemperatures();
float temp = sensors.getTempCByIndex(0);
if (temp >= 20) dor1open(); // если температура >= то
}
void dor1open()
{
digitalWrite(in1, HIGH); //включить мотор
digitalWrite(in2, LOW); //включить мотор
delay(2000); //задержка
digitalWrite(in1, LOW); //остановить
digitalWrite(in2, LOW); //остановить
}
void loop()
{
sendTemps();
}
Что бы мотор запустить повторно, надо его остановить. Обычно если повторно запускаешь работающий мотор не понятно. Он работает , потому что запустили его в первый раз, или потому что во второй. ( Из "Визуальные наблюдения за поведением моторов")
Запускается на 2 секунды и останавливается это всё здесь
void dor1open() { digitalWrite(in1, HIGH); //включить мотор digitalWrite(in2, LOW); //включить мотор delay(2000); //задержка digitalWrite(in1, LOW); //остановить digitalWrite(in2, LOW); //остановить }а у меня получается что функция вызывается постоянно, вот он и едет и останавливается постоянно
//эту строчку до setup к переменным добавить boolean turnOn = true; //эти строки вместо 26 строки if (temp >= 20 && turnOn ) { dor1open(); // если температура >= то turnOn = false; } else turnOn = true;Однажды слепой попросил зрячего описать слона. Ну зрячий начал описывать. А слепой говорит: не бубни мне на уши, а покажи наглядно. Так и у людей. Люди видят не глазами ,а умом. А если человек безумен, то ему хорошее зрение не позволит рассмотреть ситуацию вокруг. Поэтому наглядно объяснить человеку кодом , как что и как работает, только если человек умеет читать код. Если вы хотите увидеть наглядно в коде, то пожалуйста подтяните свои знания чтения кода. Иначе будет один флуд в теме.
Однажды слепой попросил зрячего описать пчел.bsp;
Это "жжжжжжж" - неспроста!
//эту строчку до setup к переменным добавить boolean turnOn = true; //эти строки вместо 26 строки if (temp >= 20 && turnOn ) { dor1open(); // если температура >= то turnOn = false; } else turnOn = true;10-ую строку лучше записать так if (temp<20) turnon =true;
Спасибо, но почемуто тот же эфект, я так кстати пробовал. Всё равно dor1open() повторяется.
Попечатайте в Serial значение temp - может оно у вас около 20C скачет туды-сюды.
Спасибо так вроде работает !
Когда начинаешь сам лазить и читать голова забивается мусором и порой не видишь простых вещей, поэтому хорошо когда подскажут а ты впитаешь.
Спасибо большое !
Сколько длиться dor1open() - 2 секунды . Что делает пороцессор еще когда идет dor1open() - ничего он делаеть не может когда делаетdor1open() . А если кнопка раз нажмется . Сказано ничего. А как программа борится с дребезгом - никак. вывод. Когда все устранить, то код усложнится и разумеется ТС ничего в нем не поймет.
Не "лучше" записать, а "надо" записать. ))