Muovere Servo con telecomando infrarossi usando Micro Maestro

Salve a tutti,

sono un newbie sia del forum che della programmazione di Arduino, volevo porre un quesito per vedere se trovo qualcuno che mi aiuta.

Ho realizzato un braccio robotico 6 DOF con Arduino duemilanove e la micro maestro 6 collegati via seriale, la micro maestro funge da UART ed il codice gira su Arduino duemilanove.

Vorrei comandare una routine tramite telecomando ad infrarossi, gia' collegato ad Arduino tramite il PIN 10 e alimentato a 3,3 V + GND, la routine sarebbe la seguente

Serial.println ("Now I rotate the servo Pinza - Speed 50"); 
  servoCtrl.setServoSpeed (50, 0, 12);
  servoCtrl.setTarget (992, 0, 12);
  delay (5000);
  servoCtrl.getPosition(0,12);
  Serial.print ("Position is: "); Serial.println (servoCtrl.getPosition(0,12));

ho trovato anche il codice di come acquisire il RAW dal telecomando ad infrarossi, ma non so' come gestire quest'ultimo per attivare la routine quando premo un tasto del telecomando ad infrarossi, c'e' qualche anima pia che mi puo' aiutare ?

qui il video di test del mio braccio
Braccio robotico controllato da Arduino duemilanove connesso via seriale con Micro Maestro 6 Canali - YouTube [Braccio robotico controllato da Arduino duemilanove connesso via seriale con Micro Maestro 6 Canali - YouTube](http://https:Braccio 6DOF)

Grazie
Cyborgmax

Devi usare un semplice struttura di controllo if() con valore exadecimali.

Ogni tasto “invia” un numero esadecimale, lo confronti se uguale a quello voluto richiami una funzione specifica che compie un movimento.

#include <IRremote.h>

int RECV_PIN = 12;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
 
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX); // STAMPI IN SERIALE IN NUMERO DEL PULANTE COSI SAI QUALE'
    irrecv.resume(); // Receive the next value
   
    if(results.value==0xFD9A65)
    {
        MuoviPinza();  
    }
    
     if(results.value==0xFD9A65)
     {
          MuoviSpalla();
     }
     else if(results.value==0xFD4AB5)
     {
         MuoviGomito();
     }
    
  delay(100);
}


void MuoviPinza(){

}

void MuoviSpalla(){


}

void MuoviGomito(){



}

Grandissima risposta, provo a creare il codice e poi lo posto qui, ma il codice che interessa del telecomando infrarossi e' il RAW o l'esadecimale ?

ho provato a modificare il codice, mi da un errore :

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

#include <SoftwareSerial.h>
#include <PMCtrl.h>

PMCtrl servoCtrl (11, 3, 9600); //RX, TX, Baud
int RECV_PIN = 10;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
 
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX); // STAMPI IN SERIALE IN NUMERO DEL PULANTE COSI SAI QUALE'
    irrecv.resume(); // Receive the next value
   
    if(results.value==0xFD9A65)
    {
  Serial.println ("Now I rotate the servo Pinza - Speed 50"); 
  servoCtrl.setServoSpeed (50, 0, 12);
  servoCtrl.setTarget (992, 0, 12);
  delay (5000);
  servoCtrl.getPosition(0,12);
  Serial.print ("Position is: "); Serial.println (servoCtrl.getPosition(0,12));     
{

ecco l’errore che ricevo :

Arduino:1.8.1 (Windows 7), Scheda:"Arduino Duemilanove or Diecimila, ATmega328"

C:\Users\108004244\Desktop\PMCtrl\examples\PMCtrl-1_telecomando\PMCtrl-1_telecomando.ino: In function 'void loop()':

PMCtrl-1_telecomando:32: error: expected '}' at end of input

 {

 ^

PMCtrl-1_telecomando:32: error: expected '}' at end of input

PMCtrl-1_telecomando:32: error: expected '}' at end of input

PMCtrl-1_telecomando:32: error: expected '}' at end of input

Più di una libreria trovata per "IRremote.h"
Usata: C:\Users\108004244\Documents\Arduino\libraries\IRremote
Non usata: C:\Program Files (x86)\Arduino\libraries\RobotIRremote
exit status 1
expected '}' at end of input

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

dove sbaglio ? forse troppe istruzioni dopo l’if ?

Grazie
Cyborgmax

Devi scegliere una sola libreria per gestire un telecomando ad infrarossi, vedi esempi e poi schegli, tu in questo caso hai incluso due librerie

#include <IRremote.h>
#include <IRremoteInt.h> // questa non l’ho mai usata e non ne so niente

Poi in Linguaggio C, ad ogni parentesi graffa aperta { deve corrispondere una parentesi graffa chiusa }

e i messaggi di errore dicono che mancano molte parentesi graffe di chiusura.

Penso che dovresti leggere una piccola guida sulla programmazione arduino, qui sul forum ne postano link di guide gratuite.

Anche perché il tuo progetto non è banale come fare lampeggiare un led, quindi devi leggere una guida per avere le basi di programmazione :slight_smile:

**>cyborgmax: **Prima di tutto, NON avendolo tu ancora fatto, nel rispetto del regolamento, ti chiedo di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ...

... poi, onde evitare possibili problemi in futuro, ti rammento che, in conformità al suddetto REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) e tu hai parlato di problematiche relative al tuo progetto già QUI ... quindi ... mi raccomando attenzione perché, se ad un certo punto, gli argomenti dovessero diventare gli stessi, il thread verrebbe chiuso.

Grazie.

Guglielmo

torn24:
Devi scegliere una sola libreria per gestire un telecomando ad infrarossi, vedi esempi e poi schegli, tu in questo caso hai incluso due librerie

#include <IRremote.h>
#include <IRremoteInt.h> // questa non l’ho mai usata e non ne so niente

Poi in Linguaggio C, ad ogni parentesi graffa aperta { deve corrispondere una parentesi graffa chiusa }

e i messaggi di errore dicono che mancano molte parentesi graffe di chiusura.

Penso che dovresti leggere una piccola guida sulla programmazione arduino, qui sul forum ne postano link di guide gratuite.

Anche perché il tuo progetto non è banale come fare lampeggiare un led, quindi devi leggere una guida per avere le basi di programmazione :slight_smile:

Grazie torn24 per la risposta, pero’ volevo chiederti perche’ la libreria IRremote non diventa arancione quando la inserisco nell’IDE ? eppure l’ho scaricata dalle librerie di Arduino ufficiali.

Grazie per la eventuale risposta.

Cyborgmax

cyborgmax:
... perche' la libreria IRremote non diventa arancione quando la inserisco nell'IDE ? eppure l'ho scaricata dalle librerie di Arduino ufficiali.

La colorazione NON significa nulla ...
... se l'autore ha dedicato del tempo a creare il file "keywords.txt" in cui dice all'IDE quali sono le funzioni, allora l'IDE le conosce e le colora, se l'autore non lo ha creato, la colorazione NON avviene, ma ... è SOLO una cosa "estetica" e NON funzionale.

Guglielmo

P.S.: Volendo, se ti piace vedere le funzioni colorate, basta che vai a vedere in qualche altra libreria come è fatto detto file e poi, per quella libreria, puoi crearlo tu :wink: