module ws2812_driver(
    input wire clk,             
    input wire [23:0] color,    // couleur RGB (8 bits par composant)
    output reg ws2812_dout      // broche de données vers la LED
);
    reg [7:0] bit_count;        // compteur de bits pour envoyer les données
    reg [23:0] shift_reg;       // registre pour envoyer la couleur

    always @(posedge clk) begin
        
        if (bit_count == 0) begin
            shift_reg <= color;  // Charger la couleur à transmettre
            ws2812_dout <= 1'b0; // Commencer par envoyer un "0"
        end else begin
            // Envoyer chaque bit un à un en contrôlant la durée de l'impulsion
            ws2812_dout <= shift_reg[23];  // Le bit le plus significatif
            shift_reg <= shift_reg << 1;   // Décalage des bits
        end
        // Incrémentation du compteur de bits
        if (bit_count < 24)
            bit_count <= bit_count + 1;
        else
            bit_count <= 0; // Réinitialiser pour envoyer la prochaine couleur
        
    end
endmodule

