//Malrechentabellenprinter © 2024 by Nathanael Nürk is licensed under CC BY-NC-SA 4.0
void bars(int maximum = 10, String barCharacter = "-"){
Serial.print(barCharacter);
if(maximum >= 10){
Serial.print(barCharacter);
}
if(maximum >= 100){
Serial.print(barCharacter);
}
if(maximum >= 1000){
Serial.print(barCharacter);
}
if(maximum >= 10000){
Serial.print(barCharacter);
}
}
void barLayout(int maximum = 10, byte ranges = 10){
bars(maximum);
for(byte x = 0;x<= ranges ; x++){
Serial.print("+");
bars(maximum);
}
Serial.println("+");
}
void layout(int Number, int maximum = 0){
if(Number < 1000 and maximum>= 1000){
Serial.print(" ");
}
if(Number < 10 and maximum >= 10){
Serial.print(" ");
}
Serial.print(Number);
if(Number < 100 and maximum >= 100){
Serial.print(" ");
}
if(Number < 10000 and maximum >= 10000){
Serial.print(" ");
}
}
void tableprinter(byte startx = 0,byte starty =0,byte range =10){
int maximum = (startx+range)*(starty+range);
Serial.println("Table from "+String(startx) +"*"+String(starty)+" to " + String(startx +10)+"*"+String(starty+10)+"\n");
bars(maximum," ");
Serial.print("|");
for(byte first = 0; first <= range ; first++){
layout(first+startx,maximum);
Serial.print("|");
}
Serial.println("");
for(byte y = 0; y <= range;y++){
barLayout(maximum,range);
layout(y+starty,maximum);
Serial.print("|");
for(byte x = 0; x <= range; x++){
layout((x+startx)*(y+starty),maximum);
Serial.print("|");
}
Serial.println("");
}
Serial.println("");
}
void setup() {
Serial.begin(115200);
Serial.println("\n\n\nReady to print vour Muliplication table.");
Serial.println("Press the Buttons for following action:\nRed for (0 to 10)*(0 to 10) \nGreen for (10 to 20)*(10 to 20)\nBlue for (20 to 30)*(20 to 30)\nYellow for (30 to 40)*(30 to 40)");
pinMode(2, INPUT_PULLUP);//Roter Knopf
pinMode(3, INPUT_PULLUP);//Grüner Knopf
pinMode(4, INPUT_PULLUP);//Blauer Knopf
pinMode(5, INPUT_PULLUP);//Gelber Knopf
while(not(digitalRead(2) and digitalRead(3) and digitalRead(4))){
delay(5);
}
}
void loop() {
byte lowpn = getlowpin();
if(lowpn != 0){
int startmx = -10;
while(lowpn != 0){
startmx += 10;
lowpn--;
}
tableprinter(startmx,startmx,10);
}
delay(10);
}
byte getlowpin(){
int lowpin =0;
for(int i = 2; i<6;i++){ //edit i < (Pins);
if(digitalRead(i)==LOW){
lowpin=i;
delay(100);
//Serial.print("lowpin: ");
//Serial.println(lowpin);
continue;
}
}
lowpin--;
if(lowpin <= 0){
lowpin = 0;
}
//Serial.print("Lowpin ist Jetzt");
//Serial.println( lowpin);
return lowpin;
}