Pages: 1 [2] 3   Go Down
Author Topic: Aiuto per lettura valori RGB  (Read 2201 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok ti ringrazio allora farò ulteriori prove.

Ascolta io per fare delle prove lato arduino utilizzo il metodo Serial.print o println per vedere cosa combina.

Per far vedere questi valori l'unico modo è attivare la consolle con ctrl maiusc h ???
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21652
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se stai comunicando con l'Arduino da Processing non penso tu possa aprire anche il terminale dell'IDE. La seriale può essere impegnata per 1 comunicazione a volta.
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E si infatti lo avevo immaginato.
Resta da fare qualche esperimento. Ho letto in giro che è possibile tramite Processing leggere cioè che arudino scrive tramite l'istruzione Serial.print....
Logged

Offline Offline
Jr. Member
**
Karma: 2
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E si infatti lo avevo immaginato.
Resta da fare qualche esperimento. Ho letto in giro che è possibile tramite Processing leggere cioè che arudino scrive tramite l'istruzione Serial.print....

si certo puoi leggere quello che c'è sulla serial con processing quindi potresti fare una cosa così Processing->arduino->processing ovvio però che c'è più spazio per gli errori
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao, volevo ringraziare tutti per le risposte ma purtroppo non sono ancora riuscito a combinare nulla.

Ho provato come ha suggerito leo72 a scrivere questo codice lato arduino
Code:
if (Serial.read() == 'R') {
  analogWrite(PIN_RED, Serial.read());
}

Come risultato ho che sul secondo Serial.read() ad arduino gli arriva un -1


Ho provato tramite processing ad inviare ad arduino sulla seriale con il metodo .write

le varie stringhe

R100
oppure ad inviare
R
100
richiamando due volte il metodo, nel primo caso non succede nulla nel secondo caso si accende il led rosso veramente debole ma gli arriva un -1 quindi insomma non so più che pesci prendere...

sono ben lieto di seguire altri consigli....

grazie a tutti
Logged

Offline Offline
Jr. Member
**
Karma: 2
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non so se ti può essere di aiuto ma il -1 in "codice" vuole dire che la serial.read dell'arduino non ha trovato niente da leggere
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao certo che mi può essere utile in pratica da quello che ho potuto vedere, io gli sparo

arduinoPort = new Serial (porta seriale di arduino, 9800);

Code:
codice.....

arduinoPort.write("R");
arduinoPort.write("100");


Mentre ho visto in giro che molti utilizzano tra le due chiamate un delay(500);

Da quello che ho capito questo metodino fa aspetaare l'invio di 1/2 secondo, quindi magari può essere questo... Voi che dite?
Logged

Offline Offline
Jr. Member
**
Karma: 2
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

secondo me è come il delay nella lettura dell'arduino...non è scritto da nessuna parte di metterlo però se non lo metti fa i capricci
prova a metterlo questo delay tra i due invii e facci sapere

forse mezzo secondo è tanto se ti interessa un pò la velocità potresti provare a diminuirlo piano piano (sempre se funziona)
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok le sto provando tutte proverò anche questa al mio rientro, grazie a tutti per la collaborazione... spero di farvi avere buone nuove
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao ,

non ho capito perchè vuoi inviare ad arduino R?.. i colori su RGB led sono una combinazione di valori... quindi al posto di inviare R... invia direttamente la sequenza del colore.. tipo:

Processing:

 myPort.write("C"); // inizializza la sequenza rgb
 myPort.write(0);
 myPort.write(255);
 myPort.write(255);

a seconda della combinazione crei un colore.. quindi se vuoi associare ad un tasto "ROSSO" l'evento accendi led rosso .. basta inviare via seriale la sequenza di valori rgb.. che arduino può gestire così:

Arduino:

void loop()
{
  if (Serial.available() > 0) {
   
 inByte = Serial.read();
   
     if (inByte == 'C') {
        R=Serial.read();
        G=Serial.read();
        B=Serial.read();
    }
 
 analogWrite(redPin, R);
  analogWrite(bluePin, B);
  analogWrite(greenPin, G); 
 }
 
  delay(10);
}


Credo che tu debba creare delle if in processing per la scelta del colore, mentre arduino accende il led in base ai valori ricevuti...

Infine non ricordo bene la differenza ma credo che google  possa aiutarti a scoprirlo, se il led è ad anodo comune  è spento per valori (0 , 0 , 0 ) , se è a catodo comune è spento per valori (255,255,255).. (potrebbero essere invertite le cose), dunque fai attenzione anche a questo..
« Last Edit: September 26, 2012, 03:12:30 am by steeveO » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora ho notato questa cosa infatti i led si accendono se metto 0 e si spengono con 255.

Io voglio inviare R perchè sulla schermata dello smartphone ho 3 slider uno che comanda l'intensità del led rosso una del blu e una del giallo.

Ecco perchè volevo avere i led separati. Appena rientro provo ovviamente se capita qualcuno che ha già avuto questa esperienza e vuole condividere il suo codice o i suoi consigli io accetto tutto.

Appena posso posto il codice.

Ciao e grazie
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21652
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Risposte in ordine sparso.

Non serve un delay sull'invio dato che l'Arduino ha un buffer di ricezione di 64 byte dove colloca ciò che arriva dalla seriale in maniera del tutto trasparente al codice (tramite interrupt) per cui anche se non sei a leggere subito, non perdi nulla.
Un Serial.read non legge materialmente dalla seriale HW ma preleva il primo byte disponibile (se c'è) dal buffer.

Se con 0 accendi e 255 spengi mi sa che stai usando un LED RGB montato male. Esistono led RGB ad anodo comune oppure a catodo comune. I primi hanno l'alimentazione in comune ed i canali in uscita sono i catodi, il segnale PWM corrisponde a 0 per tutto acceso e 255 per tutto spento, quindi la luminosità la stabilisci con (255-valore). La logica è invertita rispetto a quelli a catodo comune, dove il segnale PWM pilota direttamente gli anodi dei led (quindi 0 = tutto spento, 255 = tutto acceso).
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao..

Infatti io ti proponevo proprio questo

tu ogni volta che modifichi l'intensità del colore invii via seriale i 3 valori di intensità per il rosso per il verde e per il blu.

analogWrite(pinred,intensitàrosso);
analogWrite(pingreen,intensitàverde);
analogWrite(pinblue, intensitàblu);

quindi se ti trovi nella situazione

0 0 0 (rgb)

e vuoi accendere il led con colore rosso invii

255 0 0 

a seconda che il led sia ad anodo o catodo comune.

ed il gioco è fatto..

con tre righe di codice hai risolto ..

io ho usato questo codice per realizzare un visualizzatore di spettro audio..
caricando su arduino le semplici "3 righe di codice", e facendo gestire a processing tutto il resto.
Ti faccio notare che comunque sia, anche se invii il comando ROSSO , devi comunque settare i parametri pwm degli altri colori (in questo caso spegnendo blu e verde).
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora ragazzi finalmente ieri in tarda serata ho risolto il problema dei led.

IL codice di arduino che avevo postato prima era giusto, l'errore invece era lato processing che una volta attivato il tasto inviava ciclicamente comandi ad arduino che non riusciva mai a terminare il lavoro. Facendo qualche test, println ho capito tutto ed ora funziona. Appena rientro prometto di inserire tutto il codice di Arduino e Processing.

Non so ma vorrei allegare proprio i file anche di processing però non so come si possa fare.

Il codice di processing è buono secondo me al 90%, forse qualche miglioria si può fare.

Grazie ancora
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21652
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non so ma vorrei allegare proprio i file anche di processing però non so come si possa fare.

Il codice di processing è buono secondo me al 90%, forse qualche miglioria si può fare.

Grazie ancora
Clicchi su "Additional Options" sotto all'area dove inserisci il messaggio e poi alleghi il file o lo zip.
Logged


Pages: 1 [2] 3   Go Up
Jump to: