Potenziomettri lineari

Ciao ragazzi
mi sto esercitando con la Intel Galileo e con 3 potenziometri sto controllando un led RGB. Sto usando 3 potenziometri (uno per colore) lineare da 10k. Tutto funziona alla perfezione soltanto che l'incremento o il decremento sembra essere più a STEP. Il led è collegato sui pin PWM. E' una caratteristica del Led o del potenziometro? e poi la risposta alla variazione è ''lenta'' e non mi da quella sensazione di reattività.

Grazie mille per le risposte

ma i potenziometri sono Lineari o Logaritmici ( da non confondersi con lineare o rotativo ), cioe' sul valore stampato, c'e' una A o B ?

sul potenziometro c’è scritto Lin 10k A … deduco Lineare di tipo A

A = Lineare
B = Logarimico
Quest'ultimo ha variazioni non costanti sulla rotazione in gradi )

Stramo, sembra piu' un problema di sketch

void setup ()
{
  Serial.begin (9600);
  
  pinMode (A0, INPUT);
  pinMode (A1, INPUT);
  pinMode (A2, INPUT);
  
  pinMode (3, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);
}
 void loop ()
 
{
  int R = map ( analogRead (A2),0,1023,0,255);
  int G = map ( analogRead (A0),0,1023,0,255);
  int B = map ( analogRead (A1), 0,1023,0,255);
  Serial.print ("R: ");
  Serial.print ( R );
  Serial.print ("G: ");
  Serial.print ( G );
  Serial.print ("B: ");
  Serial.print ( B );

  analogWrite ( 6, R);
  analogWrite ( 3, G);
  analogWrite ( 5, B);
  
  delay (5000);
  
}/code]

Questo è il codice

scommetto che va' a scatti di qualche secondo..
anzi, direi 5 secondi

  delay (5000);

che scemo che sono, lo avevo cambiato intenzionalmente perché a monitor seriale mi serviva più tempo per leggere i valori al computer. Ero convinto che il delay si riferisse alla comunicazione con il computer e non sulla reattività del potenziometro.

In tal caso come risolvo per leggere i valori più lentamente?

c’e’ una funzione …Millis() che indica quanto tempo e’ trascorso ( dall’accensione di arduino )
studia questo http://www.leonardomiliani.com/2013/programmiamo-i-compiti-con-millis/

perlomeno a codesto sketch aggiungici un ritorno a capo Serial.println() dopo l’ultimo Serial.print

e’ sempre velocissima, ma sempre piu’ leggibile

infatti stavo proprio leggendo questo millis() , provo a studiarmelo e vediamo se riesco a combinare qualcosa di buono.

Grazie del supporto :slight_smile:

Poi non so quanto Ti possiamo aiutare visto che non hai un Arduino.
Ciao Uwe

Non voglio fare polemica ed andare OT, però mi scoccia e non poco sempre la stessa risposta INTEL GALILEO non è ARDUINO e quindi rivolgiti a alla community INTEL. Si ok il 99% di voi usa Arduino e non conosce l’ Hardware intel forse, ma secondo me è più la voglia di dire NO che effettivamente aiutare. Sto seguendo tutti gli esercizi sulla base della Arduino UNO rev.3 ed è sconcertante che funzioni tutto in maniera identica. Quindi spesso non capisco questo demandarmi sempre alla community Intel. Conosco l’ inglese ma certi concetti li comprendo meglio in italiano, sopratutto lato programmazione della quale non ho nessuna base.

Grazie e scusate.

A prima vista uno sketch Arduinico può girare sulla Intel apparentemente allo stesso modo che su un Arduino vero.
Ci sono però delle sottili differenze. Primo, non c'è un Arduino sotto ma un emulatore che intepreta il codice Arduinico e lo trasforma in istruzioni eseguibili dal SoC di Intel. Poi, la gestione delle linee di I/O è totalmente differente: le linee sono multiplexate e la corrente massima erogabile è inferiore. Uno sketch che pilota un certo HW sfruttando i limiti fisici dell'Arduino quasi sicuramente non funzionerà sulla Intel (considera che la Intel può erogare 10 mA su un pin, l'Arduino fino a 40 mA9. I canali ADC hanno una risoluzione di 12 bit contro i 10 dell'Atmega. Non so poi se vai ad usare timer o interrupt cosa succede...
Insomma, le schede non sono uguali.

Insomma, non perché sono 2 macchine fotografiche, una Leika è identica ad una Canon.

.....da fotografo quale sono, che sia canon o leika le basi della fotografia sono sempre quelle indipendentemente dalla Latitudine di posa che puo essere maggiore o inferiore ad un modello o ad un altro. La domanda è.....Quindi il comando millis () è utilizzabile sulla mia galileo? a leggere sembra di si, e dato che il mio progetto non prevede chissà quanta potenza, ma è semplicemente un led RGB comandato da 3 potenziometri, magari una aiuto sarebbe gradito, ove possibile ovviamente. Non ho la presunzione di una risposta celere o esaustiva, ma bensi di una risposta positiva o negativa.

Nel frattempo proverò sulla intel community.

Grazie

P.S. alla fine torna utile a molti questa cosa, usando il semplice blink del pin 13 impostato ad 1 secondo di intervallo e volendo usare il monitor seriale per vedere lo stato, normalmente vedremmo lo stato ogni 2 secondi sul monitor... e se io volessi monitorarlo ogni 10 secondi e lasciare il delay a 1000 per il blink? Nel mio caso il delay l'ho settato a 100 per avere una risposta piu veloce alla variazione che faccio con il potenziometro, fà da se che il monitor seriale è un continuo aggiornamento ogni 100ms dei valori RGB

Brunello:
c’e’ una funzione …Millis() che indica quanto tempo e’ trascorso ( dall’accensione di arduino )
studia questo http://www.leonardomiliani.com/2013/programmiamo-i-compiti-con-millis/

perlomeno a codesto sketch aggiungici un ritorno a capo Serial.println() dopo l’ultimo Serial.print

e’ sempre velocissima, ma sempre piu’ leggibile

Ho risolto il problema ed ora funziona alla grande! grazie ad alcuni utenti …anche se INTEL GALILEO la board lo sketch è sicuramente funzionante anche per ARDUINO.

int numMillisToDelayForOutput = 5000;  
int currMillis = 0;  
int prevMillis = 0;  
void setup()  
{  
  Serial.begin( 9600 );  
  pinMode( A0, INPUT );  
  pinMode( A1, INPUT );  
  pinMode( A2, INPUT );  
  pinMode( 3, OUTPUT );  
  pinMode( 5, OUTPUT );  
  pinMode( 6, OUTPUT );  
}  
void loop()  
{  
  bool OutputToSerial = false;  
    
  // Get current milli  
  currMillis = millis();  
    
  // Check if you should output to serial  
  if( ( currMillis - prevMillis ) < 0 )  
  {  
    // Choose how to handle a roll over  
  }  
  else if( ( currMillis - prevMillis ) >= numMillisToDelayForOutput )  
  {  
    // Update prev time
    prevMillis = currMillis;
    // Set flag  
    OutputToSerial = true;  
  }  
      
  int R = map( analogRead( A2 ), 0, 1023, 0, 255 );  
  int G = map( analogRead( A0 ), 0, 1023, 0, 255 );  
  int B = map( analogRead( A1 ), 0, 1023, 0, 255 );  
  // If you it's time to output to serial  
  if( OutputToSerial )  
  {  
    // Output results to serial  
    Serial.print( "R: " );  
    Serial.print( R );  
    Serial.print( "G: " );  
    Serial.print( G );  
    Serial.print( "B: " );  
    Serial.print( B );
    Serial.println();
  }  
  analogWrite( 6, R );  
  analogWrite( 3, G );  
  analogWrite( 5, B );  
}  
/code]

Finalmente ho il problema del potenziometro risolto e la velocità a monitor più lenta e quindi leggibile.