Pages: [1]   Go Down
Author Topic: Novato atascado con el carácter '\n' [solucionado]  (Read 892 times)
0 Members and 1 Guest are viewing this topic.
Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola :
Saludos para todos .
es mi primer post . Me compre el Arduino Uno hace mes y medio , y formal formal voy aprendiendo a base de tutoriales que voy encontrando por aquí y por allá , soy novato en todo ,pero voy aprendiendo , procuro resolver las cosas por mi mismo hasta lo razonable y me encuentro atascado en ese punto mas alla de lo razonable con una tontería en el tutorial
  http://arduino.cc/en/Tutorial/ReadASCIIString
 en el que por logica si introduzco los valores correctamente a traves del puerto serie encendería el diodo RGB e imprimiria...
Estoy atascado con la sentencia """"if (Serial.read() == '\n')"""  
Los datos los introduzco correctamente , los veo haciendo una  sentencia Serial.print(red) , por ejemplo 33 126 221 . Pero a partir de ahí no puedo con el '\n'
Siguiendo el Tutorial

Once you've read the data into your variables, check for the newline character to proceed:

if (Serial.read() == '\n') {

Es una tontería que para mí es un mundo , no se como darle al "newline character to proceed"
Gracias por anticipado
« Last Edit: January 25, 2013, 03:47:44 pm by guillermo34 » Logged

Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 956
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No he entendido muy bien la pregunta ni el objetivo.

¿ Es que quieres leer los dos carateres "\n" con el serial read ?

Recuerda que el serial read lee de uno en uno y tu tienes ahi dos  "\"  "n"  

¿es eso lo que quieres decir o es que quieres leer al ASCII correspondiente que en este caso es el 10 en DEC o 0xa en HEX?

Mira este enlace y los ascii:
http://lsi.vc.ehu.es/asignaturas/FdIc/labs/a1/htm/asciis.html

PD: El titulo de "novato atascado" no es util ni vale a nadie para hacer una busqueda en los foros con un problema determinado, mejor que lo cambiaras por algo que describa tu problema.
  Imagina alguien que no le va la pantalla LCD no va a hacer una busqueda por el texto "novato necesita ayuda" lo logico es que buscara por LCD + ARDUINO y cosas asi pues novatos con ayudas hay miles de mil cosas...
« Last Edit: January 23, 2013, 01:51:48 am by Heke » Logged

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 711
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
'\n' representa el carácter fin de línea. Muchas veces está compuesto de dos caracteres: CR (ascii 13) y NL (ascii 10).
En C cuando un fichero se abre en forma de texto, el programa asocia los dos al carácter ' \n', y los trata como si fueran uno solo. Cuando se abre el fichero en modo binario, se leen los dos uno a uno.

En Arduino, la consola tiene un pequeño desplegable en la parte inferior derecha donde puedes seleccionar si envías "Booth NL & CR" o "Newline" solo o "Carriage return" solo

yo he solido usar
Code:
char buf;
buf = Serial.read();
if(buf == 10 || buf == 13)
{
 
}
Logged

Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias por vuestras respuestas , pero no termino de desatascarme

Contestando a Heke (he tomado nota de lo que decías acerca del título del post) el objetivo es que me salga bien el tutorial para pasar al siguiente tutorial , en definitiva aprender . tengo que introducir 3 valores separados por un espacio y despues tengo que superar la sentencia if(Serial.read() == '\n') {
yo deduzco que para que el sketch siga para adelante tengo que introducir a traves del puerto serie '\n' pero no se a traves de que teclas ?, puesto que no me sale no termino de entenderlo y quizas lo que he dicho es una solemne tontería .
y por lo que me dice curro92 seguramente no pillo el concepto .
o que haya una errata en el tutorial http://arduino.cc/en/Tutorial/ReadASCIIString , pues como dice Heke ""Recuerda que el serial read lee de uno en uno y tu tienes ahi dos  "\"  "n"  ""


En definitiva que sucesion de teclas tengo que introducir para que se ejecute correctamente el sketch?

Me pasa con Arduino que no termino de encontrar un libro que sea progresivo , empiezan todos los que conozco explicando muy detalladamente el ejemplo "blink" y a la menor de cambio te endosan una sentencia de la que no tienes ni idea y no te sale la referencia clara por ninguna parte y  y te atascas , empezé comprandome un libro "Arduino , la tecnología al alcance de todos" que me gustó mucho, combinado con una tarjeta arduino basic
http://www.msebilbao.com/tienda/index.php?cPath=130&osCsid=8b9ad9d1bd6b3fcaa6692328272c0df9
 pero tiene un nivel básico y ahora no termino de encontrar uno que me guste , para muy torpones , anteriormente aprendí algunos programas graficos y tienes la ayuda de que ves lo que haces y puedes chapucear pero esto es diferente , tonterías las justas
Alguna sugerencia de algun libro detallado?

Pego el Sketch (si puedo)

const int redPin = 3;
const int greenPin = 5;
const int bluePin = 6;
void setup() {
  Serial.begin(9600);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
}
void loop() {
  while (Serial.available() > 0) {
    int red = Serial.parseInt();
    int green = Serial.parseInt();
    int blue = Serial.parseInt();
    Serial.println(red);//puesto por mi
    Serial.println(green);//puesto por mi
    Serial.println(blue);//puesto por mi,el problema es con la linea que sigue
    if (Serial.read() == '\n' )
    {
      red = 255 - constrain(red, 0, 255);
      green = 255 - constrain(green, 0, 255);
      blue = 255 - constrain(blue, 0, 255);
      analogWrite(redPin, red);
      analogWrite(greenPin, green);
      analogWrite(bluePin, blue);
      Serial.print(red, HEX);
      Serial.print(green, HEX);
      Serial.println(blue, HEX);
    }
  }
}


Logged

Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 956
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Me parece a mi que entendia otra cosa yo...

Habia pensado que querias mandarle "\" y "n" y no conseguias leerlo, me parece que no es eso.

¿Tu lo que quieres es mandarle por la terminal serie un intro o avance de linea y entonces que te conteste el arduino cuando lo detecte?

Si es eso, Curro92 te ha dicho como hacerlo, solo activar la opcion de enviar el retorno de carro o new line.

Cuando haces eso, darle a intro en la terminal serie, el arduino que esta chequeando continuamente el puerto serie (serial.read) detecta que hay algo y entonces te manda una cadena de texto que tu con la orden println le estas diciendo que imprima los caracteres y ademas le estas mandando el "new line" (ver la orden serial.print y serial.println)

No tienes que detectar el retorno de carro si ya lo has puesto arriba...

Es a mi humilde entender lo que descifro que puedas querer...
Logged

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 711
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
Como te ha dicho Heke, la tecla para meter ese carácter es el intro.
Si seleccionas en el desplegable de la consola "Newline solo" , mandará el 10, y en tu programa simplemente tendrás que mirar cuándo llega el 10
Code:
if (Serial.read() == 10)
{
}
Logged

Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aleluya !!
Ya me ha salido , la verdad es que era una tontería pero hay que saberla , simplemente era introducir los datos  , con la consola en new line y no tenía que dar a la tecla "\" o a la "n"
He perdido mogollon de tiempo para algo que si alguien te lo dice son 5 segundos
Gracias Heke y curro92 ya se algo mas de Arduino gracias a vosotros , me queda mucho? Es coña
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 711
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
me alegro de que lo hayas solucionado. No te queda casi ná...

Una última observación: estaría bien que modificaras el título del Subject, haciendo referencia al problema concreto, para que en futuras búsquedas sirva a otros.

Podrías poner  algo así, Novato atascado con el carácter '\n' [solucionado] o lo que se te ocurra.

Logged

Pages: [1]   Go Up
Jump to: