Arduino che dialoga con un applicazione Visual C#

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.

skvcsharp

 

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

arduinovcsharp

 

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   
}