Problema Motore DC - Telecomando x regolare la velocità

Ciao a tutti, sono nuovo del forum e ho da poco iniziato a fare alcuni piccoli sketch con Arduino UNO.
Ho costruito con del materiale di recupero (un transistor, un diodo e qualche resistenza) un piccolo azionamento per controllare la velocità di un motorino in corrente continua da 3Vdc.
Volevo riuscire a controllare la velocità di questo motore tramite un telecomando con il seguente sketch:

/*
Comando Motore con Telecomando
*/

// Inclusione libreria IR
#include <IRremote.h>;

// Definizione Pin
const int motor = 9; //pin 9 uscita PWM
const int RECV_PIN = 6; //pin 6 ingresso sensore IR

// Definizione Variabili
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() {
  // Dichiarazione In/Out Pin Digitali (compresi PWM)
  pinMode (motor, OUTPUT);
  // Avvia Comunicazione Seriale
  Serial.begin(9600);
  irrecv.enableIRIn(); //Avvia ricezione
}

void loop() {
if (irrecv.decode(&results)) { //Comunica solo se riceve un comando)
if (results.value == 0x76044FE0) {
    analogWrite (motor,150);
}
else if (results.value == 0x76044FD0) {
    analogWrite (motor,200);
}
else if (results.value == 0x76044FF0) {
    analogWrite (motor,250);
}
else if (results.value == 0x76044FF4) {
    analogWrite (motor,0);
}
Serial.println(results.value, HEX);
irrecv.resume(); //Attesa ricezione prossimo valore
}
}

Ma qualcosa non funziona.

Premetto che la parte Hardware sembra funzionare correttamente perchè ho provato con il seguente sketch (la velocità del motore viene regolata da un potenziometro) e tutto funziona correttamente.

/*
Test Azionamento Unidirezionale Motore 3Vdc
*/

// Definizione Pin
const int motor = 9;
const int pot = A0;

// Definizione Variabili
int ref = 0;
int anmot = 0;

void setup () {
  // Dichiarazione In/Out Pin Digitali (compresi PWM)
 pinMode (motor, OUTPUT);
}

void loop () {
  ref = analogRead(pot);
  anmot = ref / 4;
  if (anmot >= 255) {
    anmot = 0;
  }
  analogWrite(motor,anmot);
}

Con il telecomando però le cose non funzionano… o meglio, una volta data tensione al sistema, se si preme uno dei 3 pulsanti del telecomando che selezionano la velocità il motore inizia a ruotare alla velocità corretta, ma se successivamente si preme uno degli altri pulsanti non fa assolutamente niente e continua con la stessa velocità.
Se invece si toglie tensione e lo si alimenta di nuovo, premendo un altro pulsante inizia a ruotare alla velocità esatta (o per lo meno si nota che le velocità sono diverse).
Il telecomando ha codifica NEC (anche se penso sia un’informazione inutile).

Qualcuno sa dirmi dove sbaglio?
Grazie.
Ciao.

ma il valore sul Serial appare?
intendo dire come risultato per l'istruzione

Serial.println(results.value, HEX);

cosa ti dà?

Ho provato il circuito in 2 fasi…
mi spego meglio, purtroppo dove fisicamente ho montato il circuito con il motore e tutto il resto non avevo il pc.
Però ho provato con arduino (con questo sketch caricato) collegato solo al sensore infrarossi e dal pc tramite comunicazione seriale leggo i valori corretti (si crea una tabella di valori, ogni volta che premo un tasto se ne aggiunge uno).
Prima avevo provato con un altro telecomando (quello del digitale terrestre) che però aveva l’inconveniente che tenendo premuto il tasto (qualsiasi tasto) per troppo tempo il sensore leggeva sempre lo stesso valore (il valore max, tutte F), poi ho provato con questo telecomando (quello dello stereo) e qusto problema non sussiste.
Inoltre ho la conferma che il sistema riconosce quale tasto è stato premuto (si nota che la velocità è diversa) solo che sembra farlo solo la prima volta dopo essere stato alimentato.
Esiste un modo per controllare, in tempo reale, da pc (tramite seriale o altro) il valore che arduino sta “passando” all’uscita PWM?

Non so come ho fatto, ma adesso funziona.
Volevo by-passare la mia domanda:

Esiste un modo per controllare, in tempo reale, da pc (tramite seriale o altro) il valore che arduino sta “passando” all’uscita PWM?

ed ho caricato questo sketch modificato con l’aggiunta di un display per visualizzare i dati:

/*
Comando Motore con Telecomando
*/

// Inclusione libreria IR
#include <IRremote.h>;
// Inclusione Libreria LCD
#include <LiquidCrystal.h>

// Definizione Pin
const int motor = 9; //pin 9 uscita PWM
const int RECV_PIN = 6; //pin 6 ingresso sensore IR
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);

// Definizione Variabili
IRrecv irrecv(RECV_PIN);
decode_results results;
int refmot = 0;

void setup() {
  // Dichiarazione In/Out Pin Digitali (compresi PWM)
  pinMode (motor, OUTPUT);
  // Impostazioni Display
  lcd.begin(16,2);
  // Avvia Comunicazione Seriale
  Serial.begin(9600);
  irrecv.enableIRIn(); //Avvia ricezione
  lcd.setCursor(0,0); // Seleziona Prima Riga LCD
  lcd.print ("                                "); // Clear LCD
}

void loop() {
if (irrecv.decode(&results)) { //Comunica solo se riceve un comando)
if (results.value == 0x76044FE0) {
    refmot = 150;
}
else if (results.value == 0x76044FD0) {
    refmot = 200;
}
else if (results.value == 0x76044FF0) {
    refmot = 250;
}
else if (results.value == 0x76044FF4) {
    refmot = 0;
}
analogWrite (motor,refmot);
lcd.setCursor(0,0);
lcd.print ("                ");
lcd.setCursor(0,0);
lcd.print (results.value);
lcd.setCursor(0,1);
lcd.print ("           ");
lcd.setCursor(0,1);
lcd.print (refmot);
Serial.println(results.value, HEX);
irrecv.resume(); //Attesa ricezione prossimo valore
}
}

a parte il fatto che il valore letto dal sensore IR sul display non corrisponde, perchè non è in esadecimale, il resto funziona correttamente… ora proverò a ripulire lo sketch dalle parti superflue e vedere se funziona…
Secondo voi è possibile che l’inserimento della variabile d’appoggio (apparentemente inutile senza il display) “refmot” abbia risolto il problema?

Altrimenti mi viene da pensare che doveva funzionare anche il primo sketch… e non riesco proprio a capire il comportamento “anomalo” che aveva…

Forse ho capito che il problema non stava nello sketch, ma in come era collegato il circuito... anche se la cosa è molto strana.

Per fare le mie prove ho costruito un piccolo alimentatore (con un trasformatore 230-18, un ponte raddrizzatore, un L7812, un L7809 e un L7805, più qualche condensatore per stabilizzare il tutto) che mi fornisce 24-12-9-5 V.
Solitamente utilizo la 9Vdc per alimentare Arduino e la 5Vdc per alimentare gli altri dispositivi e non c'è mai stato nessun problema.

Il problema nasce però con il sensore infrarosso, infatti (anche con il nuov sketch caricato) se alimento il sensore con la 5Vdc del mio alimentatore si comporta ancora nel modo strano che ho descritto prima (interpreta il comando correttamente solo la prima volta).
Se invece lo alimento con la 5Vdc che fornisce Arduino funziona correttamente. Però in questo caso in cui devo alimentare a 5Vdc anche il display, devo alimentarlo con la 5Vdc del mio alimentatore, perchè se utilizzo la 5Vdc di Arduino (in comune col sensore IR) qualunque tasto del telecomando premo il sensore legge sempre 0... o almeno sul display mi restituisce 0 e il motore non parte.

Ovviamente la gnd di Arduino e quella del mio alimentatore vengono collegate fra loro.