#include <Servo.h> //библиотека для серводвигателей
Servo servoX;
Servo servoY; // названия для двигателей
unsigned long time_x = millis(); // переменные запоминают текущее время
unsigned long time_z = millis(); //
void setup()
{
servoX.attach(6); // подключаются двигатели и пины
servoY.attach(7);
servoX.write(90);
servoY.write(90);
Serial.begin(9600);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
}
void loop() //начинается цикл
{
while (Serial.available() > 0) // пока есть данные для считывания блю-туса
{
int cmd = Serial.read(); // переменная считывает команду с блютуса
int x = servoX.read(); // запоминает текущее положение двигателя
boolean pin3 = digitalRead(3); // текущие положения пинов
boolean pin5 = digitalRead(5);
boolean timer_z = (millis() - time_z > 500); // триггер - 1 если с момента запоминания текущего времени прошло больше полсекунды и 0 если меньше
if (millis() - time_x > 1000 && pin3) {
digitalWrite(3, LOW); } //эта хрень автоматически гасит 3 пин если он был включен секунду назад, потом будет переделано на серводвигатель наверно
switch (cmd) //свитчер
{
case 'Z' //если приходит команда Z
if (!pin5 && timer_z) { // если пин5 не горит и триггер сработал (1)
digitalWrite (5, HIGH); //зажигает пин
time_z = millis();} // и запоминает текущее время для обновления триггера
else if (pin5 && timer_z) { // то же самое, но наоборот
digitalWrite (5, LOW);
time_z = millis();}
break; //если триггер timer_z не сработал (0), то начинает цикл сначала
case 'X': // это включается пин3, который сам выключится через секунду
time_x = millis();
digitalWrite(3, HIGH);
break;
case 'R': //меняют угол серва на 1 градус за цикл туда или сюда
if (x < 180) { servoX.write(x + 1); }
break;
case 'L':
if (x > 0) { servoX.write(x - 1); }
break;
}
delay (20) //задержка между циклами
}
}
... и добавил:Pitsot, ты че делаешь
