Paso 5: Cambio de personajes a través de la página
Para mover el tanque, definí una posición x pixel-wise para el dibujo. Ya que estaba tratando con personajes que fueron cinco píxeles de ancho, podría hacer una división de entero del tanque x posición de la figura hacia fuera el donde quiero llamar cada personaje personalizado.Yo también sólo llevaría a un modulo de x posición (tankx % 5) para averiguar cómo cambiar los bits alrededor del tanque. Si el modulo es cero, dibujar los personajes y definir los bits de los caracteres. Pero si el modulo fue cero, significaba los personajes ya estaban en la pantalla, y sólo podría redefinir los bits. Quisiera también llamar un espacio en blanco cualquier plano previo de carácter personalizado 0 (el que está más a la izquierda) cada vez que me estaba "moviendo" a los personajes.
Por lo tanto, para empezar, inicializar la posición de tankx a algún valor que dividiría limpiamente por cinco.
int tankx = -15;
int tankcharx;
int tankchary = 1;
Luego, en la función loop(), haría la división y el modulo para averiguar lo que a dibujar y dibujar. (Ten cuidado con cómo el modulo de los números negativos funciona.)
Otra manera de hacer esto, en retrospectiva, sería hacer tankx siempre no negativo y cambiar la posición del carácter x -3 antes de la representación.
Esta es la parte del código loop() que obtiene los caracteres personalizados en la pantalla. En una mejor interpretación de este código, incluido las funciones de dibujo en una función safeDrawCharAt que hace el control de posición. Pero aquí se puede apreciar la interpretación mayores donde estaba haciendo la posición de control en línea. Puesto que en cualquier momento podrían ser los personajes fuera de la pantalla, tuve que hacer una comprobación de la posición antes de cualquier llamada setCursor() o write().
tankcharx = tankx / BITS_PER_CHAR;
Interpretación inicial, no hay rotación de peldaños
Si ((tankx % BITS_PER_CHAR) == 0) {}
Turno completo es, necesita establecer un espacio en blanco donde el depósito pasado estaba
Si (tankcharx > = 1) {}
lcd.setCursor (tankcharx-1, tankchary);
LCD.Write(' ');
}
Si (tankcharx > = 0 & & tankcharx < = 7) {}
lcd.setCursor (tankcharx, tankchary);
LCD.Write((byte)0);
}
Si (tankcharx + 1 > = 0 & & tankcharx + 1 < = 7) {}
lcd.setCursor (tankcharx + 1, tankchary);
LCD.Write((byte)1);
}
Si (tankcharx + 2 > = 0 & & tankcharx + 2 < = 7) {}
lcd.setCursor (tankcharx + 2, tankchary);
LCD.Write((byte)2);
}
Si (tankcharx + 3 > = 0 & & tankcharx + 3 < = 7) {}
lcd.setCursor (tankcharx + 3, tankchary);
LCD.Write((byte)3);
}
}