Edit in JSFiddle

var broches = []; // Tableau de broches
var etats = []; // Tableau d'etat des broches
var pwm;
var a0;
var millis;
var ip; // L'url+port de votre shield (my-ip.com)
var port;

document.addEventListener('DOMContentLoaded', setup, false);

function setup() {
    // fonction qui va lier les variables a leur conteneur html
    ip = document.getElementById("ip");
    port = document.getElementById("port");
    broches[3] = document.getElementById("broche3");
    broches[4] = document.getElementById("broche4");
    broches[5] = document.getElementById("broche5");
    etats[3] = document.getElementById("etat3");
    etats[4] = document.getElementById("etat4");
    etats[5] = document.getElementById("etat5");
    pwm = document.getElementById("pwm");
    a0 = document.getElementById("a0");
    millis = document.getElementById("millis");
    
    // La fonction concernant le bouton
    var bouton = document.getElementById("envoyer");
    bouton.addEventListener('click', executer, false);
}

function executer() {
    // Fonction qui va creer l'url avec les parametres puis
    // envoyer la requete
    var requete = new XMLHttpRequest(); // creer un objet de requete
    var url = "http://" + ip.value + ":" + port.value;
    url += "/?b=";
    for(i=3; i <= 5; i++) { // Pour les broches 3 a 5 de notre tableau
        if(broches[i].checked) // si la case est cochee
            url += i + ",";
    }
    // enleve la derniere virgule s'il existe
    if(url[url.length-1] === ',')
        url = url.substring(0, url.length-1);
    // Puis on ajoute la pwm
    url += "&p=" + pwm.value;
    console.log(url) // Pour debugguer l'url formee    
    requete.open("GET", url, true); // On construit la requete
    requete.send(null); // On envoie !
    requete.onreadystatechange = function() { // on attend le retour
        if (requete.readyState == 4) { // Revenu !
            if (requete.status == 200) {// Retour s'est bien passe !
                // fonction d'affichage (ci-dessous)
                afficher(requete.responseText);
            } else { // Retour s'est mal passe :(
                alert(requete.status, requete.statusText);
            }
        }
    };
}

function afficher(json) {
    // Affiche l'etat des broches/pwm/millis revenu en json
    donnees = JSON.parse(json);
    console.log(donnees);
    
    for(i=3; i <= 5; i++) { // Pour les broches 3 a 5 de notre tableau
        etats[i].checked = donnees["broches"][i];
    }
    pwm.value = parseInt(donnees["pwm"]);;
    a0.value = parseInt(donnees["A0"]);
    millis.textContent = donnees["uptime"];
}
<div class="main">
    <p>
        Adresse public du shield : <br />
        http://<input type="text" id="ip" value="123.123.123.123" size="15"/>
        : <input type="text" id="port" value="4200" size="5"/>
    </p>
    <hr />
    <p>
        <input type="checkbox" id="broche3" name="broche3" />
        <label for="broche3">Activer Broche 3.</label>
        Etat : <input type="radio" id="etat3" disabled />
    </p>
    <p>
        <input type="checkbox" id="broche4" name="broche4" />
        <label for="broche4">Activer Broche 4.</label>
        Etat : <input type="radio" id="etat4" disabled />
    </p>
    <p>
        <input type="checkbox" id="broche5" name="broche5" />
        <label for="broche5">Activer Broche 5.</label>
        Etat : <input type="radio" id="etat5" disabled />
    </p>
    <p>
        PWM : 0<input type="range" min="0" max="255" id="pwm" />255
    </p>
    <p>
        A0 : <meter min="0" max="1023" id="a0" />
    </p>
    <button id="envoyer">Executer !</button>
    <p>
        Millis : <span id="millis">0</span> ms
    </p>
</div>