Pages: 1 2 [3]   Go Down
Author Topic: [supporto playground]Comunicazioni Java e Arduino  (Read 2933 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho importato il file RXTX.jar in eclipse ora il sorgente lo compila senza errori (solo qualche warning) e nella console mi restituisce
Code:
WARNING:  RXTX Version mismatch
Jar version = RXTX-2.2-20081207 Cloudhopper Build rxtx.cloudhopper.net
native lib Version = RXTX-2.1-7
/dev/ttyUSB0
Experimental:  JNI_OnLoad called.
Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok sembra identificarti correttamente la porta "seriale" USB0... quindi dovrebbe essere ok!
Logged

lucadentella.it

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

bene grazie allora adesso comincerò a sbattere la testa sulla comunicazione tra java e arduino magari cominciando a dirgli di accendere un LED
Logged

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

comunque per la programmazione di arduino non ho roblemi, sono 3 giorni che lo sto programmando tutto il giorno staccando solo per mangiare e dormire  smiley-mr-green e devo dire che è molto semplice e divertente usarlo, adesso ridarò una spolverata a java e cercherò di capire come funzionano queste librerie RXTX
intanto grazie a tutti per il supporto che mi avete dato
Logged

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

ho fatto un programma che accende un LED se viene digitato 1 e lo spegne se si digita 0 altrimenti se si digita un'altro carattere dice comando errato, i comandi li passo ad arduino tramite il serial monitor della IDE di arduino per ora.
il programma funziona, nel senso che se do 1 si accende e se do 0 si spegne però guardando nel serain monitor ad esempio premo 1 mi dice:
LED acceso
comando errato
comando errato
e lo stesso se premo 0 (solo al posto di darmi LED acceso dice LED spento)

questo è il sorgente del programma
Code:
#define LED 13  // led connesso al pin 13
int cmd = 0;    // variabile per contenere il carattere ricevuto
 
void setup() {
  Serial.begin(9600); // imposto la UART per lavorare a 9600
  pinMode(LED, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
  Serial.flush(); // svuoto il buffer di ricezione seriale
}
 
void loop() {
  // Controllo se il buffer di ricezione contiene qualcosa
  if (Serial.available() > 0) {
    cmd = Serial.read(); // leggo il carattere ricevuto e lo memorizzo in rx
    Serial.flush(); // svuoto il buffer di ricezione seriale
   
    // se il comando è 0
    if (cmd == '0') {
      Serial.print(cmd);  //stampo il valore di cmd
      // controlloa se il LED era acceso
      if (digitalRead(LED) == HIGH) {
        digitalWrite(LED, LOW); // spengo il LED
        Serial.println("LED spento"); // scrivo nella seriale "LED Spento"
      }
      // se il led era spento
      else
Serial.println("Il LED e' gia spento, forse volevi accenderlo?? premi <1> per accendere il LED");
     
    }
   
    //se il comando è 1
    if (cmd == '1') {
      Serial.print(cmd);  //stampo il valore di cmd
      //controllo se il LED era spento
      if (digitalRead(LED) == LOW) {
        digitalWrite(LED, HIGH);  //accendo il LED
        Serial.println("LED acceso");  //scrivo nella seriale "LED acceso"
      }
     
      else
        Serial.println("Il LED e' gia acceso, forse volevi spegnerlo?? premi <0> per spegnere il LED");
     
    }
   
    //se il comando non è ne 0 ne 1
    else {
      Serial.print(cmd);
      Serial.println("Comando errato! premere <1> per accendere il LED e <0> per spegnerlo");
    }
   
  }
 
}

questo è quello che restituisce nel serial monitor
Code:
49LED acceso
13Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
10Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
49Il LED e' gia acceso, forse volevi spegnerlo?? premi <0> per spegnere il LED
13Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
10Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
48LED spento
48Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
13Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
10Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
guardando nella tabella del codice ASCII il 13 corrisponde a "carriage return" e il 10 a "linee feed"

una domanda cosa cambia se lavoro con UART a 9600, 4800 o ad un altro valore??
Logged

0
Online Online
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il baud rate è il numero di caratteri al secondo che possono essere inviati via seriale.

per quanto rigurda i caratteri \n\r (carriage return e line feed) sono i mormali caratteri che windows genera che vogliono dire "premuto tasto invio", nel serial monitor c'è una checkbox per disabilitare l'invio di questi caratteri.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

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

sisi adesso funziona bastava mettere "no line editing" al posto di "both NL & CR", comunque ho dovuto fare anche una piccola modifica al sorgente perchè, cioè al posto dell'ultimo else mettere
Code:
if ((cmd != '0')&&(cmd != '1'))
perchè senò premendo 0 non non mi entrava nell'if con condizione cmd==1 e quindi entrava nell'ultimo else dicendomi carattere errato
Logged

0
Online Online
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la suluzione ideale è uno switch case
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

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

giusto hai ragione lo switch è la cosa migliore, va be comunque in questo programma non mi interessava tanto l'ottimizzazione del programma ma più che altro era un esercitazione per prendere confidenza con la comunicazione seriale
Logged

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

in rete ho trovato dopo una lunga ricerca queste due guide secondo me fatte molto bene per iniziare a programmare in java usando le librerie RXTX, le metto qua in caso a qualcuno potessero essere utili
http://www.electroyou.it/tardofreak/wiki/pc-e-linee-seriali in italiano
http://embeddedfreak.wordpress.com/2008/08/08/how-to-open-serial-port-using-rxtx/ in inglese
adesso inizierò a studiarmele per bene e poi spero di riuscire (in settimana) ad accendere un LED da PC usando un software creato da me in java
Logged

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