control arduino con visual

Hola chicos!!; Me estreno en el foro con una duda que me es vital para mi proyecto fin de carrera. Me explico:

Estoy haciendo un pequeño robot con ruedas y se trata de conseguir que por medio de una ventana visual se pueda elegir de entre unas formas determinadas y las dimensiones de estas para que el robot las haga. En principio ya he conseguido que dibuje las formas controlando los parámetros desde el programa de arduino directamente; esto es que yo cambio las directrices, cargo el programa, arranco el robot y lo hace. Lo que quiero conseguir es que se pueda volcar el programa o bien cambiar los parámetros desde una ventana programada con visual studio y así tener un ejecutable que permita elegir todo y que sea un programa más flexible y que cualquiera pueda usar. Vamos, que el usuario elija la opción que quiera, cargue la información por medio del cable USB, arranque el robot y él se ocupe de dibujar la forma.

Si alguien pudiera ilustrarme con algún ejemplo sencillo me sería de gran ayuda.

Un saludo y gracias por adelantado

Esos parametros que modificas... conviertelos en variables, así podrás modificarlos.

luego al principio del loop podrías mirar si hay datos en el buffer serial, si es así, los lee y los carga en las variables que acabas de hacer y así podrás modificar los parametros (con un programa en visual que los mande via serial) sin tener que cargar todo el programa, ni si quiera es necesario pulsar el boton de reset

Efectivamente!!! Esto de ser novato...... Me estaba complicando la vida cuando era bastante obvia la solución. Muchas gracias Daklon

A mi me ha pasado mas de una vez, no saber como resolver algo, verlo imposible, despues llega alguien con un enfoque diferente y en dos patadas lo arregla xD

Hola whaa.

mírate este código que seguro que te da alguna idea, para tu proyecto.

long esnum(    char *n){
  char c;char num[9],*_num=num;long numero=0;
 
while(c=*n){*n++; 
if (c=='-' || c<='9' && c>='0'){*_num++=c;}
 else {*num='\0'; numero=-2;break;}
}
*_num='\0';
if (numero>=-1){numero=atoi(num);}
 
return numero;
}
  char lectura[30];    

void setup(){
  pinMode(13,OUTPUT);
  Serial.begin(9600);
 
 
 
}


void loop(){

  
  
  long timer =millis();unsigned int timer2=timer%1000;
 if (timer2<300 && timer>200 ){ 
if (Serial.available()>0)
  {
 byte pos;                           
                  
     while(Serial.available()>0){   
    lectura[pos]= Serial.read() ; 
    pos=pos+1;        
                                                                 
 delay(3);    
    }
lectura[pos]='\0'; 
 
 edita(lectura);
  }
}
  
}



void edita( char *datos){
    Serial.flush() ;

  char _datos[500];*_datos='\0';strcpy(_datos,datos);strcat(_datos,"\0");
   char *pch;
char dat1[20]; char dat2[20]; char dat3[20]; 
    byte cuent=0; 
pch=strtok(_datos," " );
   while (pch !='\0'){
   if (cuent==0){strcpy(dat1,pch);strcat(dat1,"\0");cuent=1;}
else if (cuent==1){strcpy(dat2,pch);strcat(dat2,"\0");cuent=2;}
else   if (cuent==2){strcpy(dat3,pch);strcat(dat3,"\0");cuent=3;}
 
   pch=strtok('\0'," ");
   }
 
 
 
   *_datos='\0';strcpy(_datos,"PRINT PRINTLN DIGITALWRITE");strcat(_datos,"\0");  
   signed char  pos=-2,cuenta=0 ; 
   pch=strtok(_datos," ");
   while (pch !='\0'){ 
     if (strcmp(pch,dat1)==0){pos=cuenta; 

 break;}
 cuenta++;
   pch=strtok('\0'," \r\n");
   }
if(pos==-2){Serial.println("eing!!");return;}

signed char numdat=pos;
   int  numint1=-2; 
   int numint2=-2;
   
 switch (pos) {

  
  case 0:// PRINT
 Serial.print(dat2);
  break;
case 1://PRINTLN
 Serial.println(dat2);

 break;
 case 2: //  DIGITALWRITE
 numint1=esnum(dat2);numint2=esnum(dat3); 
 if (numint1==-2 || numint2==-2){Serial.println("ERROR NO NUMERO");}
 else if (numint1>=14 || numint1<=1){Serial.println("ERROR PIN NO DISPONIBLE");}
 else if (numint2>=2 || numint2<=-1){Serial.println("ERROR ESTADO NO DISPONIBLE");}
else {digitalWrite(numint1, numint2);
 Serial.println("OK");}
   break;
}

}

desde la consola serial del ide de arduino puedes mandar imprimir (PRINT o PRINTLN), ejemplo: PRINT Hola que tal!?
también puedes cambiar el estado del pin 13 (DIGITALWRITE) ejemplo: DIGITALWRITE 13 1

Espero que te sea de ayuda

Saludos