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.
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
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 }