Ler um determinado pino em C#

Fala pessoal,

Existe uma forma de ler um pino específico através do C#?

Por exemplo, eu quero saber se o pino 22 está em HIGH ou em LOW....
ai no C# eu usaria algo do tipo:

bool/int/string pin22 = serialPort1.Read(pino22...);

OU

Manter uma comunicação constante do arduino com a aplicação mas eu só registrar as mudanças de estado do pino 22?

Tens de definir um protocolo para isso.

O mais simples que podes implementar é manter a comunicacão aberta no C# e o Arduino enviar-te o estado do pino em todos os ciclos.

setup() {...}

void loop(){

Serial.println(digitalRead(22));

}

O ideal é implementar algo para o computador fazer um polling do Arduino (deixando-te assim saber quando ´€ que o Arduino deu o berro ou foi desligado, por exemplo).

C# seria algo assim

serialPort1.Write(S22);

E no Arduino:

...
if (Serial.available() > 3) { 
   if (Serial.read() == 'S') {
       int number = (10 * (Serial.read()-48)) + (Serial.read() - 48);
       Serial.print(digitalWrite(number));
   }
}

Este código tem uma série de problemas que podem acontecer, mas mostra a funcionalidade que pretendes.

Entendo..
Achei que fosse possivel receber o dado cru do arduino e ser capaz de interpretar no C#...
E saber de qual pino veio o dado e em qual estado...

Como assim, dado cru?

Tu podes adicionar o que quiseres ao protocolo...

Podes fazer algo assim no Arduino:

if (Serial.available() > 3) { 
   if (Serial.read() == 'S') {
       int number = (10 * (Serial.read()-48)) + (Serial.read() - 48);
       Serial.print("S");
       unsigned char status = digitalRead(number)
       Serial.print(number);
       Serial.print(":");
       Serial.print( status == HIGH ? "HIGH" : "LOW");
       
   }
}

O arduino é como um "outro computador", rodando um programa que você mandou ele, em C# você pode se comunicar com o arduino, pois seu programa em C# está rodando no seu computador, não no Arduino...