Funzione map () dubbi et perplessità

Progetti Arduino
Rispondi
BartMan
Messaggi: 3
Iscritto il: gio 6 giu 2019, 11:25

Funzione map () dubbi et perplessità

Messaggio da BartMan »

Buongiorno
premetto che sono completamente nuovo nel mondo Arduino e che il know how, in campo elettrotecnico, è altrettanto limitato....
Sono un appassionato di Droni e guardando su Youtube ho trovato alcuni tutorial su come usare Arduino per testare la funzionalità dell'accoppiata: esc motori usando l'uscita pwm di arduino e un potenziometro collecato sul pin analogico.

(in pratica l'equivalente dell'esperimento potenziometro che comanda un led).
Ora siccome sono curioso come una scimmia e voglio imparare e non usare il copia incolla vi rompo i coDroni perchè quardando lo sketch mi è vento un dubbio....

Lo schema di funzionamento è simile come detto a quello led potenziometro ed in particolare:
Si collega il Potenziometro ad un pin analogico es A0
Il motore si collega all'esc e l'esc alimentato separatamente si collega ad un pin pwm es il 9.

dopo di che si mappa il segnala analogico da dare in pasto all'esc per far girare il motore.
La differenza con il led è che si usa la libreria
servo.write(....)

Alla fine quindi lo sketch tipo è questo:

Codice: Seleziona tutto

Servo myservo; //ma che fantasia
int val, p; 

void setup ()
myservo.attach(9); 

void loop() 
           p = analogRead(A0);                  
          val = map(p, 0, 1023, 1000, 2000);
          myservo.write(val);                 
          delay(20);  
Quello che non mi quadra, e che mi piacerebbe qualcuno potesse spiegarmi è:

1. la funzione map :
sul digitale l'uscita non ammette valori solo da 1 a 255 (come per il led?) l'aver messo una scala da 1000 a 2000 non compromette il funzionamento? o i valori 1000 e 2000 sono da considerarsi come una scala dei possibili valori da 1 a 255 ??? ossia i 256 possibili valori sono poi ridivisi in piccoli multipli ed aumentare il potenziomentro quindi causa un aumento veramente basso del motore???? :roll:

2. la funzione myservo.write() dovrebbe avere una sintassi tipo Syntax
servo.write(angle) dove angle: the value to write to the servo, from 0 to 180

quindi dargli un valore tra 1000 e 2000 che senso ha?
Deduco che: per l'esc (che è diverso da un servo) il valore non sia un angolo ma appunto il valore pwm per far aumentare la velocità di rotazione???
Ma dove è documentato cio''?????
BartMan
Messaggi: 3
Iscritto il: gio 6 giu 2019, 11:25

Re: Funzione map () dubbi et perplessità

Messaggio da BartMan »

Aggiungo solo che a mio avviso dal wiki l'opzione giusta da usare dovrebbe essere:
servo.writeMicroseconds(uS)

Codice: Seleziona tutto

servo.writeMicroseconds(uS) 
Parameters
servo: a variable of type Servo
uS: the value of the parameter in microseconds (int)
Avatar utente
Pier Aisa
Amministratore
Messaggi: 2541
Iscritto il: ven 16 mar 2018, 9:43
Località: Bologna
Contatta:

Re: Funzione map () dubbi et perplessità

Messaggio da Pier Aisa »

La funzione write servo accetta angoli fra 0 e 180 gradi e quindi la map negli ultimi due valori deve avere 0 e 180 non 1000 e 2000
BartMan
Messaggi: 3
Iscritto il: gio 6 giu 2019, 11:25

Re: Funzione map () dubbi et perplessità

Messaggio da BartMan »

Buon giorno, maestro grazie della risposta...
Infatti è proprio così la funzione giusta è writeMicroseconds tuttavia la libreria servo.h riconosce l'errore ed in automatico cambia la funzione....
Ossia posso scrivere anche servo.write ma poi la libreria in automatico converte in Micorsecond...
In questo caso salta anche il discorso dei valori da 1 a 255 accettati per l'uscita digitale in quanto in questo caso l'uscita viene usata come analogica
Avatar utente
Pier Aisa
Amministratore
Messaggi: 2541
Iscritto il: ven 16 mar 2018, 9:43
Località: Bologna
Contatta:

Re: Funzione map () dubbi et perplessità

Messaggio da Pier Aisa »

benissimo ! :apple: :apple:
Rispondi