¿Cómo es la estructura general de un programa en Arduino?

Un programa de Arduino se denomina sketch o proyecto y tiene la extensión .ino 

La estructura básica del lenguaje de programación de Arduino es bastante simple y se compone de al menos dos partes. Estas dos partes necesarias, o funciones, encierran bloques que contienen declaraciones, estamentos o instrucciones.

setup()

La función setup() se invoca una sola vez cuando el programa empieza. Se utiliza para inicializar los modos de trabajo de los pins, o el puerto serie. Debe ser incluido en un programa aunque no haya declaración que ejecutar. Así mismo se puede utilizar para establecer el estado inicial de las salidas de la placa. 

loop()

Después de llamar a setup(), la función loop() hace precisamente lo que sugiere su nombre, se ejecuta de forma cíclica, lo que posibilita que el programa esté respondiendo continuamente ante los eventos que se produzcan en la placa.
//Declaración de las funciones y variables

void setup()
{
 // Funciones de inicialización que define el modo de los pines y del puerto USB
}

void loop()
{
//Funciones, estructuras de control y operadores que definen el funcionamiento de la placa

}


//Programa de ejemplo

int tiempoEncendido=1000; // Variable que establece el tiempo durante el cual el diodo se va a mantener encendido
int tiempoApagado=1000; // Variable que establece el tiempo durante el cual el diodo se va a mantener encendido

int pinDiodo=0; // Variable para establecer el pin donde va a esta conectado el diodo
void setup()
{
pinMode(pinDiodo, OUTPUT);
}

// El programa se ejecuta cíclicamente por tiempo indefinido
void loop()
{
digitalWrite(pinDiodo, HIGH); // Enciende el led
delay(tiempoEncendido); // Se mantiene encendido el tiempo establecido en la variable tiempoEncendido
digitalWrite(pinDiodo, LOW);  // Se apaga el diodo led
delay(tiempoApagado); //Se mantiene apagado el diodo led el tiempo establecido en la variable tiempoApagado
}