Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Panel controllo LEd RGB
#1
Buongiorno,
ho da pochi giorni iniziato a testare il prodotto e volevo provare a costruire un pannello con il quale variare la tonalità dei colori di un led sui tre canali RGB.
Ho scritto il seguente codice, costruendo correttamente in pannello e provando ad agire sul solo canale red intervenendo sul valore del pin analogico 3, per poi attivarlo per gli altri canali; non funziona !!!
Qualcuno può darmi una mano a capirne di più?
Credo ci siano due tipologie di problemi, la prima legata al riconoscimento della stringa per i valori restituiti da #R1:XXX e successivamente la conversione degli stessi in intero per il comando serial.write.
Ringrazio anticipatamente.


// pins for the LED RGB:
const int redPin = 3;
const int greenPin = 5;
const int bluePin = 6;
int value=0;
void setup() {
  // initialize serial:
  Serial.begin(57600);
  delay(3000);
  Serial.println("\n$PING 200");
  // make the pins outputs:
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  Serial.print("$P:{M1#F00*10:Prova >>;}//T#0F0*20fi:Prova Led RGB;/*15T#F00:RED;R1!F00,00Fr20*15:0:255:1:50:100;///T#0F0:GREEN;R2!F00,00Fr20*15:0:255:1:50:100;///T#00FF:BLUE;R3!F00,00Fr20*15:0:255:1:50:100;");
}
String button_id;
String Msg;
void loop() {
int c;
  while ((c = Serial.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
  if (c == '\n')                                       // is the message complete?
  {
   if (Msg.substring(0,4).equals("#R1:"))
    {
    button_id = Msg.substring(4);
    value= button_id.toInt();
    if (value>=0&&value<=250) analogWrite(redPin, value);
    Msg=("");
    }
   }
}
Reply
#2
ciao,
non ho sottomano arduino ma ho simulato lo sketch su 123d circuits (modificando qualcosa ovviamente),  se metti un delay(500) nel loop dovrebbe funzionare, prova e facci sapere.


void loop() {
int c;
  while ((c = Serial.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
  if (c == '\n')                                       // is the message complete?
  {
   if (Msg.substring(0,4).equals("#R1:"))
    {
    button_id = Msg.substring(4);
    value= button_id.toInt();
    if (value>=0&&value<=250) analogWrite(redPin, value);
    Msg=("");
    }
   }
 delay(500);
}
Reply
#3
Ciao fmiarelli,
ti ricordo che l'oggetto slider restituisce '#r..' (r minuscolo) mentre scorri e "#R.." maiuscolo al rilascio, quindi se vuoi gestire anche i valori mentre scorri il cursore dovresti scrivere:

...
 if (Msg.substring(0,4).equals("#r1:") || Msg.substring(0,4).equals("#R1:") )
...

Inoltre sposta l'istruzione  Msg=(""); così:

......
if (c == '\n')                                       // is the message complete?
{
   if (Msg.substring(0,4).equals("#r1:") || Msg.substring(0,4).equals("#R1:"))
   {
     button_id = Msg.substring(4);
     value= button_id.toInt();
     if (value>=0 && value<=250) analogWrite(redPin, value);
   }
   Msg=("");
}
.......
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)