USB Host Shield with T3.5 and Mouse

Status
Not open for further replies.

Power_Broker

Well-known member
Hey guys, I'm trying to get data from a mouse via one of those USB host shields, but when I run the example code below, I just get "OSC did not start" in the serial monitor and I'm not sure what exactly is going on. I think it's because I'm using the non-standard SPI pins.

Curious, I did add
Code:
SPI.setMOSI(11);
SPI.setMISO(12);
SPI.setSCK(13);
in setup() before Usb.Init(), but it still gives the same error "OSC did not start".

Project Pinout:
Shield - Teensy
ICSP MOSI - D11
ICSP MISO - D12
ICSP SCK - D13
ICSP RESET - 3V3
SS - D15
INT - D9

(Also, everything is powered off my PC's 5V supply)

This is the example code I'm trying to run:
Code:
#include <hidboot.h>
#include <usbhub.h>

// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>

class MouseRptParser : public MouseReportParser
{
protected:
  void OnMouseMove  (MOUSEINFO *mi);
  void OnLeftButtonUp (MOUSEINFO *mi);
  void OnLeftButtonDown (MOUSEINFO *mi);
  void OnRightButtonUp  (MOUSEINFO *mi);
  void OnRightButtonDown  (MOUSEINFO *mi);
  void OnMiddleButtonUp (MOUSEINFO *mi);
  void OnMiddleButtonDown (MOUSEINFO *mi);
};
void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
{
    Serial.print("dx=");
    Serial.print(mi->dX, DEC);
    Serial.print(" dy=");
    Serial.println(mi->dY, DEC);
};
void MouseRptParser::OnLeftButtonUp (MOUSEINFO *mi)
{
    Serial.println("L Butt Up");
};
void MouseRptParser::OnLeftButtonDown (MOUSEINFO *mi)
{
    Serial.println("L Butt Dn");
};
void MouseRptParser::OnRightButtonUp  (MOUSEINFO *mi)
{
    Serial.println("R Butt Up");
};
void MouseRptParser::OnRightButtonDown  (MOUSEINFO *mi)
{
    Serial.println("R Butt Dn");
};
void MouseRptParser::OnMiddleButtonUp (MOUSEINFO *mi)
{
    Serial.println("M Butt Up");
};
void MouseRptParser::OnMiddleButtonDown (MOUSEINFO *mi)
{
    Serial.println("M Butt Dn");
};

USB     Usb;
USBHub     Hub(&Usb);
HIDBoot<USB_HID_PROTOCOL_MOUSE>    HidMouse(&Usb);

MouseRptParser                               Prs;

void setup()
{
    Serial.begin( 115200 );
#if !defined(__MIPSEL__)
    while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
    Serial.println("Start");

    ///////////////////////////////////////////////////////////////// addition
    SPI.setMOSI(11);
    SPI.setMISO(12);
    SPI.setSCK(13);
    ///////////////////////////////////////////////////////////////// addition

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

    delay( 200 );

    HidMouse.SetReportParser(0, &Prs);
}

void loop()
{
  Usb.Task();
}


Any ideas?
 
On Teensy using:
Code:
 while (!Serial && millis()<2000); // Wait for serial port to connect

Will pause for up to 2 seconds for the PC to connect the USB. It can take 100 to 200 or more millis() after arriving in setup() for the connection to complete.

Wondering if the line "Start" was showing on your system?

That will add a short pause. For a trial to make sure the Teensy fast start isn't rushing the other hardware adding a delay(1000); after that might show different results if all else is properly connected.
 
Setup() now looks like this:
Code:
void setup()
{
    Serial.begin( 115200 );
#if !defined(__MIPSEL__)
    while (!Serial && millis()<2000); // Wait for serial port to connect
    delay(1000);
#endif
    Serial.println("Start");

    ///////////////////////////////////////////////////////////////// addition
    SPI.setMOSI(11);
    SPI.setMISO(12);
    SPI.setSCK(13);
    ///////////////////////////////////////////////////////////////// addition

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

    delay( 200 );

    HidMouse.SetReportParser(0, &Prs);
}

But it still says:
"Start
OSC did not start."

Anything else to try?
 
Status
Not open for further replies.
Back
Top