Help sintassi

Salve a tutti volevo chiedere il vostro aiuto visto che mi sono avicinato da pochissimo all’arduino e soprattutto al linguaggio di programmazione trovo parecchie difficoltà nel capire la sintassi di programmazione mi spiego meglio io ho redatto un piccolo programmino che muove un servo in un loop di 1secondo e poi c’è l’inclusione di un ricvevitore IR che premendo un tasto sul telecomando mi accende e spegne un led. il problema che riscontro è che il comando del led me lo da solo quando il servo finisce il loop e ricomincia da capo. questo è il codice:

#include <IRremote.h>
#include <Servo.h>
Servo antimoservo;

int servo = 10;
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
int led1=8;
int led2=9;

void setup()
{
  antimoservo.attach(servo);
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() 
{
   for (int i=0; i<=179; i=i+10)
  {
    antimoservo.write(i);
    {
      delay (1000);
    }
   
  }
  if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  
  if(results.value==0xFF18E7)
  {
    digitalWrite(led1,HIGH);
  }
  if (results.value==0xFF30CF)
  {
    digitalWrite(led1,LOW);
  }
  
}

come risolvo il problema ? e se c’è qualche guida che spiega bene la sintassi per l’arduino grazie

Stesso problema, stessa soluzione: http://arduino.cc/forum/index.php/topic,67736.0.html

Anziché usare il delay devi strutturare il loop in modo che giri "di più", quindi puoi usare la funzione millis() per eseguire i comandi del servo solo quando sono passati 1000ms. es

unsigned long tA = 0;
void loop() {
    if(millis() - tA > 1000) {

        /* esegui comando per servo */

        tA = millis();
        }

    /* fai altro... */
    }

Ciao

grazie mille ho inserito la sringa ma ho qualche problema con il loop del servo però ora i led si accendono quando voglio.

Il ciclo for devi scomporlo e il contatore i deve diventare una variabile globale

int i = 0;
unsigned long tA = 0;
void loop() {
    if(millis() - tA > 1000) {
        antimoservo.write(i);
        i = i > 179 ? 0 : i + 10;
        tA = millis();
        }

    /* fai altro... */
    }

Se non vuoi rischiare che qualche altro pezzo del programma vada a modificare il contatore puoi dichiararlo nel blocco if come static. Ciao