Envió de datos Visual basic con Arduino.

Estimados

Junto con saludar, quisiera comentar que soy mas bien novato en esto de Arduino, les cuento que estoy realizando un proyecto entre arduino y visual basic, se trata principalmente del envió de datos desde arduino a visual, como por ejemplo una señal analógica que se refleje en visual basic, ademas envió de datos desde visual basic a Arduino como por ejemplo un valor set al cual quiero que llegue esta variable analógica para luego activar una salida ( ejemplo una bomba), la idea es que el usuario pueda digitar cualquier valor y setearlo. Hasta ahí todo va bien para mi, el problema es que en mi programa voy realizar 2 controles, un control analógico y un control de señales discretas (0 o 1, esto lo realizo a través de el código ASCII) para lo cual utilizo variables de tipo char, el control analógico tambien utiliza una variable de tipo char, entonces al hacer correr los dos programa a la ves, arduino no logra identificas si se trata del control analógico o el control de las variables discretas, por tanto no funciona de buena manera el programa, cabe señalar que si ejecuto los programas de manera independiente, estos no presentan ningún problema.
Recapitulando, lo que necesito es que cuando se envié una señal discreta tipo char de visual basic se ejecute un código (digital on, off), y cuando se envié el valor setado de visual basic se ejecute otro código ( correspondiente al código analógico) y que esto no entre en conflicto.

Los dato concatenados como por ejemplo char x[2], no me sirve, porque no se sabe si el usuario mandara una señal digital (on, off) primero o un numero seteado, esto no se puede predecir.

Disculpando lo novato de mi pregunta, les dejo mi código en arduino y espero me puedan ayudar. Saludos.

#include <EEPROM.h> // llamo a la libreria EEPROM para guardar los datos de Visual Basic una ves que se apage este.
int A =13;
int B =12;
int C =11;
int D=10;
int E=9;
int led=8;
const int pot=0; // Establece que pin vamos a utilizar como entrada analogica
int sensorh;
int M0;
int fer=0;

void setup(){
   Serial.begin(9600);
   pinMode (A,OUTPUT);
   pinMode (B,OUTPUT); 
   pinMode (C,OUTPUT);
   pinMode(D,OUTPUT);
   pinMode(E,OUTPUT);
   pinMode(led,OUTPUT);   
}
int  controlmanual(){
  char f;
   if (Serial.available()>0);
    f= Serial.read();
    if(f==97){// a A on
     digitalWrite (A,HIGH);
     Serial.flush(); // Espera a que la transmisión de datos de salida serie termine.

    }
    
    if (f==49){// 1 A off
      digitalWrite (A,LOW);
      Serial.flush();
    }
       if(f==98){//b B on
      digitalWrite (B,HIGH);
      Serial.flush();
    }
    if (f==50){// 2 B off
      digitalWrite (B,LOW);
      Serial.flush();
    }
      if(f==99){//c C on
      digitalWrite (C,HIGH);
      Serial.flush();
    }
    if (f==51){//3 C off
      digitalWrite (C,LOW);
      Serial.flush();
    }
      if(f==100){//d D on
      digitalWrite (D,HIGH);
      Serial.flush();
    }
    if (f==52){// 4 D off
      digitalWrite (D,LOW);
      Serial.flush();
    }
      if(f==101){//e E on
      digitalWrite (E,HIGH);
      Serial.flush();
    }
    if (f==53){//5 E off
      digitalWrite (E,LOW);
      Serial.flush();
    }
          if (f==65){ //A All ON
    digitalWrite(A,HIGH);
    digitalWrite(B,HIGH);
    digitalWrite(C,HIGH);
    digitalWrite(D,HIGH);
    digitalWrite(E,HIGH);
    Serial.flush();
    }
     if (f==66){// B All OFF 
    digitalWrite(A,LOW);
    digitalWrite(B,LOW);
     digitalWrite(C,LOW);
    digitalWrite(D,LOW);
    digitalWrite(E,LOW);
    Serial.flush();
    }

 }

 void memoria(){
    {
   M0 = EEPROM.read(0);
   sensorh = analogRead (pot)/10.28;  // Envia el valor del pin analógico 0
   delay(1000);
  }
   if(M0 >= sensorh){
   digitalWrite (led,HIGH);
   }
  if(M0 < sensorh){
   digitalWrite (led,LOW);
}
 }

int controlhumedad(){ // lectura de la señal analogica

   sensorh = analogRead (pot)/10.28;  // Envia el valor del pin analógico 0
   Serial.println(sensorh);   // Envia el valor del pin analógico 0 a Visual Basic
    if (Serial.available() > 0) {
    delay(20);  //Delay para favorecer la lectura de caracteres
    String bufferString = ""; //Se crea una variable que servirá como buffer
    while (Serial.available() > 0) {
      bufferString += (char)Serial.read();
    }
    int fer = bufferString.toInt(); //Se transforma el buffer a un número entero
   EEPROM.write(0,fer);
   if(fer >= sensorh){
   digitalWrite (led,HIGH);
   }
  if(fer < sensorh){
   digitalWrite (led,LOW);
   }
}
}
void loop(){

   controlmanual();
   controlhumedad();
   memoria();
 
}

Turn_off_LED_use_VB.ino (2.78 KB)

Ve a Documentación => Indice de Temas tutoriales => Serie y encontrarás tutoriales para cada lenguaje incluido Visual basic.
Luego nos comentas las dudas.

surbyte:
Ve a Documentación => Indice de Temas tutoriales => Serie y encontrarás tutoriales para cada lenguaje incluido Visual basic.
Luego nos comentas las dudas.

Muchas gracias, buscare mas información donde me indico. aunque dudo que tenga que ver con la programación en visual basic, ya que en lenguaje ensamblador para micro-controladores he podo hacer algo similar, llamando subrutinas con la variable "call" y se ejecutan de manera independiente cuando la menciono.
Saludos.

Ahh disculpa te he mal indicado.

Si tu envias comandos de control y éstos son recibidos por Arduino, simplemente al leer dichos comandos puedes redigir a la rutina o acción que busques.
Acabo de responder a alguien en esta misma sección que hace algo parecido, usando un Rasp, para el caso es lo mismo. Es comunicación serie.

Mira

int va;

void setup() {
  Serial.begin(9600);
}

void loop() { 

   
  if (Serial.available()>0) {
      va = Serial.read();
 
      switch (va) {
        case '1': Serial.println("Cambio Pin Digital LOW");
                     // pero podria ser esto
                     digitalWrite(2, LOW);
                  break;
        case '2': Serial.println("Cambio Pin Digital HIGH");
                     digitalWrite(2, HIGH);
                     break;
        case '3': Serial.println("Accion 1");
                     accion1();
                     break;
      } 
  } // fin de lectura de datos del puerto serie
} 

void accion1() {

// a continuacion tu código
}