Also ich könnte mich irren (mein Arduino ist noch in der Post und ich kanns nicht testen und mit C hab ichs auch nicht so), aber es könnte sein, dass Ersteres deshalb geht, weil "
buffer" eine Stelle im Speicher beschreibt, an der 50 "
char"s liegen (wurde durch die Definition "
char buffer[50];" so festgelegt), also 50 Zahlen mit Werten zwischen 0 und 255.
'e' in einfachen Anführungszeichen wird auch als Zahl interpretiert (im ASCII-Alphabet ist das dann die 101); wenn nun also die zweite Zahl hinter dem Anfang von "
buffer" eine 101 ist, dann greift die IF-Klausel, weil "
==" zwei Zahlen direkt vergleicht.
Das Problem ist nun, dass
"test" mit doppelten Anführungszeichen im Speicher auch eine Liste aus chars ist (das Konstrukt eines Wortes, also "
String", ist in C von Haus aus nicht bekannt, soweit ich weiß). Diese Liste ist vier Zahlen lang (eigentlich fünf, weil ganz hinten noch eine 0 steht, quasi als Markierung, dass hier Schluß ist), und "
buffer" und "
test" sind damit eigentlich keine Wörter sondern Zeiger auf die Anfangspositionen der beiden Listen.
Wenn Du nun beide mit "
==" vergleichst, dann vergleichst Du nicht die Inhalte der Listen sondern die genaue Position der beiden Listen im Speicher, und die ist natürlich unterschiedlich.
Funktionieren müsste eigentlich "
if (buffer[0]=='t' && buffer[1]=='e' && buffer[2]=='s' && buffer[3]=='t')", aber wie gesagt möge man mich korrigieren, wenn ich falsch liege.
