aiuto, telecomano e servomotore

ciao a tutti, ho un servomotore che deve ruotare fino a 180 gradi e fermarsi quando premo un tasto del telecomando, e viceversa se premo l’atro tasto il servo dovrebbe ritornare al punto di partenza, cosa che non e cosi il servo non si ferma andando avanti e indietro , se qualcuno puo aiutarmi con il software ,
che allego qui di seguito , grazie anticipatamente

utilizzo arduino uno compatibile

#include <IRremote.h>
#include <Servo.h>
int receiver = 11; 
 int val;
 Servo mioservo;

IRrecv irrecv(receiver);  
 
decode_results results;  
void setup() {
   mioservo.attach(9);
irrecv.enableIRIn();}
 
 void loop() {
  
  if (irrecv.decode(&results)) {
  irrecv.resume();}
  
 if ( results.value ==0XFF42BD ) {  //se PREMI    TASTO 7

for(val=0; val<180;val++){
mioservo.write(val);
delay(15);}
 
}
if ( results.value ==0XFF4AB5 ) {   //se  PREMI TASTO 8


 for(val=179; val>-1;val--){
mioservo.write(val);
delay(15);}}
}

Ciao per prima cosa potresti definire direttamente in testata i codici del telecomando (es. #define avanti 0x1234) e impostare direttamente un Switch results.value con il relativo case. Per me lo sketch è corretto..le cose sono due..in ambedue gli if metti if((results.value == 0Xcodice) && (results.value == 0x10codice)) perchè la codifica in HEX necessita per sicurezza di queste due condizioni..oppure non lo converti in HEX e tieni il codice puro..io ad esempio con il mio telecomando ho dei codici semplici tipo 13234532 e in questo caso non c'è bisogno del &&.

ok , grazie , ti dispiace inviarmi l'esempio tuo del telecomando senza convertirli in HEX cosi provo tutte e due gli sketch,

if ( results.value ==0XFF42BD )  //se PREMI    TASTO 7
  {
  for(val=0; val<180;val++)
    {
    mioservo.write(val);
    delay(15);
    }
  }
if ( results.value ==0XFF4AB5 )   //se  PREMI TASTO 8
  {
  for(val=179; val>-1;val--)
    {
    mioservo.write(val);
    delay(15);
    }
  }

come puó fermarsi se fai muovere il servo fino alla fine per, solo poi, controllare se é arrivato un comando dal telecoando?

Devi leggere il telecomando all’interno del For e uscire oppure fare il movimento senza for.

Ciao Uwe

bene, come faccio? è questo che volevo sapere

Devi leggere il telecomando all'interno del For e uscire oppure fare il movimento senza for.

wirefree: ok , grazie , ti dispiace inviarmi l'esempio tuo del telecomando senza convertirli in HEX cosi provo tutte e due gli sketch,

per prima cosa scrivi ir arduino su google e trovi una semplice guida di Mauro Alfieri. perchè non basta togliere la 0x devi prima leggerti il codice senza decimale..riprendendo il codice pubblicato da mauro nell'istruzione Serial.println (irrecv.result,hex) togli hex e hai il codice non esadecimale. dopo riprendi il tuo e metti il codice puro..

uwefed:

if ( results.value ==0XFF42BD )  //se PREMI    TASTO 7

{
 for(val=0; val<180;val++)
   {
   mioservo.write(val);
   delay(15);
   }
 }
if ( results.value ==0XFF4AB5 )   //se  PREMI TASTO 8
 {
 for(val=179; val>-1;val–)
   {
   mioservo.write(val);
   delay(15);
   }
 }






come puó fermarsi se fai muovere il servo fino alla fine per, solo poi, controllare se é arrivato un comando dal telecoando?

Devi leggere il telecomando all'interno del For e uscire oppure fare il movimento senza for.

Ciao Uwe

Infatti…se tanto il movimento è noto non si fà prima a dare il comando diretto visto che il servo è vincolato da questi due comandi senza cicli for? tipo myservo.write(180) o (-180) ?

francescomi92:
Infatti…se tanto il movimento è noto non si fà prima a dare il comando diretto visto che il servo è vincolato da questi due comandi senza cicli for? tipo myservo.write(180) o (-180) ?

Col for si puó moderare la velocitá di movimento.
Ciao Uwe

uwefed: Col for si puó moderare la velocitá di movimento. Ciao Uwe

mmm..non lo sapevo..non li ho mai usati i servo..lo terro' a mente :)

grazie ,delle risposte, faccio qualche tentativo, il codice ora hex , si puo trasformare in decinale in binario, ma

questo non risolve il problema , il servo va comandato con il for se ci sono altre condizioni non lo so , non si ferma il servo perchè è nel loop e rinizia da capo, provo se riesco con lo switch, se riesco cosi si dovrebbe fermare viso che ha il break,,,,,

non sono cosi esperto e vorrei risolvere .....

Il break puoi usarlo anche nel for. Ciao Uwe

c’è un errore nella guida di mauro alfieri , con l’istruzione HEX viene un numero esadecimale se mai l’istruzione

è DEC , l’esempio che usa di seguito per far accendere un le d nel mi caso non funziona bhooo

allegolo sketch di mauro alfieri :o :o

#include <IRremote.h> // use the library
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of ‘irrecv’
decode_results results;

void setup()
{
Serial.begin(9600); // for serial monitor output
irrecv.enableIRIn(); // Start the receiver
pinMode(9, OUTPUT); // Pin 9 output
}
void loop()
{
if (irrecv.decode(&results)) // have we received an IR signal?
{
Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
irrecv.resume();// receive the next value
}

}