Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

02/12/2012 #1


Arduino y comunicacion serial
Hola a todos, tengo una super duda que espero me ayuden a resolver.

Tengo un sistema de un eje de libertad (un tornillo sin fin) que mueve una plataforma. El motor tiene un encoder incremental que uso para posicionar

El caso es que usando arduino y la comunicación serie he podido avanzar en un sentido desde una posición de referencia desde la que empiezo a contar. El problema es que cuando ingreso un numero y va a esa posición, después me es imposible ingresar otro numero por el monitor serie de arduino (o de cualquier otro terminal).

Resumiendo, puedo enviar un numero, pero no puedo ingresar el siguiente, tengo que cerrar el monitor serial, lo que involucra que el sistema regresa a su posición inicial sin siquiera lo ordene

les adjunto el código

Código:
//Salidas
int A = 8;
int B = 10;

//Entradas
int IN = 4;
//contador
unsigned long cont = 0;

//auxiliares
int valor_act;
int valor_ant;
int dir=0;
int aux=0;
char cadena[24];
int contador=0;
int i;


void setup()
{
  Serial.begin(9600);
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  attachInterrupt(0, interrupcion, RISING);
}

void loop()
{
  noInterrupts();
  //Posicion a cero (solo se ejecuta una vez al iniciar)
  digitalWrite(A,LOW);
  digitalWrite(B,LOW);

  while(digitalRead(IN)){
    digitalWrite(A,LOW);
    digitalWrite(B,HIGH);
  }
  
  digitalWrite(B,LOW);
  digitalWrite(A,LOW);
  interrupts();
  
  while(1){
     if(Serial.available()){
        memset(cadena, 0, sizeof(cadena));
        while (Serial.available()>0){
          delay(5);
          cadena[contador]=Serial.read();
          contador++;
        }
        valor_act=atoi(cadena);
        contador=0;
        
        if(valor_act>valor_ant){
         aux=valor_act-valor_ant;
         for(i=0; i<aux;i++){
           cont=cont+16443;
         }
         dir=1;
        }
        if(valor_act<=valor_ant){
         aux=valor_ant-valor_act;
         for(i=0; i<=aux;i++){
           cont=cont+16443;
         }
         dir=2;
        }
       Serial.println(aux);
       Serial.println(cont);
       digitalWrite(13,LOW);
     }
     delay(500);

     while(cont>0){
       if(dir==1){
         digitalWrite(A,HIGH);
         digitalWrite(B,LOW);
       }
       if(dir==2){
         digitalWrite(A,LOW);
         digitalWrite(B,HIGH);
       }
     }
     digitalWrite(A,LOW);
     digitalWrite(B,LOW);
     dir=0;
     valor_ant=valor_act;
     
   }
  
  
}

void interrupcion()
{
  cont--;
}


les agradecería me pudieran ayudar
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.