Pages: [1]   Go Down
Author Topic: (solucionado) Mensajes Arduino-Serial  (Read 1385 times)
0 Members and 1 Guest are viewing this topic.
MEXICO
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas Compañeros, Les Comento Ando En Un Proyecto De Envio De Datos Inalambrico En La Uni.
Requiero Mandar Claves Atravez Del Puerto Serial.
Ya Eh Acoplado Un Modulo Bluetooth Y Una Matriz KeyPad 4x4
Mi Problema Reside En Que No Encuentro Como Hacer Una Linea Y Enviarla Ejemplo..
Solo Puedo Mandar Datos En Linea Asi
1
2
3
A
Pero Necesito Enviarlos En Un Renglon Juntos,
123A
Si Se Que Esta El Serial.println Pero No Es Lo Mismo, Si Me Doy A Entender Verdad? Seria Algo Como Hacer Un Boton Para Cuando Ya Tenga
El Codigo Que Quiero Mandar, Lo Presione y Mande Los Caracteres De Golpe y En Linea
Espero Alguien Pueda Ayudarme Les Adjunto El Codigo Hasta Ahora
Quote
#include <Keypad.h>

int boton1 =10;

const byte ROWS = 4;
const byte COLS = 4;

char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup() {
  pinMode(boton1, INPUT_PULLUP);
  Serial.begin(9600);
  delay(50);
}

void loop() {
  char customKey = customKeypad.getKey();
  
  if (customKey){
    Serial.print(customKey);
  }
  
 if (digitalRead(boton1) == LOW)
  {
   Serial.println("Existe Un Error En Los Codigos");
  }
      
delay(100);
}
Saludos
« Last Edit: May 10, 2013, 05:08:25 pm by GIGAFLARE » Logged

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

No soy de lo mas experto en esto pero por serial se manda caracter por caracter, no podes mandar una palabra. A esa palabra la tenes que armar en el receptor almacenando caracter por caracter en un array.
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 252
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, no tengo tanta experiencia como para decirte exactamente como se hace, pero si se lo que deberías usar.

Tienes que ir "Armando" un String (una cadena de texto) es como ir sumandole caracteres.

Fijate en los ejemplos que vienen en la IDE de Arduino, en el 08-Strings

Eso te dará una idea de como hacerlo. Y entonces lo disparas por el Serial, al presionar la tecla que quieras usar como disparador.

Avisa si esto es lo que buscabas. Saludos.

PD: Tampoco estaría mal que vayas viendo letra por letra, ya que de esa forma, no solo vez si te tomó lo que presionaste, o si debes corregir algo. Osea vamos, que como en un teclado real de PC
Logged

My 3x3x3 Led Cube

[url=http://arduino.cc/forum/index.php/topic,1642

MEXICO
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias Por Los Aportes Compañeros, Me Eh Puesto A Leer Sobre String...
AunNo Comprendo Bien, Eh Tomado El consejo De Revisar Los Ejemplos en el Arduino
Este Es El Mas Apegado,
Code:
/*
  String length()
 
 Examples of how to use length() in a String.
 Open the Serial Monitor and start sending characters to see the results.
 
 created 1 Aug 2010
 by Tom Igoe
 
 http://arduino.cc/en/Tutorial/StringLengthTrim
 
 This example code is in the public domain.
 */
String txtMsg = "";                         // a string for incoming text
int lastStringLength = txtMsg.length();     // previous length of the String

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // send an intro:
  Serial.println("\n\nString  length():");
  Serial.println();
}

void loop() {
  // add any incoming characters to the String:
  while (Serial.available() > 0) {
    char inChar = Serial.read();
    txtMsg += inChar;
  }

  // print the message and a notice if it's changed:
  if (txtMsg.length() != lastStringLength) {
    Serial.println(txtMsg);
    Serial.println(txtMsg.length());
    // if the String's longer than 140 characters, complain:
    if (txtMsg.length() < 140) {
      Serial.println("That's a perfectly acceptable text message");
    }
    else {
      Serial.println("That's too long for a text message.");
    }
    // note the length for next time through the loop:
    lastStringLength = txtMsg.length();
  }
}

Eh Tratado De Cambiar La Recepcion De Datos Por El De La Matriz Pero No Logro Dar, Mi Codigo Ahora Es,
Code:
#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
String txtMsg = "";                         // a string for incoming text
int lastStringLength = txtMsg.length();     // previous length of the String

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial)
  
  {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // send an intro:
  Serial.println("\n\nString  length():");
  Serial.println();
}

void loop() {
  // add any incoming characters to the String:
    while (customKeypad.getKey() > 0) {
    char inChar = customKeypad.getKey();
    txtMsg += inChar;
  }

  
  if (txtMsg.length() != lastStringLength) {
    Serial.println(txtMsg);
    Serial.println(txtMsg.length());
    
    if (txtMsg.length() < 140) {
      Serial.println("That's a perfectly acceptable text message");
    }
    else {
      Serial.println("That's too long for a text message.");
    }
    lastStringLength = txtMsg.length();
  }
}
Cambie El
while (Serial.available() > 0) {
    char inChar = Serial.read();
    txtMsg += inChar;

Por Esta Parte Segun Mi Logica, En Vez De Leer Serial Leer La Matriz (aqui eh de estar mal...)
 while (customKeypad.getKey() > 0) {
    char inChar = customKeypad.getKey();
    txtMsg += inChar;

Cuando Lo Ejecuto Y Trato De Escribir En La Matriz Aparece El El Contador De Caracteres Mas No El Introducido Desde La Matriz..
Algun Dato Que Me Puedan Dar? Saludos Y Gracias Por Comentar
« Last Edit: May 07, 2013, 06:41:20 pm by GIGAFLARE » Logged

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

Hola,
con String no te puedo ayudar.

Para recibir una cadena de caracteres char por puerto serie, puedes utilizar varios modos:

- leer caracteres hasta que que llegue el fin de línea (CR, LF o ambos, depende de la configuración del terminal), cortas cuando compruebas

if(inChar == 13 || inChar == 10) // 13 es CR, 10 es LF

- enviando un carácter de inicio y otro de final: una cadena enviada como $123A#, cuando leas '$' empiezas a llenar la cadena hasta que llegue '#'


« Last Edit: May 07, 2013, 10:36:41 pm by curro92 » Logged

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

Hola,
pues cuando uno soluciona algo con la ayuda de otros, está bien que brevemente indique en qué ha consistido la solución. Así, esa información puede servir a otros que tengan un problema parecido.
Logged

MEXICO
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias por sus aportes compañeros,
y curro el tema no lo solucione como esperaba... mejor dicho comprendi que necesito estudiar mas
acerca de la programacion usada en arduino y C, y luego plantear mejor un problema.
Saludos
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A ver.......el problema no es tanto el envío como interpretar lo que recibes, me explico......
Arduino solo puede enviar un byte por el puerto serie, lo que equivale a un carácter, si el dispositivo que recibe los datos por el puerto serie es otro Arduino lo tienes muy sencillo para agrupar los datos en una sola variable y leerla seguidamente como si fuera un solo número, pero si quieres enviar 4, 5, 6 o los dígitos que sea a través del puerto serie de Arduino los tienes que enviar de uno en uno.......el receptor es el que debe agruparlos debidamente y eso se puede conseguir de varias maneras.
Salu2.
Logged

MEXICO
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchas gracias compañero, ya había pensado en esa solución, creo es la mejor gracias por tu aporte.
pensé en usar la matriz, cuando ponga "*" el programa con el que lee los datos empieza a guardar
y cundo envié "#" el programa termine de guardar y cree la frase o código, saludos
Logged

Pages: [1]   Go Up
Jump to: