×

SparkFun will be closed on Monday, May 30th, for Memorial Day. We will resume normal business hours at 9am (MT) on Tuesday, May 31st. Orders placed after 2pm (MT) on Friday May 27th will process and ship out on Tuesday, May 31st. From all of us at SparkFun, we wish you a safe and happy Memorial Day weekend!

DrewMangus

Member Since: December 19, 2010

Country: United States

  • There is a Metal Nut underneath.

  • Yes, they will indeed.

  • I just received this interesting little doodad, I'm using it with a Teensy 3.0 and here is some demo Code I wrote for it. Maybe it can help some others out. I haven't had the issue with it that others have been seeing described as poor build quality. Also, the comment from Member #333036 was pretty spot on as far as pin out. I used the encoder library from PJRC found here example which handles this device well. It does however increment +-4 every tick of the detent so just be careful when coding.

    #include 
    
    Encoder encoder(A5, A4); //These 2 pins are A and B of the encoder side, C is connected to ground
    
    const int redPin =  10; 
    const int greenPin =  A8;
    const int bluePin =  9;
    volatile boolean encoder_button = false;
    
    void setup() {
      Serial.begin(9600);
      pinMode(A3, INPUT);
      pinMode(redPin, OUTPUT);
      pinMode(greenPin, OUTPUT);
      pinMode(bluePin, OUTPUT);
      attachInterrupt(A3, buttonPush, CHANGE);
    }
    
    void loop() {
      int32_t value;
      value = encoder.read();
        Serial.print("value = ");
        Serial.println(value);
    
      if (Serial.available()) {
        Serial.read();
        Serial.println("Reset Encoder to Zero");
        encoder.write(0);
      }
      if(encoder_button)
      {
        for(int i=0; i< 20; i++) //Careful with this if you or a friend has epilepsy 
        {
          setColor(255, 255, 255);
          delay(10);
          setColor(0, 0, 0);
          delay(100);
        }
        encoder_button = false;
        Serial.println("Button Pushed");
      }
      else
      {
        setColor(value,0,0);
        delay(1000);  
        setColor(0,value,0);
        delay(1000);
        setColor(0,0,value);
        delay(1000);
      }
    }
    
    void buttonPush()
    {
      encoder_button = true;
    }
    
    void setColor(int red, int green, int blue)
    {
      analogWrite(redPin, red);
      analogWrite(greenPin, green);
      analogWrite(bluePin, blue);  
    }
    
  • It's mostly the read function from what I debugged, I ended up with this and it works as far as I can tell on my 1999 Explorer.

    //Define Serial Ports so I remember which is which
    #define PC Serial
    #define OBD Serial2
    
    //Set up ring buffer
    char rxData[20];
    char rxIndex=0;
    
    void setup() 
    {
       PC.begin(9600);
       OBD.begin(9600);
    
       ODB_init();
    }
    
    void loop() 
    {
      PC.println(getRPM()); //Print the int returned from getRPM
      delay(2000);//wait 2 seconds and grab another reading
    }
    
    void ODB_init(void)
    {
      //Wait for a little while before sending the reset command to the OBD-II-UART
      delay(2000);
      //Reset the OBD-II-UART
      OBD.print("ATZ\r");
      //Wait for a bit before starting to send commands after the reset.
      delay(2000);
      OBD_read();
      OBD.print("ATE0\r");
      OBD_read();
      OBD.flush();  
    }
    
    int getRPM(void)
    {
      //Query the OBD-II-UART for the Vehicle rpm
      OBD.flush();
      OBD.print("010C\r");
      OBD_read();
      return ((strtol(&rxData[6],0,16)*256)+strtol(&rxData[9],0,16))/4;
    }
    
    void OBD_read(void)
    {
      char c;
      do{
        if(OBD.available() > 0)
        {
          c = OBD.read();
          PC.print(c);
          if((c!= '>') && (c!='\r') && (c!='\n')) //Keep these out of our buffer
          {
            rxData[rxIndex++] = c; //Add whatever we receive to the buffer
          }  
         }     
      }while(c != '>'); //The ELM327 ends its response with this char so when we get it we exit out.
      rxData[rxIndex++] = '\0';//Converts the array into a string
      rxIndex=0; //Set this to 0 so next time we call the read we get a "clean buffer"
    }
    

    Sorry if that code is formatted super funky, First post with code in it ^_^

    Cheers hope that helps out somebody.

  • --Why was he retired? --He got old. Then some thumb-sucker came along and tagged him "RED". --Red? --Yeah, RED. R-E-D, "Retired, Extremely Dangerous".

    I thought this fit though it is a movie quote.

No public wish lists :(