Непонятки с HTML

Вот такой вот скетч. Я думаю, что многие его уже видели. В основном он взят из уроков по Ардуино.

#include "SPI.h" //библиотека для работы с SPI
#include "Ethernet.h" //библиотека для работы с Ethernet
//#include <EthernetUdp.h>

byte mac[] = { 0xDE, 0xAD, 0xBA, 0xEF, 0xFE, 0xEA };
IPAddress ip(192, 168, 1, 178);
//const unsigned int localPort = 9631;
bool flagEmptyLine = true; // признак строка пустая
bool flag1;
char tempChar;

//EthernetUDP Udp;
EthernetServer server(80); // создаем сервер, порт 80
EthernetClient client; // объект клиент

void setup() {

  Ethernet.begin (mac, ip);//запускаем сервер с указанными ранее MAC и вашим IP
  //Udp.begin(localPort);
  Serial.begin (9600);
  server.begin(); 
  

}

void loop() {
  client = server.available(); // ожидаем объект клиент
  if (client) {
    flagEmptyLine = true;
    Serial.println("New request from client:");

    while (client.connected()) {
      if (client.available()) {
        tempChar = client.read();
        if (tempChar == '1') flag1=true;
        if (tempChar == '2') flag1=false;
        Serial.write(tempChar);

        if (tempChar == '\n' && flagEmptyLine) {
          
          client.println("HTTP/1.1 200 OK"); // стартовая строка
          client.println("Content-Type: text/html; charset=utf-8"); // тело передается в коде HTML, кодировка UTF-8
          client.println("Connection: close"); // закрыть сессию после ответа
          client.println(); // пустая строка отделяет тело сообщения
          client.println("<!DOCTYPE HTML>"); // тело сообщения
          client.println("<html>");
          
          client. print ("<center><a href=\"/$1\"><button>Включить</button></a>");  //кнопка включить
          client. print ("<a href=\"/$2\"><button>Выключить</button></a>"); //кнопка выключить
          if (flag1) client.print("<p style=\"background-color:MediumSeaGreen;\">ВКЛЮЧЕНО</p>");
            else client.print("<p style=\"background-color:Tomato;\">ВЫКЛЮЧЕНО</p></center>");
          client.println("<hr/>");
          client.println("</html>");
          break;
        }
        
        if (tempChar == '\n') {         // новая строка
          flagEmptyLine = true;
        }
else if (tempChar != '\r') {            // в строке хотя бы один символ
          flagEmptyLine = false;
        }
      }
    }
    delay(1);     
    client.stop();  
    Serial.println("Break");
  }
}

Собственно вопрос: почему на кнопки приходится нажимать по два раза, чтобы изменилась надпись под кнопками? Где я накосячил?

Накосячил в том, что городишь какую-то самописную, не соответствующую стандартам чушь, вместо использования готовых инструментов.

Пока учусь, пытаюсь, стараюсь.
Не критикуйте впустую, лучше ткните носом где неправильно.

Везде неправильно. Что за фарш у тебя вместо разбора запроса?

Ну собственно за основу брал это