Convertir une String en entier ( int) !

Le compilateur ne bugge pas, il t'insulte juste parce que tu lui demande n'importe quoi.
XD

Blague mise à part, le C/C++ est un langage très typé.
On ne peut pas faire n'importe quoi.
De plus c'est une langage très bas niveau qui ne contrôle non plus pas tout ce que tu fait. Le compilateur suppose que le programmeur sait ce qu'il fait.

String maString; est un objet de type String. La classe String contient un membre toInt() (qui de manière interne fait appel à atoi() );
char maChaine[20]; est un tableau de caractères. atoi() est une fonction de la libc (bibliothèque standard du langage C) qui effectue une opération de conversion entre une chaine de caractère représenté par un tableau de caractère et un int.

String (classe C++) est un objet de plus haut niveau que char[] (tableau C).

Mais bien que tu puisse faire du C++ sur Arduino, tu n'est pas sur un ordinateur de bureau avec mémoire virtuelle infinie etc ...

Sur un microcontroleur il faut comprendre ce qu'il se passe au bas niveau, en mémoire, pour éviter de faire n'importe quoi.

Le problème de String est que cette classe te masque tout les aspects de gestion de la mémoire associée. Or quand tu n'as que 2KB de mémoire, mieux vaut avoir une vision claire de chaque octet utilisé. Parce que quand ton programme vient a manquer de mémoire, il crashe violemment sans t'expliquer pourquoi.