© ArduTV 2025

ArduTV - TV Interface shield for Arduino.

Privacy Policy

Remotely starting (WIFI) Timer 

0f8568db-b6ab-468a-9cb7-d310fd166dab

In this simple simple example we use one Arduino UNO WIFI R4 connected to the ArduTV to have a Timer on the television (or monitor) that can be started using a remote (WIFI Comnnected) webpage from a remote device (PC, Tablet or phone).

NOTE: The example is an ArduTV modification of the "Simple Webserver" example. The original code is here: https://docs.arduino.cc/tutorials/uno-r4-wifi/wifi-examples/
WATCH THE VIDEO AT THE END OF THE PAGE. .

The code of the Example

/*

  WiFi Web Server LED Blink -- modified for ArduTV Timer example

  A simple web server that lets you start a Timer on the television.

  created 25 Nov 2012

  by Tom Igoe

  adapted to WiFi AP by Adafruit

  adapted to ArduTV by Della

  Find the full UNO R4 WiFi Network documentation here:

  https://docs.arduino.cc/tutorials/uno-r4-wifi/wifi-examples#access-point

 */

#include "WiFiS3.h"

#include <ArduTV.h>

#include "arduino_secrets.h"

///////please enter your sensitive data in the Secret tab/arduino_secrets.h

char ssid[] = SECRET_SSID;        // your network SSID (name)

char pass[] = SECRET_PASS;        // your network password (use for WPA, or use as key for WEP)

int keyIndex = 0;                 // your network key index number (needed only for WEP)

//int led =  LED_BUILTIN;

//int led =  13;

int status = WL_IDLE_STATUS;

WiFiServer server(80);

ArduTV HDMI1(10);//ArduTV CS pin

byte receivedVal=0;

byte Conto=0;

int Counter=100;

char car[3];

void setup() {

  //Initialize serial and wait for port to open:

  HDMI1.begin();//Initialite ArduTV

  Serial.begin(9600);

  while (!Serial) {

    ; // wait for serial port to connect. Needed for native USB port only

  }

  Serial.println("Access Point Web Server");

 // pinMode(led, OUTPUT);      // set the LED pin mode

  // check for the WiFi module:

  if (WiFi.status() == WL_NO_MODULE) {

    Serial.println("Communication with WiFi module failed!");

    // don't continue

    while (true);

  }

  String fv = WiFi.firmwareVersion();

  if (fv < WIFI_FIRMWARE_LATEST_VERSION) {

    Serial.println("Please upgrade the firmware");

  }

  // by default the local IP address will be 192.168.4.1

  // you can override it with the following:

  WiFi.config(IPAddress(172,20,10,9));

  // print the network name (SSID);

  Serial.print("Creating access point named: ");

  Serial.println(ssid);

  // Create open network. Change this line if you want to create an WEP network:

  status = WiFi.beginAP(ssid, pass);

  if (status != WL_AP_LISTENING) {

    Serial.println("Creating access point failed");

    // don't continue

    while (true);

  }

  // wait 10 seconds for connection:

  delay(10000);

  // start the web server on port 80

  server.begin();

  // you're connected now, so print out the status

  printWiFiStatus();

  HDMI1.BGColor(0, 00, 7);//ArduTV Background color setting

  HDMI1.Clear(); //ArduTV Command Clear the screen

  //delay(100);

  HDMI1.PenColor(31,0,15);//ArduTV Pen Color setting

  HDMI1.printString("ArduTV + UNO R4 WIFI", 60, 50,3);//ArduTV Command to print a string

  HDMI1.Rect(50, 40,160,45,0);//ArduTV Command to print a rectangle not filled

  HDMI1.PenColor(31,31,0);

  HDMI1.printString("Click on the remote device to start", 35, 100,2);//ArduTV Command to print a string

  HDMI1.PenColor(20,31,0);

  HDMI1.printString(" 5:0", 200, 200,5);

  HDMI1.PenColor(30,30,30);

  HDMI1.printString("Webserver started at 172.20.10.13", 35, 400,1);//ArduTV Command to print a string

  HDMI1.PenColor(20,31,0);

}

void loop() {

  // compare the previous status to the current status

  if (status != WiFi.status()) {

    // it has changed update the variable

    status = WiFi.status();

delay(100);

    if (status == WL_AP_CONNECTED) {

      // a device has connected to the AP

      Serial.println("Device connected to AP");

    } else {

      // a device has disconnected from the AP, and we are back in listening mode

      Serial.println("Device disconnected from AP");

    }

  }

  WiFiClient client = server.available();   // listen for incoming clients

//Serial.println("NO client");

  if (client) {                             // if you get a client,

    Serial.println("new client");           // print a message out the serial port

    String currentLine = "";                // make a String to hold incoming data from the client

    while (client.connected()) {            // loop while the client's connected

      delayMicroseconds(10);                // This is required for the Arduino Nano RP2040 Connect - otherwise it will loop so fast that SPI will never be served.

      if (client.available()) {             // if there's bytes to read from the client,

        char c = client.read();             // read a byte, then

        Serial.write(c);                    // print it out to the serial monitor

        if (c == '\n') {                    // if the byte is a newline character

          // if the current line is blank, you got two newline characters in a row.

          // that's the end of the client HTTP request, so send a response:

          if (currentLine.length() == 0) {

            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)

            // and a content-type so the client knows what's coming, then a blank line:

            client.println("HTTP/1.1 200 OK");

            client.println("Content-type:text/html");

            client.println();

            // the content of the HTTP response follows the header:

            client.print("<p style=\"font-size:15vw;\">ArduTV WIFI Timer<br></p>");

            client.print("<p style=\"font-size:7vw;\">Click <a href=\"/H\">here</a> to start timer<br></p>");

            //client.print("<p style=\"font-size:7vw;\">Click <a href=\"/L\">here</a> turn the LED off<br></p>");

            // The HTTP response ends with another blank line:

            client.println();

            // break out of the while loop:

            break;

          }

          else {      // if you got a newline, then clear currentLine:

            currentLine = "";

          }

        }

        else if (c != '\r') {    // if you got anything else but a carriage return character,

          currentLine += c;      // add it to the end of the currentLine

        }

        // Check to see if the client request was "GET /H" or "GET /L":

        if (currentLine.endsWith("GET /H")) {

   //       digitalWrite(led, HIGH);               // GET /H turns the LED on

        Serial.println("Timer Started");

//**************Restart******************************************

        HDMI1.BGColor(0, 00, 7);//ArduTV Background color setting

        HDMI1.Clear(); //ArduTV Command Clear the screen

        Counter=50;

        HDMI1.PenColor(31,0,15);//ArduTV Pen Color setting

        HDMI1.printString("ArduTV + UNO R4 WIFI", 60, 50,3);//ArduTV Command to print a string

        HDMI1.Rect(50, 40,160,45,0);//ArduTV Command to print a rectangle not filled

        HDMI1.PenColor(31,31,0);

        HDMI1.printString("Click on the remote device to start", 35, 100,2);//ArduTV Command to print a string

        HDMI1.PenColor(20,31,0);

        HDMI1.printString(" 5:0", 200, 200,5);

        HDMI1.PenColor(30,30,30);

        HDMI1.printString("Webserver started at 172.20.10.13", 35, 400,1);//ArduTV Command to print a string

        HDMI1.PenColor(20,31,0);

//**************END Restart******************************************

        HDMI1.printchar(' ', 200, 200,5);

        while (Counter>0){

          delay(100);

          HDMI1.PenColor(20,31,0);

          car[0]=Counter%10+48;

          car[1]=Counter/10+48;

          if (Counter<30){ //change color when the counter is less than 3 seconds

            HDMI1.PenColor(31,00,0);

          }

          HDMI1.printchar(car[0], 200+(5*8*3), 200,5);

          HDMI1.printchar(':', 200+(5*8*2), 200,5);

          HDMI1.printchar(car[1], 200+(5*8*1), 200,5);

          Counter=Counter-1;

        }

        HDMI1.PenColor(31,31,31);

        HDMI1.BGColor(0, 00, 10);

        HDMI1.printString("ENDED!", 185, 200,5);//ArduTV Command to print text

        HDMI1.BGColor(31, 00, 10);

        }

        if (currentLine.endsWith("GET /L")) {

        //  digitalWrite(led, LOW);                // GET /L turns the LED off

          Serial.println("LED OFF");

        }

      }

    }

    // close the connection:

    client.stop();

    Serial.println("client disconnected");

  }

}

void printWiFiStatus() {

  // print the SSID of the network you're attached to:

  Serial.print("SSID: ");

  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:

  IPAddress ip = WiFi.localIP();

  Serial.print("IP Address: ");

  Serial.println(ip);

  // print where to go in a browser:

  Serial.print("To see this page in action, open a browser to http://");

  Serial.println(ip);

}

7bdf8949-bf2e-488b-ab0e-cb3e7faba9c9

Please watch the video !

In the video the running example (sorry for the "home made" :), but we are not a company!).

© ArduTV 2025

Privacy Policy