Salve, sto cercando di fare la programmazione di un motore che cambi velocità e direzione in base ai valori che rileva un sensore (ir) ma non riesco a farli cambiare la velocità gradualmente. Con il codice che sto provando cambia la velocità gradualmente ma la riprende da 0 ad ogni valore che rileva il sensore. Quello che non riesco a capire è come farli mantenere una velocità fino a quando non si avvicina ad un oggetto. Mi potreste aiutare? grazie in anticipo.
Questo è il codice con cui ho provato:
int Velocita = 125;
int x = 5;
int motore_avanti = 10;
int motore_indietro = 11;
int sensorIR = A0;
int val = 0;
int distance = 0;
void setup(){
pinMode(motore_avanti, OUTPUT);
pinMode(motore_indietro, OUTPUT);
pinMode ( sensorIR, INPUT);
Serial.begin(9600);
}
void loop() {
// Sensore IR
val = analogRead (sensorIR);
distance = 2076/(val-11);
// Motore
for (Velocita = 0; Velocita < 255 ; Velocita = Velocita + x){
if (val <= 65){
analogWrite(motore_avanti, Velocita);
digitalWrite (motore_indietro, LOW);
}
else if ( val >= 77){
analogWrite (motore_indietro, Velocita);
digitalWrite (motore_avanti, LOW);
}
Serial.println (Velocita);
}
}
sarebbe MOOLTO più semplice utilizzare un potenziometro da 10k ma visto che lo comandi a distanza 8) 8)
hai provato ad utilizzare (se utilizzi un telecomando di una televisione) i tasti del volume?
se invece usi un radiocomando per le macchinine quello ha una molla che riporta il joystick nella posizione neutra cioè potenza allo 0% quindi dovresti tenere tu la levetta sollevata dalla posizione neutra e decidere TU la potenza ok ?
ciao, MII
MadeInItaly:
sarebbe MOOLTO più semplice utilizzare un potenziometro da 10k ma visto che lo comandi a distanza 8) 8)
hai provato ad utilizzare (se utilizzi un telecomando di una televisione) i tasti del volume?
se invece usi un radiocomando per le macchinine quello ha una molla che riporta il joystick nella posizione neutra cioè potenza allo 0% quindi dovresti tenere tu la levetta sollevata dalla posizione neutra e decidere TU la potenza ok ?
ciao, MII
Il motore sarebbe il motore di una machina (telecomandata), solo che voglio farla autonoma e quindi senza telecomandi o altri controlli esterni, per ora l'unica cosa di controllo esterno ho l'applicazione di android con qualle la accendo e la spengo, se riesco a risolvere questo problema e se mi resta tempo cerchero di farle anche il controllo manuale sempre attraverso l'applicazione. E' un progetto che voglio portare all'esame.
Se usi un sensore di distanza devi dargli una velocità fissa perché se va troppo veloce il sensore non fa in tempo a "capire" la distanza e quindi si schianta 
È vero potresti utilizzare il delay per far aumentare la velocità ma come ti ho detto è meglio utilizzare una velocità fissa.
Ciao
Nel codice di sopra mi sono dimenticato di metterlo, ma ora per fare le simulazioni per finire la programmazione ho messo un delay di 500. Riguardo alla velocità so che potrei usare una velocità fissa ma vorrei farlo più "realistica"
non so se mi spiego, cioè con una macchina vera quando hai un ostacolo davanti non ti fermi del tutto prima rallenti e poi lo aggiri, più o meno questa cosa vorrei fare 
comunque ho risolto il problema, ho usato per la partenza:
if ( val < 65 ) {
Velocita = map (val, 0, 1023, 255, 0);
analogWrite (motore_avanti, Velocita);
digitalWrite (motore_indietro, LOW);
}
e per andare indietro:
if ( val >= 169 ) {
Velocita = map (val, 0, 1023, 0, 255);
analogWrite (motore_indietro, Velocita);
digitalWrite (motore_avanti, LOW);
}