Problème Arduino Ethernet + USB Host Shield 2.0

Bonjour,

Je suis nouveau en arduino, veuillez m’excuser si la question est trop simple.
Je travaille actuellement avec la Arduino Ethernet Board combinée à l’USB Host Shield 2.0.

Arduino Ethernet Board: http://arduino.cc/en/Main/ArduinoBoardEthernet
USB Host Shield 2.0: https://www.circuitsathome.com/products-page/arduino-shields/usb-host-shield-2-0-for-arduino

Niveau alimentation, la arduino board est branchée via micro-usb (connection vers mon ordinateur pour le transfert de donnée pour installer le programme) mais aussi via le secteur fourni.

Mon objectif est de brancher un datalogger à mon USB Host Shield 2.0, ce logger va envoyer toutes les 10 secondes un petit flux de données (1ko). Je tiens a préciser que mon datalogger dispose d’une puce FTDI.

Dans un premier temps, mon objectif serait d’arriver à faire tourner le programme “normallement”, le soucis est qu’il se bloque dans la function setup, au niveau de l’appel de Usb.init(), que mon datalogger soit branché ou non. La fonction loop ne fait meme pas un tour…

J’ai donc utilisé l’example fourni par felis: USB_Host_Shield_2.0/examples/ftdi/USBFTDILoopback at master · felis/USB_Host_Shield_2.0 · GitHub

Aprés compilation et installation sur l’arduino, voici la seule sortie que j’ai: “Start”, rien de plus.

Voici mon code:

#include <cdcftdi.h>
#include <usbhub.h>

#include "pgmstrings.h"

class FTDIAsync : public FTDIAsyncOper
{
public:
    virtual uint8_t OnInit(FTDI *pftdi);
};

uint8_t FTDIAsync::OnInit(FTDI *pftdi)
{
    uint8_t rcode = 0;

    rcode = pftdi->SetBaudRate(115200);

    if (rcode)
    {
        ErrorMessage<uint8_t>(PSTR("SetBaudRate"), rcode);
        return rcode;
    }
    rcode = pftdi->SetFlowControl(FTDI_SIO_DISABLE_FLOW_CTRL);

    if (rcode)
        ErrorMessage<uint8_t>(PSTR("SetFlowControl"), rcode);

    return rcode;
}

USB              Usb;
USBHub         Hub(&Usb);
FTDIAsync        FtdiAsync;
FTDI             Ftdi(&Usb, &FtdiAsync);

uint32_t next_time;

void setup()
{
  Serial.begin( 115200 );
  Serial.println("Start");

  if (Usb.Init() == -1)
      Serial.println("OSC did not start.");
  Serial.println("AFTER INIT");

  delay( 200 );

  next_time = millis() + 5000;
}

void loop()
{
    Usb.Task();

    //Serial.println(Usb.getUsbTaskState());
    if( Usb.getUsbTaskState() == USB_STATE_RUNNING )
    {
        uint8_t  rcode;
        char strbuf[] = "DEADBEEF";
        //char strbuf[] = "The quick brown fox jumps over the lazy dog";
        //char strbuf[] = "This string contains 61 character to demonstrate FTDI buffers"; //add one symbol to it to see some garbage
        Serial.print(".");

        rcode = Ftdi.SndData(strlen(strbuf), (uint8_t*)strbuf);

	if (rcode)
            ErrorMessage<uint8_t>(PSTR("SndData"), rcode);

        delay(50);

        uint8_t  buf[64];

        for (uint8_t i=0; i<64; i++)
            buf[i] = 0;

        uint16_t rcvd = 64;
        rcode = Ftdi.RcvData(&rcvd, buf);

        if (rcode && rcode != hrNAK)
            ErrorMessage<uint8_t>(PSTR("Ret"), rcode);

        // The device reserves the first two bytes of data
        //   to contain the current values of the modem and line status registers.
        if (rcvd > 2)
            Serial.print((char*)(buf+2));

        delay(10);
    }
}

J’ai fais de nombreux test toute la journée sans succès.
Je vous remercie par avance pour votre aide.

Petit ajout: J'arrive a lancer la boucle en connectant une clef usb a la place de mon datalogger (on sort donc du Usb.init() pour aller dans loop()). Ensuite le Usb.getUsbTaskState() dans le loop retourne en chaine USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE et on ne rentre donc pas dans le "if" du loop. J'ai beau brancher/débrancher ma clef usb ou mon datalogger, rien ne change, la loop tourne en chaine avec USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE.