Arduino che dialoga con un applicazione Java

Un circuito Arduino dialoga con un’applicazione scritta in Java Swing. L’app monitora i valori di temperatura e luminosità letti da Arduino e comanda l’accensione o lo spegnimento di due diodi led.

skjava

 

Lo sketch Arduino e l’applicazione comunicano attraverso una porta COM virtuale, ovvero scambiano dati attraverso la porta USB che viene vista dalla scheda e dall’applicazione come una porta seriale COM aggiuntiva.
Il progetto è volutamente semplice ma fa capire l’utilità di far dialogare Arduino con un’applicazione scritta con un linguaggio di alto livello

arduinojava

 

Scarica la soluzione completa (Tutorial, Sketch Arduino e codice Java Swing in ambiente Eclipse)

 

Sketch di Arduino

// Misuratore di temperatura e luminosità con Arduino - Mauro De Berardis 
// Soluzione Arduino + Java
void setup(){  
  Serial.begin(9600);  
    pinMode(13, OUTPUT);  
    pinMode(12, OUTPUT); 
}
void loop(){ 
 
  // Lettura luminosità----------------------------------------------
  // Arduino legge il valore della tensione del partitore Fotoresistenza-10K 
  // convertito in digitale dall'ADC a 10bit
  int Luminosita=analogRead(A5);
 
 
  // Lettura temperatura----------------------------------------------
  // Arduino legge il valore della tensione di uscita  del sensore LM35 
  // convertito in digitale dall'ADC a 10bit  
  int ValoreLetto=analogRead(A0); 
  //Si ottiene la tensione  normalizzata  tra 0 e 5 volt con:ValoreLetto 
  float Vout=5.0*ValoreLetto/1023.0 ;
  float Temperatura =Vout*1000.0 / 10.0; //Si calcola la temperatura  
  String T=(String)Temperatura;
  String L=(String)Luminosita;
  // Invia stringa sulla seriale----------------------------------------------
 
  Serial.println("!"+(String)Temperatura+"#"+String(Luminosita)+"#!");  
 
  // Legge ed esegue i comandi eventualmente  inviati dall'applicazione Java 
// sulla seriale per accendere/spegnere i led su D13 e D12--------------------- String rx=""; if (Serial.available() > 0) { rx = Serial.readString();   if(rx=="ON#ON") { digitalWrite(12, HIGH); digitalWrite(13, HIGH); } if(rx=="ON#OFF") { digitalWrite(12, HIGH); digitalWrite(13, LOW); } if(rx=="OFF#ON") { digitalWrite(12, LOW); digitalWrite(13, HIGH); } if(rx=="OFF#OFF") { digitalWrite(12, LOW); digitalWrite(13, LOW); } } delay(500); //il loop viene ripetuto ogni 500 millisecondi }