Ви не увійшли.
Ну вот - нажал на кнопку повернулось на 3 секунды
/**/
const byte btnPin = 2; // кнопка
const byte servoPin = 12; //серва
const byte ledPin = 13; //светодиод
//---------------------------
#include <Servo.h>
Servo servo;
//----автомат-------------------
typedef void (*pDo)();
pDo run = [] {};
// состояния
const byte sCLOSE = 0; // открыто
const byte sOPEN = 1 ; // закрыто
bool state;
const unsigned long time3s=3000;// константа 3 секунды
void set(bool s) {
static unsigned long past;
past = millis();
state = s;
switch (s) {
case sCLOSE:
digitalWrite(ledPin, LOW);
servo.write(90);
run = [] {};
break;
case sOPEN:
digitalWrite(ledPin, HIGH);
servo.write(0);
run = [] {
if (millis() - past >= time3s) set(sCLOSE);
};
break;
}
}
//--------кнопка-----------------------------------
pDo runBtn = [] {};
bool btn;
void setBtn(bool b) {
static unsigned long past;
btn = b;
past = millis();
switch (b) {
case false:
set(sOPEN);
runBtn = [] {
if (!digitalRead(btn) && millis() - past >= 100) setBtn(true);
};
break;
case true:
runBtn = [] {
if (digitalRead(btn) && millis() - past >= 100) setBtn(false);
};
break;
}
}
//--------------------------------------------
void setup() {
servo.attach(servoPin);
pinMode(btnPin, INPUT_PULLUP);
setBtn(false);
pinMode(ledPin, OUTPUT);
set(sCLOSE);
}
void loop() {
runBtn();
run();
}
renoshnik пише:вы хотите, что бы вам помогли или написали за вас программу ?
Я смог написать конечно программу но работает хоть бы как ,то работает то не работает , можете помочь подкорректировать или предложить другую версию программы
мой пример:#define pirPin 8
#define pirPin2 7
#define LedPin 13
#include <Servo.h>
Servo servo1;//серво первое
Servo servo;//серво второе
void setup() {
Serial.begin(9600); // Объявляем работу com порта со скоростью 9600
pinMode(pirPin, INPUT); //Объявляем пин, к которому подключен датчик движения, входом
pinMode(LedPin, OUTPUT); //Объявляем пин, к которому подключен светодиод, выходом
servo1.attach(11); // привязываем сервопривод к аналоговому выходу 11
servo.attach(12);
}void loop() {
int pirVal = digitalRead(pirPin); //Считываем значения с датчика движения. Если обнаружили движение,
int pirVal1 = digitalRead(pirPin2);
//то транслируем сигнал тревоги в монитор порта и включаем светодиод
if(pirVal == HIGH)
{
digitalWrite(LedPin, HIGH);
Serial.print("Тревога ");
delay(2000);servo1.write(5); // ставим угол поворота под 0 1 серво
servo.write(5);//ставим угол поворота под 180 2 серво
delay(3000); // ждем 3 секунды}
else if (pirVal1==HIGH)
{
Serial.print("Сканирую ");
digitalWrite(LedPin,LOW);
delay(1000);
servo1.write(85); // ставим угол поворота под 180
servo.write(85);
delay(3000); // ждем 3 секунды
}
вставьте код правильно, чтобы можно было читать и давать советы ...
вы хотите, что бы вам помогли или написали за вас программу ?
Я смог написать конечно программу но работает хоть бы как ,то работает то не работает , можете помочь подкорректировать или предложить другую версию программы
мой пример:
#define pirPin 8
#define pirPin2 7
#define LedPin 13
#include <Servo.h>
Servo servo1;//серво первое
Servo servo;//серво второе
void setup() {
Serial.begin(9600); // Объявляем работу com порта со скоростью 9600
pinMode(pirPin, INPUT); //Объявляем пин, к которому подключен датчик движения, входом
pinMode(LedPin, OUTPUT); //Объявляем пин, к которому подключен светодиод, выходом
servo1.attach(11); // привязываем сервопривод к аналоговому выходу 11
servo.attach(12);
}
void loop() {
int pirVal = digitalRead(pirPin); //Считываем значения с датчика движения. Если обнаружили движение,
int pirVal1 = digitalRead(pirPin2);
//то транслируем сигнал тревоги в монитор порта и включаем светодиод
if(pirVal == HIGH)
{
digitalWrite(LedPin, HIGH);
Serial.print("Тревога ");
delay(2000);
servo1.write(5); // ставим угол поворота под 0 1 серво
servo.write(5);//ставим угол поворота под 180 2 серво
delay(3000); // ждем 3 секунды
}
else if (pirVal1==HIGH)
{
Serial.print("Сканирую ");
digitalWrite(LedPin,LOW);
delay(1000);
servo1.write(85); // ставим угол поворота под 180
servo.write(85);
delay(3000); // ждем 3 секунды
}
простейший конечный автомат.
вы хотите, что бы вам помогли или написали за вас программу ?
2 Датчика движения HC-SR501
2 серво привода SG-5010
2 светодиода
примерно должен работать по принципу створчатых турникетов метро
то есть (датчик движения 1) замечает объект , поворачивает серво в состояние 0 и 180 (градусов).
Объект проходит и (второй датчик) запускает таймер на 3 сек чтобы вернуть серво в изначальное положение (90 и 90 градусов),
светодиоды просто горят показывая в какую сторону работает устройство
после происходит рестарт и прибор работает заново..
собираю на Arduino Mega 2560 R3
собрать не сложно , а написать программу не получается , в интернете слишком мало информации как это сделать , помогите пожалуйста