¿Cómo puedo leer el puerto serial de arduino cuando ingreso los caracteres y 'ingreso' en el teclado?

1

Quiero hacer un programa arduino que pueda esperar en el bucle, hasta que ingrese algo de sensibilidad e ingrese 'Ingresar' en el teclado, para que el programa pueda leer todos los caracteres en el puerto serie e imprimirlos

char line[80];
void setup() {                
  Serial.begin(9600);
}

void loop()  { 
  char c, *p;
  do {
    if (Serial.available() > 0) {
      //Serial.println("s");
      c = Serial.read();
      Serial.println(c);
      if ( c == '\n' || c == '\r' || c=='
char line[80];
void setup() {                
  Serial.begin(9600);
}

void loop()  { 
  char c, *p;
  do {
    if (Serial.available() > 0) {
      //Serial.println("s");
      c = Serial.read();
      Serial.println(c);
      if ( c == '\n' || c == '\r' || c=='%pre%') {
    Serial.println("break");
        break;
      }
    }
  }while(c != '\n' && c!= '\r');    
}
') { Serial.println("break"); break; } } }while(c != '\n' && c!= '\r'); }

Utilizo while (Serial.available () > 0) con la esperanza de que el programa pueda esperar hasta que ingrese en el teclado, pero el problema con la empuñadura es que la serie no reconoce el '\ n' o '\ r ', por lo que imprimiría el carácter cada vez que ingresara pero nunca imprimiría el' break '.

¿Cómo puedo hacerlo?

    
pregunta user824624

1 respuesta

3

Primero, 'Serial.println ("loop") se ejecutará cada vez que se llame a loop (), ya sea que haya caracteres disponibles o no. Eso le mostraría que el bucle se está ejecutando, pero es probable que oscurezca la salida cuando obtenga alguno.

Segundo, el ciclo while () no va a esperar a que termines de escribir; solo recopilará el carácter (o quizás dos) que acaba de escribir y luego saldrá, imprimiendo la oración parcial cada vez.

Tercero, '* line + = (char) Serial.read ()' no hace algo muy diferente de lo que creo que pretendías. Si está intentando colocar caracteres en una matriz, necesita un índice o un puntero en la matriz que incremente después de almacenar cada carácter.

Aquí hay un ejemplo (hay otras formas de hacerlo para evitar que exista un código duplicado, pero de esta manera se acerca más a la estructura de su programa original):

char line[80];
int count = 0;

void setup() {                
   Serial.begin(9600);
   Serial.println("loop");  // prompt for a sentence
}

void loop() {

   // loop() will called faster than you can type so there's
   // no need for the next block to loop; you need only test
   // once for the presence of one or more characters.
   if (Serial.available() > 0) {

      line[count] = (char)Serial.read(); // store the char
      if (line[count++] == '\r'){        // if its a CR,
         line[count] = '
char line[80];
int count = 0;

void setup() {                
   Serial.begin(9600);
   Serial.println("loop");  // prompt for a sentence
}

void loop() {

   // loop() will called faster than you can type so there's
   // no need for the next block to loop; you need only test
   // once for the presence of one or more characters.
   if (Serial.available() > 0) {

      line[count] = (char)Serial.read(); // store the char
      if (line[count++] == '\r'){        // if its a CR,
         line[count] = '%pre%';             //  zero-terminate it
         Serial.println(line);           //  and print it.

         Serial.println("loop");         // re-prompt
         count = 0;                      //  and reset the index.
      }
   }
}
'; // zero-terminate it Serial.println(line); // and print it. Serial.println("loop"); // re-prompt count = 0; // and reset the index. } } }
    
respondido por el JRobert

Lea otras preguntas en las etiquetas