Autore Topic: Arduino  (Letto 15716 volte)

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: Arduino
« Risposta #45 il: 01 Dicembre 2010, 23:26:08 »
ok sono riuscito a mandare dati da gambas verso arduino.

Volevo provare a far variare l'intensità di unb led tramite un terminale pwm e mandando il valore da uno slide di gambas settato come valori min e max 0 255. In fase di invio però arduino riceve invece di un numero a 2 o 3 cifre le 2 o 3 cifre separate. Se mando 255 arduini riceve 2 5 5 e mi imposta il pwm a 5.

Codice: gambas [Seleziona]

Public Sub Slider1_Change()

  Write #SerialPort1, Slider1.Value

End


c'è un modo per mandare numeri più grandi di una cifra?

Matteo DoubleMM Mion

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Arduino
« Risposta #46 il: 02 Dicembre 2010, 10:11:28 »
Ho come l'impressione che invece di un valore binario, sulla porta venga inviato il codice ascii corrispondente.

Dato che si tratta di valori da 0 a 255, dovresti prendere il tuo valore e inviare sulla porta il tuo numero, abilitando opportunamente i relativi bit di una variabile Byte.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Arduino
« Risposta #47 il: 02 Dicembre 2010, 10:44:50 »
Fortunatamente la documentazione di Gambas in questo caso è chiara. SerialPort è un'istanza di Stream per cui devi far riferimento a questo oggetto.

Stream ha il metodo Write() che scrive il valore binario sul flusso stream corrispondente, nel tuo caso sarebbe la porta seriale.
Prova indicando a Gambas esplicitamente l'uso di un binario. Cioè prova dichiarando una variabile di tipo Byte e poi inserisci il valore da inviare lì dentro.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: Arduino
« Risposta #48 il: 02 Dicembre 2010, 17:05:05 »
dovrei convertire slide.value in byte e metterlo in una variabile byte, spedirlo sulla seriale e poi su arduino

VarByte  = Serial.read();
VarTesto = Char(VarByte);
analogWrite(LED, VarTesto);

questa sera provo a casa con arduino davanti
Matteo DoubleMM Mion

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Arduino
« Risposta #49 il: 02 Dicembre 2010, 21:55:50 »
Mi pare tu stia mescolando un po' i codici...  :rolleyes:

Gambas:

Codice: gambas [Seleziona]
  Write #PortaSeriale, CByte(Valore)


Arduino:

Codice: gambas [Seleziona]
  Valore = AnalogRead(Pin)


Però ora che ci penso, perché leggi i dati trasmessi dal PC con AnalogRead()? Dovresti usare lo stesso protocollo seriale, ed aprire la connessione:

Codice: c [Seleziona]
  Serial.Begin(vel_baud);
  if (Serial.available() > 0) {  Valore=Serial.read();  }
Visita il mio sito personale: http://www.leonardomiliani.com

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: Arduino
« Risposta #50 il: 02 Dicembre 2010, 23:31:33 »
Citazione
VarByte  = Serial.read();
VarTesto = Char(VarByte);
analogWrite(LED, VarTesto);

il codice è una oarte di arduino VarByte prende la lettura della seriale VarTesto è VarByte convertita mentre analogWrite accende un led con valore pwm passato da gambas.

cmq mi sorgono dei dubbi:

codice gambas:
Codice: gambas [Seleziona]

write #portaseriale, "255"


codice arduino:
Codice: c# [Seleziona]

byte SerialIn

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

void loop () {
   if (Serial.available() > 0) {
      SerialIn = Serial.read();
      Serial.println(SerialIn);
   }


risultato ricezione di tre righe con rispettivamente 2 5 5

se trasformo "255" in Cbyte(255) il risultato non cambia

se sullo sketch di arduino scrivo Serial.println(SerialIn, DEC) mi scrive delle volte 50 e delle volte 53

ho provato anche a cambirare a dichiarare la variabile SerialIn ma nulla.

Avete qualche suggerimento?
Matteo DoubleMM Mion

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Arduino
« Risposta #51 il: 03 Dicembre 2010, 10:04:28 »
"Tu sbagli candeggio"  ;D

Intanto una cosa. Ricordati che non puoi usare il canale seriale da 2 applicazione differenti. L'output ti perde dei numeri perché se stai usando "Mario" allora alcune cifre vengono intercettate dal mio programma ed altre dal terminale di Arduino.

Detto questo, un altro motivo del tuo problema della perdita delle cifre può essere dato dalla bassa velocità di trasmissione. Alza a 57600 baud.

Riprova con Mario 0.0.2 e questo sketch di Arduino. A me funziona benissimo, ogni volta che premo button 1 sul terminale di Arduino leggo correttamente 254.

Codice: c [Seleziona]
byte SerialIn;
 
void setup (){ 
  Serial.begin(57600);

 
void loop () { 
  if (Serial.available() > 0) { 
     SerialIn = Serial.read(); 
     Serial.println(SerialIn, DEC); 
  } 
}

Visita il mio sito personale: http://www.leonardomiliani.com

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: Arduino
« Risposta #52 il: 03 Dicembre 2010, 12:57:35 »
il mio problema però è il contrario. Ho provato a impostare il valore di uno slide da 0 a 255 poi a spedirlo tramite la seriale. arduino riceve i dati e li stampo sulla seriale (questa volta sul display del programma arduino). I numeri li leggo tutti ma separati.

Penso tu sappia come funziona il PWM. se scrivo analogRead(3, 125) il led sembra si accenda a metà per via della frequenza degli impulsi che gli arrivano. Il mio concetto era di far accendere un led dell'intensità passata dallo slide. Se posiziono lo slide al massimo il suo valore è 255 ma ad arduino arrivano tre valori 2 5 5. così il led si accende con frequenza pwm 2 poi pwm 5 e poi ancora 5.

stasera ti posto sketch e il prog gambas che chiamerò al posto di mario Agostino :rotfl:
Matteo DoubleMM Mion

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: Arduino
« Risposta #53 il: 03 Dicembre 2010, 22:16:25 »
@Leo ciao ti mando lo sketch e il listato gambas. A me non funziona il display mi scrive I received: e poi dei caratteri strani. Ho provato anche a cambiare il tipo delle variabili sia su gambas che su arduino ma nulla, vambiano i caratteri ma sempre strani
Matteo DoubleMM Mion

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Arduino
« Risposta #54 il: 03 Dicembre 2010, 23:34:16 »
Non ho provato lo sketch perché al momento ho Arduino al piano di sopra e sono già a letto ( ;D) però ad una prima occhiata credo che il tuo problema sia che tu chiedi di stampare sul display LCD con char(variabile). In questo modo Char() ti trasforma l'input in una sequenza di caratteri. Io credo sia per questo che vedi 2, poi 5 poi 5.
Prova a mettere solo println(valore).
Visita il mio sito personale: http://www.leonardomiliani.com

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: Arduino
« Risposta #55 il: 04 Dicembre 2010, 08:13:47 »
le ho provate tutte anche senza char. Ho provato a dichiarare le variabili byte int char cambiano i risultati ma mai quello giusto.
leggendo il wiki di stream http://gambasdoc.org/help/lang/write suggeriscono di usare una variabile float per essere sicuri di passare a write il tipo di dati giusti. che possa dipendere da questo?

PS write #serialport, cbyte(variabile) non dovrebbe servire il cbyte perchè converte già il write
« Ultima modifica: 04 Dicembre 2010, 10:27:37 da doublemm »
Matteo DoubleMM Mion

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Arduino
« Risposta #56 il: 04 Dicembre 2010, 10:28:20 »
Ma toglimi una curiosità. Il mio sketch abbinato al mio programma Gambas (senza modifiche a nessuno dei 2) funzionano oppure no?
Per capire se è un problema del tuo sistema oppure no.
Ripeto, a me i codici che ti ho mandato funzionano benissimo: ciò che trasmetto è ciò che ricevo.

L'importante è capire se il problema riguarda la visualizzazione o la ricezione. Se ricevi correttamente i valori, può essere che sia un problema di visualizzazione sul tuo LCD. Hai provato a stamparli sul terminale dell'IDE di Arduino?
Un altro paio di domande:
1) che SO usi?
2) che versione dell'IDE di Arduino usi?
Visita il mio sito personale: http://www.leonardomiliani.com

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: Arduino
« Risposta #57 il: 04 Dicembre 2010, 11:40:22 »
ho provato anche con il terminale dell'ide e non funziona. con mario gambas riceveva quello che inviavo da arduino è da gambas a arduino che non funziona.

ubuntu 10.10
l'ultima versione dell'ide di arduino 0021
Matteo DoubleMM Mion

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Arduino
« Risposta #58 il: 04 Dicembre 2010, 23:10:35 »
Non so come aiutarti, allora. Il codice che ti ho inviato a me funziona.
Non so da cosa possa dipendere. Forse dallo shield LCD che usi?
Hai provato senza, cioè la scheda di Arduino nuda e cruda?
Visita il mio sito personale: http://www.leonardomiliani.com

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: Arduino
« Risposta #59 il: 05 Dicembre 2010, 08:46:43 »
il display non è uno shield ma un I2C collegato ai piedini  analogici 4 e 5 (com'è giusto che sia con i display i2c usando LiquidDisplayI2C.h) e comunque il display l'ho collegato per fare le ultime prove prima usavo il display dell'ide. Farò ancora un po di prove poi ti saprò dire
Matteo DoubleMM Mion