Помогите с кодом

AthemosT
Offline
Зарегистрирован: 19.02.2016

Всем привет! Нужна помощ! есть робот, он вращает головой, влево и вправо. Вставлены светодиоды в глаза и светодиод сверху головы. Это управляется с ИК пульта

 

 

Вот код:

#include <IRremote.h>
#include <IRremoteInt.h>
#include <Servo.h>

Servo servoHEAD; // Объект Servo
int RECV_PIN = 6; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
int LEDL = 5; //левый глаз
int LEDR = 4; //правый глаз
int LEDH = 7; //голова
void setup()

{
  pinMode (LEDR, OUTPUT);
  pinMode (LEDL, OUTPUT);
  pinMode (LEDH, OUTPUT);
  irrecv.enableIRIn(); // включить приемник
  servoHEAD.attach(10); // Servo присоединен к 10 выводу
}

void loop() {

  if (irrecv.decode(&results))
  {
    if (results.value == 0xFD00FF) //кнопка 1 поворачивает голову на 45 в право
    {
      servoHEAD.write(45);
    }
    if (results.value == 0xFD807F)//кнопка 2 вертит головой
    {
      servoHEAD.write(45);
      delay(500);
      servoHEAD.write(90);
      delay(500);
      servoHEAD.write(135);
      delay(500);
      servoHEAD.write(90);
    }

    if (results.value == 0xFD10EF) //кнопка 7 вкл глаза
    {
      digitalWrite(LEDR, HIGH);
      digitalWrite(LEDL, HIGH);
    }
    if (results.value == 0xFD906F)//кнопка 8 выкл глаза
    {
      digitalWrite(LEDR, LOW);
      digitalWrite(LEDL, LOW);
    }
    if (results.value == 0xFD50AF)//кнопка 9 цикл глаза
    {
      digitalWrite(LEDR, HIGH);
      delay(400);
      digitalWrite(LEDL, HIGH);
      delay(400);
      digitalWrite(LEDH, HIGH);
      delay(400);
      digitalWrite(LEDR, LOW);
      delay(400);
      digitalWrite(LEDL, LOW);
      delay(400);
      digitalWrite(LEDR, HIGH);
      delay(400);
      digitalWrite(LEDL, HIGH);
      delay(400);
      digitalWrite(LEDR, LOW);
      delay(400);
      digitalWrite(LEDL, LOW);
      delay(400);
      digitalWrite(LEDR, HIGH);
      delay(400);
      digitalWrite(LEDL, HIGH);
      delay(400);
      digitalWrite(LEDR, LOW);
      delay(400);
      digitalWrite(LEDL, LOW);
      delay(400);
      digitalWrite(LEDH, LOW);
      //тут должна быть какаято команда чтоб цикл начался с начала, пока не нажмётся кнопка отмены
    }


    irrecv.resume();
  }
}

Как сделать чтоб в низу кода когда нажимаю на 9 кнопку они мигали постояноо, пока не нажмётся какая нибудь кнопка отмены мигания?  Я извеняюсь если обЬяснил что то не правильно. 

AthemosT
Offline
Зарегистрирован: 19.02.2016

Прошу прощения, незнаю как так вышло что создалось 3 темы! 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Как-то так:

 if (results.value == 0xFD50AF)//кнопка 9 цикл глаза
{
  enableBlink=true;
}

Эту функцию вызывать из loop

void Blink()
{
 if (enableBlink && millis()-time>=400)
 {
  time=millis();
  switch (st)
  {
   case 0: digitalWrite(LEDR, HIGH); st++; break;
   case 1: digitalWrite(LEDL, HIGH); st++; break;
   case 2: digitalWrite(LEDR, LOW); st++; break;
   case 3: digitalWrite(LEDL, LOW); st=0; break;
  }
 }
}