Здравствуйте друзья. Помогите пожалуйста доработать код. Код (C++): #include <OneWire.h> // Подключаем библиотеку для работы с шиной OneWire OneWire oneWire(2); // Термометр будет подключен на 2 пин в ардуино #include <DallasTemperature.h> //Подключаем библиотеку для работы с термометром DallasTemperature ds(&oneWire); //Создаем объект ds, подключенный по OneWire #include <Stepper_28BYJ.h> #define STEPS 4078 // изменить количество шагов для вашего мотора Stepper_28BYJ stepper(STEPS, 8, 9, 10, 11); //пины на ардуино DeviceAddress sensorMILD = {0x28, 0xF4, 0x5B, 0x5C, 0x06, 0x0, 0x0, 0x4E}; //адрес датчика void setup() { ds.begin(); stepper.setSpeed(13); // установим скорость вращения } void loop() { ds.requestTemperatures(); // считываем температуру с датчика ds18b20 if (ds.getTempC(sensorMILD) >= 29) //условие если температура >= 29C крутим мотор на 4000 шагов { stepper.step(4000); // Делаем 4000 шагов в одну строну } if (ds.getTempC(sensorMILD) == 27) //условие если температура == 27C крутим мотор на -4000 шагов { stepper.step(-4000); // Делаем 4000 шагов в другую строну } delay(3000); } Как видно из кода, шаговый мотор будет открывать или закрывать форточку в теплице при определенных условиях температуры. Но мне хотелось бы реализовать другой алгоритм работы открывания,закрывания,а так как я в программирование полный ноль прошу Вашей помощи. Пример того ,что я хочу от другого алгоритма; Допустим, максимальное открытие форточки будет =4000 шагам следовательно максимальное закрытие форточки должна будет =-4000 шагам При температуре>= 29 шаговый мотор должен сделать 4000 шагов один раз (открыли форточку) При температуре ==27 шаговый мотор должен сделать -4000 шагов один раз (закрыли форточку) Проблема в том,что в моем сектче мотор крутится в каждом цикле пока не достигнет заданных температур. Извиняюсь за сумбурно изложенный вопрос.
у вас не предусмотрена система отслеживания положения форточки(концевик, геркон) поэтому при включении или перезагрузке мк вне зависимости от положения форточки всегда будет нулевое значение шагов. форточка, допустим, открыта. при повышении температуры шаговик опять начнёт её открывать. когда сделаете отслеживание положения форточки тогда и код немного поменяется и решится ваша проблема
vvr спасибо за наводку,пойду думать. Вот подредактировал скетч,всё заработало . Если не трудно, посмотрите пожалуйста код, с профессиональной точки зрения ,не попадутся ли какие ни будь подводные камни в будущем . Спасибо. Код (C++): #include <OneWire.h> // Подключаем библиотеку для работы с шиной OneWire OneWire oneWire(2); // Термометр будет подключен на 2 пин в ардуино #include <DallasTemperature.h> //Подключаем библиотеку для работы с термометром DallasTemperature ds(&oneWire); //Создаем объект ds, подключенный по OneWire #include <Stepper_28BYJ.h> #define STEPS 4078 // изменить количество шагов для вашего мотора Stepper_28BYJ stepper(STEPS, 8, 9, 10, 11); //пины на ардуино DeviceAddress sensorMID = {0x28, 0xF4, 0x5B, 0x5C, 0x06, 0x0, 0x0, 0x4E}; //адрес датчика const int buttonPin = 3; // номер входа, подключенный к кнопке int buttonState = 0; // переменная для хранения состояния кнопки void setup() { ds.begin(); stepper.setSpeed(13); // установим скорость вращения pinMode(buttonPin, INPUT); // инициализируем пин, подключенный к кнопке, как вход } void loop() { ds.requestTemperatures(); // считываем температуру с датчика ds18b20 buttonState = digitalRead(buttonPin); // считываем значения с входа кнопки if (ds.getTempC(sensorMID) > 29) //условие если температура > 29C крутим мотор на 1000 шагов { if (buttonState == HIGH) //если кнопка замкнута { stepper.step(1000); //крутим мотор на 1000 шагов } if (buttonState == LOW) //если кнопка разомкнута { stepper.step(0); //мотор не крутится } } if (ds.getTempC(sensorMID) < 27) //условие если температура <27C крутим мотор на -1000 шагов { if (buttonState == HIGH) //если кнопка замкнута { stepper.step(0); //мотор не крутится } if (buttonState == LOW) //если кнопка разомкнута { stepper.step(-1000); //крутим мотор на -1000 шагов } } delay(3000); }
Если речь идет о подтягивающим резисторе R1 -10К ,то я его включил в схему. С избавлением от делеев буду читать примеры .
дребезг это не отсутствие подтягивающего резистора почитайте http://greenoakst.blogspot.com/2012/06/arduino-bounce.html