Dir wurde in beiden Threads gesagt was du falsch machst. Das ignorierst du aber. Statt dessen machst du immer noch Unsinn wie '11'. Du hast auch eine völlig falsche Vorstellung davon was ein char ist.
Wie gesagt, schau in die ASCII Tabelle:
'0' ist 48. '1' ist 49. '2' ist 50. Jedes Zeichen hat einen Wert zwischen 0 und 127. Bei den Ziffern entspricht dieser aber nicht dem Zahlenwert.
Wenn du einen char in eine Ziffer umwandeln willst musst du von dem char '0' abziehen. Da 48 - 48 = 0. 49 - 48 = 1.
Wenn du dann die Ziffern aufaddieren willst, musst du dir auch in einer extra Variable die Ziffer merken. Und dann 1. Ziffer * 1 + 2. Ziffer * 10 + 3. Ziffer * 100, etc. machen. Halt die Wertigkeiten des Dezimalsystems. Wenn du z.B. eine Variable "ziffer" für die Wertigkeit hast und bei 1 anfängst, multiplizierst du bei jedem Schritt 10 drauf. Dann hast du so 1, 10, 100, 1000, etc.
Man kann auch eine eingebene Zeile komplett einlesen und danach parsen. Das wird für dich aber auch sehr kompliziert sein und ist hier nicht unbedingt nötig.
Und die meisten deiner cases sind unnötig. Du musst die Zahl parsen, so dass du am Ende einen Integer hast. Diesen kannst du dann direkt als Index für das Array verwenden. Ohne jede Ziffer einzeln abzufragen und zu unterscheiden. Eine Gültigkeitsprüfung auf den Bereich schadet aber nichts.
client.available() gibt übrigens true zurück auch wenn nur ein Zeichen da ist. Da dann mehrmals hintereinander read() zu machen ist nicht unbedingt so eine gute Idee. Besser ist man macht nur einmal read() pro Durchlauf der Parse Funktion und lässt loop() da einfach ständig durchlaufen. So bekommt man auch alle Zeichen mit, auch wenn zwischen deren Ankunft mehr Zeit vergeht.