Show Posts
Pages: 1 [2] 3
16  International / Generale / Re: Problemi con Serial e Stringheeee !!! on: April 14, 2012, 01:36:06 am
Forse a 9600 baud il buffer di ricezione si riesce a svuotare tra un byte e l'altro.
In che senso fa in tempo a svuotarsi? smiley-roll-sweat smiley-roll-sweat
17  International / Generale / Re: Problemi con Serial e Stringheeee !!! on: April 13, 2012, 02:33:55 pm
ho risolto da solo  smiley-mr-green smiley-mr-green mettendo un delay di 10 ms, forse basta anche meno, da quello che ho capito una volta che il while finiva e ricontrollava il numero di byte disponibili il byte successivo non era ancora arrivato e quindi il while pensava di aver finito.
è giusta come idea o sbaglio? smiley-cool
18  International / Generale / Re: Problemi con Serial e Stringheeee !!! on: April 13, 2012, 12:25:23 pm
aggiungendo
Code:
println(Serial.available())
che da quello che ho letto nelle referenze dovrebbe restituire il numero di bytes disponibili da leggere mi esce(con lo stesso input di prima) sempre 1 invece di 4...3...2...1...interruzione.

è possibile che l'errore con il ciclo while sia causato da questo problema? come posso risolverlo?
Francesco
19  International / Generale / Re: Problemi con Serial e Stringheeee !!! on: April 13, 2012, 12:09:54 pm
ora che ho capito come vengono letti i dati ho un altro problema sempre legato alle stringhe anche se in questo casi il colpevole è un ciclo while:
Code:
void setup() {
  Serial.begin(9600);
}
String stringOne = "";
void loop() {
  if (Serial.available()){
    while (Serial.available()>0){
      char a=Serial.read();
      stringOne += String(a);   
      Serial.println(stringOne); 
    }
      Serial.println("Finito!!!");
      stringOne = "";
  }
}

Secondo la mia logica questo codice dovrebbe:
  • controllare se ci sono byte disponibili da leggere
  • se si, finchè ce ne sono eseguire il codice all'interno di while
  • una volta letti tutti i byte il ciclo while dovrebbe fermarsi e io mi ritroverei con una stringa composta dai vari byte
  • Uscito dal ciclo while stampare "Finito!!!" e riazzerare la stringa per una prossima lettura
  • Riprendere a looppare finche non vi siano di nuovo dei byte da leggere

Nella mia idea il ciclo while dovrebbe interrompere il loop() fino a sua conclusione.

Invece come risultato (avendo inviato "ciao") ottengo:
Code:
c
Finito!!!
i
Finito!!!
a
Finito!!!
o
Finito!!!

quindi ripete ogni volta tutto il loop fregandosene di ripetere prima il while.

Cosa sbaglio??? smiley-roll-sweat smiley-roll-sweat smiley-roll-sweat
20  International / Generale / Re: Problemi con Serial e Stringheeee !!! on: April 13, 2012, 12:00:32 pm
ho sperimentato molto e sono riuscito a capire abbastanza bene dove era l'errore, che penso di poter ricondurre a come leggevo il read(), infatti mi sembra di aver capito che usando int a=Serial.read se inviavo ad es. 1 a diventava uguale a 49 e quindi l'errore era già li, mentre io pensavo che a sarebbe stata uguale a 1 e che poi l'errore fosse nel print()

grazie comunque per la risposta
21  International / Generale / Problemi con Serial e Stringheeee !!! on: April 13, 2012, 11:11:38 am
Stavo provando a ricevere un messaggio via serial, "appenderlo" a una stringa e ritornare la stringa via serial; solo che non funziona.
Il codice che ho scritto è questo e di fianco a ogni comando di reinvio al pc ho scritto il risultato che esce sulla console.
Code:
void setup() {
  Serial.begin(9600);
}
String stringOne = "";
void loop() {
   if (Serial.available()>0){
   int a=Serial.read();  //riceve input es. 2
   Serial.write(a);   //ritorna input -->2
   Serial.println();  //a capo
   Serial.println(a);   //ritorna input -->50
   stringOne += String(a);    //Stringa = stringa + input
   //Serial.write(stringOne);  //se si toglie commento da errore
   Serial.println(stringOne);  //ritorna stringa vuota+input --> 50
   stringOne = String(13);     //Stringa diventa 13
   Serial.println(stringOne); //ritorna stringa --> 13
   }
}

Quello che ho notato è che se uso il write il testo ritorna tale e quale mentre se uso il print/println il testo mi viene restituito come codificato in ASCII (es. 1-->49) tuttavia se uso
Code:
Serial.print(1)
quello che mi esce a video è 1 e non 49.
Allo stesso modo se dichiaro una variabile già con un valore mi verrà restituito giusto mentre se la "aggiorno tramite il Serial.read()" poi me lo restituirà in ASCII
es.
Code:
int a=13
Serial.println(a) // restituisce 13
int b=Serial.read()
Serial.println(b) // restituisce--> valore immesso in ASCII

A me sembrano uguali... smiley-sad smiley-sad

Avete qualche consiglio? che le pagine di referenza per read() print() ecc. non mi sono state troppo di aiuto smiley-sad-blue
Francesco
22  International / Generale / Re: Controllo led via Seriale on: April 12, 2012, 12:18:56 pm
Perfetto, adesso funziona, tuttavia non capisco perchè debba "stabilizzarsi", infatti le prime volte che inserisco il numero del pin ha qualche reazione strana per poi dalla 4° in poi stabilizzarsi(reazioni solo a livello di serial monitor, perchè i led si accendono giusti).
Code:
Ok1
-->Ko111<--
Ko0
Ok1
Ko0
...

P.S.
i --> li ho aggiunti io smiley-lol
23  International / Generale / Re: Controllo led via Seriale on: April 12, 2012, 12:01:06 pm
mi sento un idiota a non aver visto i doppi ==, ormai è un anno che faccio informatica e non dovrei cascare più in questi errori, grazie per avermelo fatto notare,
grazie anche per l'info su HIGH e LOW, non avevo compreso bene come funzionassero. smiley-roll-sweat smiley-roll-sweat
24  International / Generale / Re: Controllo led via Seriale on: April 12, 2012, 11:52:13 am
credo di aver trovato un problema con la scheda, infatti non funziona neanche con del codice che ho trovato su internet:
Code:
#define LEDPIN 13

int state = LOW;
char incomingByte = 0;

void setup() {
  Serial.begin(9600);
  pinMode(LEDPIN, OUTPUT);
}

void loop() {
 
  // send data only when you receive data:
  if (Serial.available() > 0) {
     // we receive a char representing an integer. let's converto to int
    int incomingState = (Serial.read() == '1');
   
    // say what you got:
    Serial.print("I received: ");
    Serial.println(incomingState, DEC);
   
    if(incomingState != state) {
      state = incomingState;
      digitalWrite(LEDPIN, state); // turns the LED on or off
      Serial.print("Setting LED as: ");
      Serial.println(state);
    }
    else {
      Serial.print("Doing nothing. LED already: ");
      Serial.println(state);
    }
  }
}
praticamente se io immetto 1 ottengo:

I received: 1
Setting LED as: 1
e subito dopo
I received: 0
Setting LED as: 0

come se dopo il char 1 venisse inviato un char 0 mentre in teoria doveva esserci solo il primo, adesso provo con un'altra scheda smiley-lol
25  International / Generale / Re: Controllo led via Seriale on: April 12, 2012, 11:32:21 am
appunto, è quello il mio scopo, solo che se ho un led su mettiamo pin 2, nel serial monitor scrivo 2 e invio: lui riceve 2 controlla se quel pin è acceso o spento e agisce di conseguenza, poi rimane in quello stato fino a quando io gli scrivo di nuovo due e lui dovrebbe invertire (high e low).
Tuttavia eseguendo il programma la parte in cui il led deve di nuovo cambiare stato non va smiley-sad-blue, e allo stesso modo ho problemi nella visualizzazione dei "debug" via serial smiley-eek

26  International / Generale / Controllo led via Seriale on: April 12, 2012, 11:06:14 am
Ho appena ricevuto le mie arduino uno e mi sono subito tuttato nel provarle smiley-cool smiley-cool
tuttavia ho grossi problemi infatti questo codice, che non mi sembra troppo complesso non mi funziona, non produce l'effetto sperato, ovvero accendere il pin se spento e contrario. L'effetto prodotto è di accendere il pin desiderato, solo che poi resta in quello stato; inoltre il monitor seriale restituisce giusto "ok" ma il low e l'high mi da solo le finali w e h. smiley-cry smiley-cry
Code:
int statoLed[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
void setup(){
    Serial.begin(9600);
    pinMode(1,OUTPUT);
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,OUTPUT);
    pinMode(5,OUTPUT);
    pinMode(6,OUTPUT);
    pinMode(7,OUTPUT);
    pinMode(8,OUTPUT);
    pinMode(9,OUTPUT);
    pinMode(10,OUTPUT);
    pinMode(11,OUTPUT);
    pinMode(12,OUTPUT);
    pinMode(13,OUTPUT);
}

int controlla(int Led){
  if (statoLed[Led]==0){
    statoLed[Led]==1;
    //Serial.println("Ok");
    return('HIGH');
  }
  else {
    statoLed[Led]==0;
    return('LOW');
  }
}
void loop(){
  if (Serial.available()){
    char nLed=Serial.read();
    digitalWrite(int(nLed), controlla(nLed));
    //Serial.write(int(nLed)+4);
    Serial.println(controlla(nLed));
  }
}
  
penso che il problema sia legato al tipo di variabili ma non so, la mia attuale esperienza di programmazione è su python  smiley-lol smiley-lol

Grazie
27  International / Generale / Re: Stellarium + Arduino on: March 28, 2012, 12:23:06 am
Su google ho già guardato ma i risultati non portano a molto...  smiley-sad
comunque adx provo a leggermi i sorgente di stellarium,
Grazie per la risposta smiley
28  International / Generale / Stellarium + Arduino on: March 27, 2012, 04:03:59 pm
ho un grosso problema,
come già detto devo controllare un telescopio da computer, in particolare da stellarium (telescopio a forcella quindi devo portarlo nella posizione della stella e poi farlo andare con velocità opposta a quella terrestre).
Tuttavia non riesco a capire che dati Stellarium manda via seriale, e quindi su cosa dovrò lavorare.
Avete già avuto esperienze a riguardo?

Francesco
29  International / Generale / Re: Ciao a tutti on: March 24, 2012, 02:37:44 am
l'ho aggiuto, non mi piace usare solo quello, anche se ha stile  smiley-mr-green
Tanto il login si puo' fare con l'email smiley smiley
30  International / Generale / Re: Arduino Uno Retail? on: March 23, 2012, 11:37:16 am
se è solo quello allora...
grazie per la veloce risposta
Pages: 1 [2] 3