Supongamos el siguiente caso:
Un programador termina un desarrollo. El responsable evalue al desarrollo y encuentra varios fallos. Se los indica al programador. El programador los soluciona. El responsable vuelve a evaluar los cambios pero sigue viendo el fallo. Se lo dice al programador. El programador indica al responsable que ya esta solucionado.
Lo normal es que el responsable ya no compruebe mas resultado y se fie del programador (no es lo mas correcto pero no se suele tener mas tiempo en el proyecto para mas).
Al tiempo, el evaluador (o otro miembro del equipo del proyecto) sigue encontrado fallos ya detectados y que el responsable ya le indico al programador que lo solucionara.
¿Que se ha hecho mal? Hay muchas cosas (que el responsable pruebe hasta que no vea fallos, fases de pruebas, etc..) que se puede hacer pero normalmente no hay tiempo para hacerlo por lo que lo unico que queda es FIARTE de que el programador lo va a hacer correctamente tras una (o como mucho dos) evaluación.
¿Que ha pasado? Factores a tener en cuenta:
La frustración que produce la tarea. Hacer codigo nuevo gusta, volver a un codigo que el programador creia terminado y ajustarlo no gusta.
Desconocimiento funcional de lo que se tiene que hacer.
Falta de responsabilidad con lo desarrollado. Un programador lo que quiere es terminar lo mas rapido posible y luego si hay un fallo pues intentar justificarlo con que es un fallo del grupo.
¿Que hacer para paliar estos factores?
Evaluar mientras el codigo sea nuevo.
Antes de picar nada de codigo, se debe asegurar que los programadores saben lo que tiene hacer correctamente y cual es la solucion propuesta
Suena horrible pero la solución es ser puñetero y quisquillos. Hay que mirar codigo, explicar porque ser ha hecho esto asi o asa y criticar. Con mano izquierda pero hay que ser puñetero que se justifiquen los desarrollos. Asi no solo se consigue mas calidad, se consigue que el programador sienta una relación mas estrecha con lo que ha programado.
viernes, 21 de agosto de 2015
Arduino. Leer cadena de caracteres en Serail Software
Un codigo estandar para leer una cadena de caracteres en Arduino podria ser este:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
const int MAX = 256;
void setup() {
mySerial.begin(9600);
}
void loop() {
int cont = 0;
while (mySerial.available() && cont < MAX) {
read[cont]=mySerial.read();
cont++;
}
// do something with the read characteres
}
Este codigo funciona puede no funcionar correctamente debido a muchos factores:
void loop() {
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
const int MAX = 256;
void setup() {
mySerial.begin(9600);
}
void loop() {
int cont = 0;
while (mySerial.available() && cont < MAX) {
read[cont]=mySerial.read();
cont++;
}
// do something with the read characteres
}
Este codigo funciona puede no funcionar correctamente debido a muchos factores:
- El tipo de microcontrolador. Un arduino tiene un microcontrolador ATmega168 o superior; este microcontrolador soporta perfectamente este codigo pero puede que sea neceario que este codigo funcione en otro microcontrolador menos potente (menos frecuencia y/o capacidad) por lo que puede que un codigo funcione en Arduino no tiene porque funcionar en otro microcontrolador.
- El origen de datos. El puerto SoftwareSerial esta conectado a algun dispositivo que suministra la informacion de este codigo. El Arduino lee correctamente (forma y velocidad) los caracteres del puerto SoftwareSerial pero en otros sistemas puede que el dispositivo transmita mas lento/rapido. Ademas puede que aparezca mas o menos basura.
En resumen, cuando se desarrolla un codigo para un sistema (que no esta basado en Arduino) con un Arduino se debe adecuar el codigo al sistema final. La forma mas normal de adecuar el codigo es incluir retardos.
Si el sistema final lee los caracteres demasiado rapido entonces de debe incluir un retardo entre lectura y lectura:
void loop() {
int cont = 0;
while (mySerial.available() && cont < MAX) {
read[cont]=mySerial.read();
delay (10); // retardo para leer el caracter correcto
cont++;
}
void loop() {
// do something with the read characteres
}
El valor del retardo depende del sistema final.
while (mySerial.available() && cont < MAX) {
read[cont]=mySerial.read();
delay (10); // retardo para leer el caracter correcto
cont++;
}
Si el sistema final lee los caracteres correctamente pero los caracteres se establecen en la variable "read" demasiado lento entonces de debe incluir un retardo entre lectura y lectura:
void loop() {
int cont = 0;
while (mySerial.available() && cont < MAX) {
read[cont]=mySerial.read();
cont++;
}
while (mySerial.available() && cont < MAX) {
read[cont]=mySerial.read();
cont++;
}
delay (10); // retardo para darle tiempo a los caracteres a establecerse en la variable "read"
}
Suscribirse a:
Comentarios (Atom)