Arduino Forum

International => Italiano => Software => Topic started by: biohazard91 on Aug 22, 2013, 03:15 pm

Title: problema nell'eseguire un programma da seriale
Post by: biohazard91 on Aug 22, 2013, 03:15 pm
ciao a tutti, ho provato a cercare ovunque ma non sono
riuscito a trovare una soluzione al mio problema, in poche parole
quando ricevo dei valori da seriale deve avviare un tipo di programma per
ogni comando.
vi posto il codice
Code: [Select]
void loop()
{
  Serial.println("Connesso ad Arduino");
  delay(500);
  if (Serial.available() > 0) { //Se sono presenti dati nel buffer
    ricezione_dato = Serial.read();
    delay(2);
   
    if (ricezione_dato == 'a') //se il comando è a indica lo stato della connessione
    { 
      ricezione_valore = Serial.read();
      if (ricezione_valore == 49) { //se il valore è uguale a 1
        delay(2);
        Serial.write("Eseguo A1");
       ledprova();
        }

void ledprova()
{ for( int value = 0; value <200; value++)
{ analogWrite(9, value);
delay(30);
}


il problema è che non vedo il fading del led ma da spento lo trovo acceso
e non mi spiego il motivo.
non c'è un'istruzione per eseguire il void ledprova fino alla fine prima di ritornare
a verificare se ci sono dati in arrivo?
eppure ho provato con un servo a farli fare un movimento da 0 a 180 sempre
con il for e funziona....
grazie
Title: Re: problema nell'eseguire un programma da seriale
Post by: leo72 on Aug 22, 2013, 03:54 pm
Il programma è incompleto, non si sa che cosa fa nel resto del loop.
Prova comunque a mettere una Serial.print di risposta  all'interno dei vari if per vedere se esegue o salta i blocchi di codice.
Title: Re: problema nell'eseguire un programma da seriale
Post by: biohazard91 on Aug 22, 2013, 07:38 pm
Nel resto del loop non fa altro che verificare quali dati gli arrivano nella seriale, il programma principale è quello svolto dai vari void, il mio problema è che non mi esegue i void correttamente. Comunque quel ledprova sarà sostituito da un programma che muoverà un motore passo passo, se ti serve altro per capire meglio dimmi pure.
Title: Re: problema nell'eseguire un programma da seriale
Post by: nid69ita on Aug 22, 2013, 07:43 pm
Forse però è meglio se posti l'intero programma comunque.
Anche questo pezzo non ha senso scritto così:
Code: [Select]
void ledprova()
{ for( int value = 0; value <200; value++)
  { analogWrite(9, value);
    delay(30);
  }


Perchè manca almeno una graffa. A meno che hai proprio sbagliato a usare le graffe. Nel qual caso si spiegherebbe perchè non funziona il fade.
Title: Re: problema nell'eseguire un programma da seriale
Post by: nid69ita on Aug 22, 2013, 07:47 pm

non c'è un'istruzione per eseguire il void ledprova fino alla fine prima di ritornare
a verificare se ci sono dati in arrivo?


Guarda che il programma è già cosi. Quando chiami la ledprova(), finchè non finisce, Arduino non fa altro.
Anzi potresti perdere altri dati in arrivo sulla seriale mentre il programma esegue quel fade.

Hai provato senza tanti fronzoli a la sola ledfade() ?   Magari con quel tempo di attesa di 30 è troppo veloce e non riesci a percepire con la vista il fade.
Title: Re: problema nell'eseguire un programma da seriale
Post by: biohazard91 on Aug 22, 2013, 07:50 pm
Mi sarò dimenticato di copiare anche quella graffa, comunque c'è nel void. Non riesco proprio a capire perché fa un questo modo. (appena sono a casa lo posto tutto)
Title: Re: problema nell'eseguire un programma da seriale
Post by: biohazard91 on Aug 23, 2013, 01:51 am
ho provato a fare un brevissimo sketch per provare l'uscita di arduino(magari si era guastata),
ve lo posto
Code: [Select]
int led =10;

void setup(){}

void loop()
{
  for(int value = 0; value <= 255; value +=1)
  { analogWrite(led, value);
  delay(30);
  }
}

e caricandolo su arduino fa quello che deve fare però se questo stesso sketch( il loop)
lo vado a incollare su ledprova() e da seriale gli faccio arrivare un a1 mi trovo che
su seriale vedo che si ferma ad eseguire ledprova ma non vedo il fading e in più
a fine del programma chiamato ho il led acceso.
quindi, ricapitolando:
- invio a1
- vedo che parte il programma
- non vedo il fading
- finito il programma mi trovo l'uscita a 5v

boh, attendo la vostra opinione.
qua il programma completo

Code: [Select]
int led = 10;
int ricezione_dato;
int ricezione_valore;


void setup()
{
  Serial.begin(9600);

}

void loop()
{
  Serial.println("Connesso ad Arduino");
  delay(500);
  if (Serial.available() > 0) { //Se sono presenti dati nel buffer
    ricezione_dato = Serial.read();
    delay(2);
   
    if (ricezione_dato == 'a') //se il comando è s indica lo stato della connessione
    { 
      ricezione_valore = Serial.read();
      if (ricezione_valore == 49) { //se il valore è uguale a 1
        delay(2);
        Serial.write("Eseguo A1");
        ledprova();
        Serial.print("ledprova eseguito");
      }
      if (ricezione_valore == 50) { //se lo stato è uguale a 2
        delay(2);
          Serial.print("Eseguo a2");

     
      }
     
      if (ricezione_valore == 51) { //se lo stato è uguale a 3
        delay(2);
          Serial.print("Eseguo a3");

      }
     
      if (ricezione_valore == 52) { //se lo stato è uguale a 4
        delay(2);
          Serial.print("Eseguo a4");

      }
     
      if (ricezione_valore == 53) { //se lo stato è uguale a 5
        delay(2);
          Serial.print("Eseguo a5");

      }
     
      if (ricezione_valore == 54) { //se lo stato è uguale a 6
        delay(2);
          Serial.print("Eseguo a6);

      }
     
      if (ricezione_valore == 55) { //se lo stato è uguale a 7
        delay(2);
          Serial.print("Eseguo a7");

      }
     
      if (ricezione_valore == 56) { //se lo stato è uguale a 8
        delay(2);
          Serial.print("Eseguo a8");

      }
     }

void ledprova()
{
  for(int value = 0; value <= 255; value +=1)
  { analogWrite(led, value);
  delay(30);
  }
}

grazie.
Title: Re: problema nell'eseguire un programma da seriale
Post by: alex16 on Aug 23, 2013, 02:35 am
Avrai il led spiritato, perché a parte due graffe mancanti e una doppia virgolette, a me lo sketch funziona
Title: Re: problema nell'eseguire un programma da seriale
Post by: biohazard91 on Aug 23, 2013, 04:49 pm
a me continua a non funzionare, ho provato anche con un motore
passo passo e non va, per ora mi va solo con un servo...
avete se no altre idee per sviluppare un progetto simile a questo?
non so più vosa fare....

Title: Re: problema nell'eseguire un programma da seriale
Post by: nid69ita on Aug 23, 2013, 05:28 pm
Anche a me funziona, ma come detto da @alex16, ci sono 3 errori nel codice che hai postato.

Poi, scusa, forse non capisco cosa vuoi fare. A me il fade lo fa, da spento ad acceso al massimo. Ma poi rimane acceso perchè non lo spegni più.
Se ridai a1 allora lo spegne e fa il fade.
Title: Re: problema nell'eseguire un programma da seriale
Post by: biohazard91 on Aug 24, 2013, 04:07 am
sisi, era solo per provare, infatti si chiama ledprova  :)
comunque ora funziona (avevo sbagliato un attimo nello sketch),
ora però ho un altro tipo di problema molto ambiguo, nel void
ledprova ho messo questo
Code: [Select]
void ledprova() {
for( value = 0; value <5; value++)
{ digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
}
}

e fa quello che deve fare ma il led stranamente si accende leggermente, come se non gli
arrivassero i 5 volt ma meno, invece con l'esempio blink sempre sullo stesso pin
e con lo stesso led si accende benissimo, ma si prende gioco di me arduino?  
o sono io che non sono in grado? mmmm..... :smiley-roll:
comunque se avete dei dubbi vi faccio un video lo metto su dropbox
Title: Re: problema nell'eseguire un programma da seriale
Post by: PaoloP on Aug 24, 2013, 05:13 am
Non hai impostato il pin mode in OUTPUT e il digitalWrite attiva la pull-up interna. Ecco perché il led è poco luminoso.
Imposta il pin come output e metti in serie al led una resistenza.
Title: Re: problema nell'eseguire un programma da seriale
Post by: biohazard91 on Aug 24, 2013, 09:25 pm
grazie mille, che sbadato  :smiley-roll:
karma +1  8)