Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 3 of 3

Thread: USB Host Shield with T3.5 and Mouse

  1. #1
    Junior Member
    Join Date
    Feb 2018
    Posts
    12

    USB Host Shield with T3.5 and Mouse

    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?

  2. #2
    Senior Member+ defragster's Avatar
    Join Date
    Feb 2015
    Posts
    9,299
    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.

  3. #3
    Junior Member
    Join Date
    Feb 2018
    Posts
    12
    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?

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •