domingo, 23 de diciembre de 2018

Devuelve el ROT13. Comunicación mediante puerto serie.

void setup(){
  Serial.begin(9600);//inicializar puerto serie a 9600
}

void loop(){
  byte i;
  i=0;// lo pongo así porque no estoy seguro de que se vaya a reiniciar en cada loop
  char texto[100];// la variable en la que voy a almacenar la cadena de texto
  while (Serial.available()){//Serial.available devuelve el numero de caracteres que tiene en el buffer. Si no hay nada estará a cero y no se cumplirá la condición
    texto[i++]=Serial.read();//si entra, puesto que i en el inicio vale cero irá almacenando los caracteres del buffer en el array de caracteres, que se auto-post-incrementa (i++)
  }
  byte j;//utilizo una segunda variable para ir recorriendo el array de caracteres
  if (i) rota(texto, i);
  for (j=0;j<i;j++) Serial.print(texto[j]);//imprimo todos los caracteres(el último no se imprime porque es [NULL]=0x00
  if (i) Serial.println("");//Si ha habido impresión i será distinto a 0 e imprimo un salto de línea
}

void rota (char* cadena, byte tamano){
  for (byte i=0;i<tamano;i++){
    if (cadena[i]>='A' && cadena[i]<='Z') cadena[i]=r13(cadena[i], 'A', 'Z');
    else if (cadena[i]>='a' && cadena[i]<='z') cadena[i]=r13(cadena[i], 'a', 'z');
  }
}

char r13(unsigned char car, char menor, char mayor){//hago car de tipo unsigned porque puede superar el 0xEF y lo considera negativo
  car+=13;
  if (car>mayor) car=menor+(car-mayor)-1;
  return car;
}

No hay comentarios:

Publicar un comentario