Go Down

Topic: Apoyo para L298N + PAP + bluetooth (Read 1 time) previous topic - next topic

fernando3110

y respondiendo a tu pregunta

Significa lo que significa, si no es el moderador nadie da una idea de que funcion deberia de utilizar, solo ha comentado sobre los pasos del motor que lo agradezco mucho pero no es por lo que cree el post

surbyte

#16
Feb 21, 2018, 02:52 pm Last Edit: Feb 21, 2018, 03:00 pm by surbyte
Pero eso es un simple manejo de lo que estas recibiendo
Code: [Select]
if(Serial.available()>0){
input=Serial.read();


Ahi recibis de aun char pero tenes que esperar a armar toda la información empezando por tu caracter estrella que es ':' asi que esperas eso y luego, tenes que armar un entero formado por al menos 1,2 o 3 chars porque no sabes que coordenada te envia, si 3 grados 30 o 330 por dar ejemplos.

Entonces

Code: [Select]

// define
bool flag = false;
byte cont = 0;
int coord = 0;

// luego en tu loop

          if (Serial.available()>0){
            input=Serial.read();
            if (input = ':') {
                flag = true;
                cont = 0;
                coord = 0;
            }
            if (flag) {
               coord += input*(10^cont);
               cont++;
            }
            // hay que detectar el corte del número
            // desactivar el flag para que no siga actuando y tendras una coordenada en grados disponible

Es una aproximación

Ve a Documentación, Indice de temas tutoriales (1er hilo), y busca Puerto Serie, verás varios tutoriales de Noter y Metaconta que te daran buena idea.
Si buscas en Google hay algo muy bueno de Nick Gammon.

surbyte

y respondiendo a tu pregunta

Significa lo que significa, si no es el moderador nadie da una idea de que funcion deberia de utilizar, solo ha comentado sobre los pasos del motor que lo agradezco mucho pero no es por lo que cree el post
Pues Fernando tienes un problema, pusiste tu consulta el dia 20/02 y hoy es 21/02, hay algo que se llama tener paciencia, y debes esperar a que alguien responda a su tiempo, cuando lea tu pregunta, en su zona horaria, etc, etc.

fernando3110

Pero eso es un simple manejo de lo que estas recibiendo
Code: [Select]
if(Serial.available()>0){
input=Serial.read();


Ahi recibis de aun char pero tenes que esperar a armar toda la información empezando por tu caracter estrella que es ':' asi que esperas eso y luego, tenes que armar un entero formado por al menos 1,2 o 3 chars porque no sabes que coordenada te envia, si 3 grados 30 o 330 por dar ejemplos.

Entonces

Code: [Select]

// define
bool flag = false;
byte cont = 0;
int coord = 0;

// luego en tu loop

          if (Serial.available()>0){
            input=Serial.read();
            if (input = ':') {
                flag = true;
                cont = 0;
                coord = 0;
            }
            if (flag) {
               coord += input*(10^cont);
               cont++;
            }
            // hay que detectar el corte del número
            // desactivar el flag para que no siga actuando y tendras una coordenada en grados disponible

Es una aproximación

Ve a Documentación, Indice de temas tutoriales (1er hilo), y busca Puerto Serie, verás varios tutoriales de Noter y Metaconta que te daran buena idea.
Si buscas en Google hay algo muy bueno de Nick Gammon.
MUCHISIMAS GRACIAS este tipo de aporte era el que necesitaba, ahora a leer mucho y a tomar mucho migral porque me va a explotar la cabeza jaja SALUDOS

surbyte

Ojo que le falta.. no se como termina lo que estas recibiendo... por si hay un caracter de fin de comando
Busca eso que es importante para darle un corte a cada lectura
No se si recibis asi
X: 100
Y: 25
Z: 44
lo que implica que hay un LineFeed y/o Carriage Return
eso son un comando 0x10 y otro 0x13 que no se ven si los imprimis pero si podes verlo si imprimis asi

Serial.print(input, HEX);
Eso mostrará todo lo que estas recibiendo.
Identifica como termina recibiendo los comandos y de ahi cerramos cada coordenada

fernando3110

Por fin pude solucionarlo era solo cuestion de usar String

ejemplo

Code: [Select]

String input;
void setup() {
     Serial.begin(9600);
}
void loop() {
  if(Serial.available()>0){
  input=Serial.readString();
  if(input=="X:10"){
    // gira media vuelta en una direccion
   Serial.println("GIRA DERECHA");
    }
    }
  }

surbyte

Bueno por lo visto no te comprendí desde el inicio del post.. jaja, horrible lo mio.

fernando3110

Hay que leer mejor jaja ahora te retaba yo jaja, a veces el profesional ve mas alla de lo que quiere simplemente hacer un novato, seguramente el codigo lo harias muy profesional pero como voy aprendiendo de a poco, no queda otra que hacerlo simple. MUCHAS GRACIAS IGUAL por que ahora tendre que implementar los de los pulsos de los motores, SALUDOS

surbyte

NO me justifico pero tu título y esto
Quote
por ejemplo "X: 10" que la traduzca el arduino en movimientos y mueva el motor 10 grados (o pasos) hacia un lado o el otro segun corresponda
me confundió y lo miré del lado del hardware y no que tenias un problema de código.

Pero Fernando hay cientos de ejemplos de uso serial.
Casi que no hace falta preguntarlo.

Por eso arme el Indice de temas tutoriales para que las preguntas comunes se evacúen rápidamente.

Igual la pifié hasta que te entendí.

fernando3110

Ya surgio otro problema con string no me funciona con bluetooth

surbyte

#25
Feb 21, 2018, 10:57 pm Last Edit: Feb 21, 2018, 10:58 pm by surbyte
Prueba con un delay de 10 mseg algo luego de la lectura.

Code: [Select]
input=Serial.readString();
delay(10); // o prueba con 5


aunque tengo la duda de que readString en realidad espera a recibir 0x13
Y ese es el problema.
Cuando lo hacias por monitor serie, y enviabas X:10 al final le agregas el 0x10 y el 0x13 cuando das el ENTER
puede que no el 0x10

Pero con el BT, no se que caracter de fin envia el Unity3D que es lo que te dije antes.
Trata de ponerle

Code: [Select]
input = Serial.read();
Serial.print(input, HEX); //para ver que estas recibiendo

fernando3110

en el monitor serie pongo ejemplo X:100 y enter y me funciona bien

surbyte

claro porque cuando le das enter intruduce 0x13 al final, un caracter que no ves

fernando3110

estaba viendo en youtube y encontre un tutorial que supuestamente es para enviar string por bluetooth

Code: [Select]

int pinLed = 13;
String readString;

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

void loop() {
  while(Serial.available()){
    delay(3);
    char c = Serial.read();
    readString +=c;
  }

  if(readString.length() > 0){
    if(readString =="POWER"){
      digitalWrite(pinLed,!digitalRead(pinLed));
    }
    readString="";
  }

}


igual no me funciona con el bluetooth

surbyte

Y has puesto lo que yo te dije? Pudiste ver que se recibe?

Go Up