Un circuito Arduino dialoga con un’applicazione scritta in Visual C#. 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 progetto Visual C# Express Edition 2010)
Sketch di Arduino
/ Misuratore di temperatura e luminosità con Arduino - Mauro De Berardis // Soluzione Arduino + Visual C# 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)+"#"+"Arduino"); // Legge ed esegue i comandi eventualmente inviati dall'applicazione Visual C# // sulla seriale per accendere/spegnare 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 }