Announcement

Collapse
No announcement yet.

StreetDeck for a 1955 Buick

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • StreetDeck for a 1955 Buick

    The Head Unit
    The original “head unit” for my car was a 1 foot by 1 foot by 1 foot cube of vacuum tubes and gears. Welcome to the world of 1955 Buicks! I have shaved the face off of it and thrown away the rest. I have modified it to include a Phigit Text LCD that has a built in Phigit 8/8/8 interface (8 digital in, 8 digital out, and 8 analog in).


    This picture shows a matrix orbital LCD instead of the new Phigit.




    Here is how it look in my car today. I am rebuilding the whole system to use StreetDeck and some of the gear from Phigits.


    The LCD

    The Phigit LCD will sit just above the original 5 radio control buttons. I will cover the LCD with a clear thin glass or plastic. Paint the interior of this glass or plastic black except where the actual characters display. Leave clear area for the LED’s. We will label the buttons on the interior of the glass.


    With the unit turned off, it should appear with only the alarm LED lit:


    With the unit turned on:


    Problem: How do I get notification from StreetDeck that a new artist/song has transpired so I can update the LCD?
    4 Led’s
    1. Red. Powered from Phigit LCD Display output. So I can send a warning. Use the phigit output ground and the #0 output channel.

    Problem: How can I set some threshold on speed, rpm, etc so that I can sense when to turn this LED on? This is not critical. I really have no idea what event I would like to trigger this LED. I am sure something cool will turn up.

    2. Green. Powered from 12 V power on. So I can see when the computer is on.
    3. Green. Connected to long lead. Will connect at later point to power supply external indicator LED.
    4. A Red LED that is currently under the dash associated with the alarm system.

    3 Analog Inputs
    1. “Volume” on outer left knob.
    2. “Tone” on inner left knob.
    3. Temperature probe.

    Problem: What API do I use with StreetDeck to set volume at a specific level? When my volume knob is at 40%, I would like to set system volume at 40%.

    Problem: I have this great tone analog input associated with the old 1955 Buick Sonomatic tone control. Any idea what I can do with it?

    Problem: How do I set a variable in StreetDeck that represents my temperature so I can display it in a custom dynamic label? How do I update new temperatures to StreetDeck?

    5 Digital Inputs
    These will map directly to the 5 buttons on the face. The underlying switches can be normally open or normally closed. It doesn’t matter. Just make them all the same.

    I understand that I can use the Windows SendMessage API to send messages to StreetDeck. No real problem here.

    Power On/Off
    The left knob has a power on/off associated with the volume control. This will be the signal to the computer to turn itself on /off. It is NOT fed by ACC. It will have always on 12V so I can play the thing with the key off.

    Encoder
    The right knob will connect to an encoder. In addition to unlimited clockwise and counter-clockwise movement, it has a press button capability. It is fed by USB.

    Problem: I want to scroll down when the encoder is turned to the right and scroll up when turned to the left. I want to “select” when the encoder is pressed.

    7 Button Face

    The 7-button face has 7 buttons with integrated LEDs. The concept is that I can press the XM button and go to the satellite screen in StreetDeck. A Phigit 8/8/8 Interface Kit will control the 7 button face. It will detect when a button is pressed and light the appropriate LED and send a Windows SendMessage API to StreetDeck to go to the proper module.

    Problem: I want to change the LED’s based upon input from the StreetDeck interface, also. To do this, I will need to know when StreetDeck changes modes. For example, if StreetDeck changes from XM to MP3, I need some sort of signal that this has happened so I can turn off the XM LED and turn on the MP3 LED.
    Andy
    55 Buick Carputer - http://www.55buick.com/Carputer/carputer.htm

  • #2
    Originally posted by aforget View Post
    Problem: How do I get notification from StreetDeck that a new artist/song has transpired so I can update the LCD?
    You need to create a new script project and add a scripted overlay to it. Then create 1 second timer and call app.GetDynamicStringValue for the current media title. You'll have to remember the current title each time and check if its changed.


    Originally posted by aforget View Post
    Problem: How can I set some threshold on speed, rpm, etc so that I can sense when to turn this LED on? This is not critical. I really have no idea what event I would like to trigger this LED. I am sure something cool will turn up.
    In that same timer you can also check NAV.GetSpeed(). Version 1.0.5.5 will also add a NAV.GetMetric() function that will let you get information like the distance to the next turn so you could set the light to come on when you get near a turn in your route.

    Originally posted by aforget View Post
    Problem: What API do I use with StreetDeck to set volume at a specific level? When my volume knob is at 40%, I would like to set system volume at 40%.
    Use App.SetVolume


    Originally posted by aforget View Post
    Problem: I have this great tone analog input associated with the old 1955 Buick Sonomatic tone control. Any idea what I can do with it?
    Lots of things. For example, you can set it as a nav zoom, page up / page down, or 3d module switching.

    Originally posted by aforget View Post
    Problem: How do I set a variable in StreetDeck that represents my temperature so I can display it in a custom dynamic label? How do I update new temperatures to StreetDeck?
    You add a label to your scripted overlay you created earlier, then just update it in the overlay script whenever you need to.

    Originally posted by aforget View Post
    Problem: I want to scroll down when the encoder is turned to the right and scroll up when turned to the left. I want to “select” when the encoder is pressed.
    Just use the phidgets encoder plugin and configure it as shown here:
    http://www.mp3car.com/vbulletin/showthread.php?t=68228




    Originally posted by aforget View Post
    Problem: I want to change the LED’s based upon input from the StreetDeck interface, also. To do this, I will need to know when StreetDeck changes modes. For example, if StreetDeck changes from XM to MP3, I need some sort of signal that this has happened so I can turn off the XM LED and turn on the MP3 LED.
    You can't quite do this one now, but I will add a function to 1.0.5.5 called App.GetCurrentModuleName() that will return the name of the current module. In the same timer event in your Overlay, you will have to check the current module name against the names of the modules you want it to light up on and set the appropriate light.
    StreetDeck.com Developer (I am Chuck)
    Get StreetDeck at http://www.streetdeck.com
    The Official StreetDeck Forums have moved, please visit us at http://www.streetdeck.com/forum for official support for Streetdeck.

    Comment


    • #3
      Originally posted by god_of_cpu View Post
      You can't quite do this one now, but I will add a function to 1.0.5.5 called App.GetCurrentModuleName() that will return the name of the current module. In the same timer event in your Overlay, you will have to check the current module name against the names of the modules you want it to light up on and set the appropriate light.
      I don't see this in the current API. Is there another method to get the current module name?
      Andy
      55 Buick Carputer - http://www.55buick.com/Carputer/carputer.htm

      Comment


      • #4
        I just verfied with 1.0.6.3. App.GetCurrentModuleName() is exposed and working.
        StreetDeck.com Developer (I am Chuck)
        Get StreetDeck at http://www.streetdeck.com
        The Official StreetDeck Forums have moved, please visit us at http://www.streetdeck.com/forum for official support for Streetdeck.

        Comment


        • #5
          You are so right! I have to say that the .Net Plugins/Addins are fantastic! My project is finally off the ground. I highly appreciate it.
          Andy
          55 Buick Carputer - http://www.55buick.com/Carputer/carputer.htm

          Comment


          • #6
            I thought it might benefit some people to see the plugin code to accomplish some cool things with this setup.

            Code:
            using System;
            using System.Collections.Generic;
            using System.Text;
            using System.Runtime.InteropServices;
            using System.Windows.Forms;
            using Phidgets;
            using Phidgets.Events;
            
            
            namespace BuickPhidget
            {
            
                [
                    GuidAttribute("69CECAE8-7125-4cf4-8726-AF40503CC406"),
                    ProgId("StreetDeck.BuickPhidget"),
                    ComVisible(true)
                ]
            
            
                public class Class1 : StreetDeck.IDualStreetDeckAddin
                {
            
                    const int headUnitId = 22284;
                    const int relayId = 29584;
                    const int numheadUnitOptions = 16;
                    const int refreshRate = 1000; // Clock time to check for updates. Time in mils
            
                    enum buttonPanelValues:int
                    {
                        Home = 0,
                        MP3 = 1,
                        GPS = 2,
                        XM = 3,
                        Engine = 4,
                        DVD = 5,
                        AMFM = 6,
                        Phone = 7
                    }
            
                    enum musicMode : int
                    {
                        nowPlaying = 0,
                        queue = 1,
                        albums = 2,
                        artist = 3,
                        musicHome = 4,
                        playlist = 5
                    }
            
                    musicMode currentMusicMode = musicMode.nowPlaying;
                    int numMusicModeOptions = 6;
                    
            
                    StreetDeck.StreetDeckApp app;
                    StreetDeck.ScriptOverlay overlay;
                    Timer Clock;
                    string lastModule = "";
                    string lastArtist = "";
                    string lastSong = "";
                    InterfaceKit ifkit1, headUnit;
                    InterfaceKit ifkit2, buttonPanel;
                    InterfaceKit ifkit3, relay;
                    Phidgets.Encoder enc;
                    TextLCD lcd;
                    int lastEncodedValue = 0;
                    int lcdMode = 0;
                    int insideTemperature = 0;
                    int fuelLevel = 0;
                    int dashboardDim = 0;
                    string currentHeadUnitMode = "";
            
            
                    //This OnConnection event is where we create all of the modules and overlay streetdeck needs
                    //This example creates one module and one overlay
                    void StreetDeck.IDualStreetDeckAddin.OnConnection(object o, StreetDeck.enumAddinConnectMode e)
                    {
                        //Save a pointer to the StreetDeck App object for future reference
                        app = (StreetDeck.StreetDeckApp)o;
            
            
            
                        //Create an overlay that will contain the other controls.  Overlays are global and will be shown
                        //above every other module
                        overlay = app.CreateOverlay("OverlayTest");
            
                        Clock = new Timer();
                        Clock.Interval = refreshRate;
                        Clock.Start();
                        Clock.Tick += new EventHandler(Timer_Tick);
            
                        // Get our first InterfaceKit going
                        ifkit1 = new InterfaceKit();
                        ifkit1.Attach += new AttachEventHandler(ifkit_Attach);
                        ifkit1.Detach += new DetachEventHandler(ifkit_Detach);
                        ifkit1.open();
            
                        // Get our second InterfaceKit going
                        ifkit2 = new InterfaceKit();
                        ifkit2.Attach += new AttachEventHandler(ifkit_Attach);
                        ifkit2.Detach += new DetachEventHandler(ifkit_Detach);
                        ifkit2.open();
            
                        // Get our third InterfaceKit going
                        ifkit3 = new InterfaceKit();
                        ifkit3.Attach += new AttachEventHandler(ifkit_Attach);
                        ifkit3.Detach += new DetachEventHandler(ifkit_Detach);
                        ifkit3.open();
                        
            
                        // Load the encoder
                        enc = new Phidgets.Encoder();
                        enc.Attach += new AttachEventHandler(enc_Attach);
                        enc.Detach += new DetachEventHandler(enc_Detach);
                        enc.InputChange += new InputChangeEventHandler(enc_InputChange);
                        enc.PositionChange += new EncoderPositionChangeEventHandler(enc_PositionChange);
                        enc.open();
            
                        // Load the LCD
                        lcd = new TextLCD();
                        lcd.Attach += new AttachEventHandler(lcd_Attach);
                        lcd.Detach += new DetachEventHandler(lcd_Detach);
                        lcd.open();
                        
            
                    }
            
                    void StreetDeck.IDualStreetDeckAddin.OnDisconnect()
                    {
                        //Unregister the events
                        ifkit1.close();
                        ifkit2.close();
                        //module.OnExec -= new StreetDeck.IModuleEvents_OnExecEventHandler(module_OnExec);
                    }
            
            
                    public void Timer_Tick(object sender, EventArgs eArgs)
                    {
            
                        try
                        {
                            if (sender == Clock && lcd.Attached)
                            {
                                // See if the module has changed
                                string currentModule = app.GetCurrentModuleName();
                                if (currentModule != lastModule)
                                {
                                    lastModule = currentModule;
                                    //lcd.rows[0].DisplayString = currentModule;
                                    // The module has changed... We need to change the
                                    // status lights on the button pannel.
                                    string shorModuleName = currentModule.Substring(0,3);
            
                                    if (shorModuleName == "CMu")
                                        moduleChange(buttonPanelValues.MP3);
                                    else
                                    if (shorModuleName == "CNa")
                                        moduleChange(buttonPanelValues.GPS);
                                    else
                                    if (shorModuleName == "CXM")
                                        moduleChange(buttonPanelValues.XM);
                                    else
                                    if (shorModuleName == "CVe")
                                        moduleChange(buttonPanelValues.Engine);
                                    else
                                    if (shorModuleName == "CDV")
                                        moduleChange(buttonPanelValues.DVD);
                                    else
                                    if (shorModuleName == "CRa")
                                        moduleChange(buttonPanelValues.AMFM);
                                    else
                                    if (shorModuleName == "CBl")
                                        moduleChange(buttonPanelValues.Phone);
                                }
                                updateDisplay();
            
                            }
                        } catch  {} // If the phidget is not attached we don't want errors
                    }
            
            
                    void updateDisplay()
                    {
                        switch (lcdMode)
                        {
                            case 0: // Music
                                currentHeadUnitMode ="Now Playing";
            
                                string currentArtist = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTMediaArtist);
                                if (currentArtist != lastArtist)
                                {
                                    lastArtist = currentArtist;
                                    lcd.rows[0].DisplayString = currentArtist;
                                }
            
                                string currentSong = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTMediaTitle);
                                if (currentSong != lastSong)
                                {
                                    lastSong = currentSong;
                                    lcd.rows[1].DisplayString = currentSong;
                                }
             
                                break;
                            case 1: // Time Left
                                currentHeadUnitMode = "Media Time Left";
                                lcd.rows[0].DisplayString = "Media Time Left";
                                lcd.rows[1].DisplayString = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTMediaTimeLeft);
                                break;
                            case 2: // media Type
                                currentHeadUnitMode ="Media Type";
                                lcd.rows[0].DisplayString = "Media Type";
                                lcd.rows[1].DisplayString = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTMediaType);
                                break;
                            case 3: // Distance
                                currentHeadUnitMode = "Distance to Destination";
                                lcd.rows[0].DisplayString = "Distance to Destination";
                                lcd.rows[1].DisplayString = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTNAVDistanceToDest);
                                break;
                            case 4: // direction
                                currentHeadUnitMode = "Heading";
                                lcd.rows[0].DisplayString = "Heading";
                                lcd.rows[1].DisplayString = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTNAVHeading);
                                break;
                            case 5: // Navigation Turn
                                currentHeadUnitMode = "Next Turn";
                                lcd.rows[0].DisplayString = "Next Turn";
                                lcd.rows[1].DisplayString = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTNAVNextStreet);
                                break;
                            case 6: // Speed
                                currentHeadUnitMode = "Speed";
                                lcd.rows[0].DisplayString = "Speed";
                                lcd.rows[1].DisplayString = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTNAVSpeed);
                                break;
            
                            case 7: // Temperatrue
                                lcd.rows[0].DisplayString = "Temperature";
                                currentHeadUnitMode = "Temperature";
                                lcd.rows[1].DisplayString = Convert.ToString(insideTemperature)+"F";
                                //app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTHWStatusTemperature);
                                break;
                            case 8: // City State Location
                                lcd.rows[0].DisplayString = "Location";
                                currentHeadUnitMode = "Location";
                                lcd.rows[1].DisplayString = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTNAVCityStateZip);
                                break;
                            case 9: // Current Module
                                currentHeadUnitMode = "Module";
                                lcd.rows[0].DisplayString = "Module";
                                lcd.rows[1].DisplayString = app.GetCurrentModuleName();
                                break;
                            case 10: // Time Left
                                currentHeadUnitMode = "Media Duration";
                                lcd.rows[0].DisplayString = "Media Duration";
                                lcd.rows[1].DisplayString = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTMediaDuration);
                                break;
                            case 11: // Time                    
                                currentHeadUnitMode = "Current Heading";
                                lcd.rows[0].DisplayString = "Heading";
                                lcd.rows[1].DisplayString = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTTime);
                                break;
                            case 12: // Time
                                currentHeadUnitMode = "Time to Destination";
                                lcd.rows[0].DisplayString = "Time to Destination";
                                lcd.rows[1].DisplayString = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTNAVTimeToDest);
                                break;
                            case 13: // Logo
                                currentHeadUnitMode = "Nineteen fifty-five Buick special";
                                lcd.rows[0].DisplayString = "    1955";
                                lcd.rows[1].DisplayString = "    BUICK SPECIAL";
                                break;
                            case 14: // Fuel
                                currentHeadUnitMode = "Fuel Level";
                                lcd.rows[0].DisplayString = "Fuel";
                                lcd.rows[1].DisplayString = Convert.ToString(fuelLevel); // Read from Voltage sensor.
                                break;
                            default:
                                lcdMode = 0;
                                break;
                        }
                    }
            
                    void buttonPanel_InputChange(object sender, InputChangeEventArgs e)
                    {
                        if (e.Value)    // We don't want to run this on up and down push of hte button
                        {
                            switch ((buttonPanelValues)e.Index)
                            {
                                case buttonPanelValues.Home:
                                    //inputCheckBox0.Checked = e.Value
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionHome);
                                    lcd.rows[0].DisplayString = "Home";
                                    break;
                                case buttonPanelValues.MP3:
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionMusic);
                                    lcd.rows[0].DisplayString = "MP3";
                                    currentMusicMode = (musicMode)((int)((int)currentMusicMode + 1) % numMusicModeOptions);
                                    switch (currentMusicMode)
                                    {
                                        case musicMode.nowPlaying:
                                            overlay.Exec("CMusicNowPlayingModule");
                                            break;
                                        case musicMode.queue:
                                            overlay.Exec("CMusicNowPlayingModule");
                                            break;
                                        case musicMode.albums:
                                            overlay.Exec("CMusicAlbumStringColModule");
                                            break;
                                        case musicMode.artist:
                                            overlay.Exec("CMusicArtistStringColModule");
                                            break;
                                        case musicMode.musicHome:
                                            overlay.Exec("CMusicModule");
                                            break;
                                        case musicMode.playlist:
                                            overlay.Exec("CMusicPlaylistModule");
                                            break;
                                        default:
                                            break;
                                    }
                                    break;
                                case buttonPanelValues.GPS:
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionNavigation);
                                    lcd.rows[0].DisplayString = "GPS";
                                    break;
                                case buttonPanelValues.XM:
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionXMRadio);
                                    lcd.rows[0].DisplayString = "XM";
                                    break;
                                case buttonPanelValues.Engine:
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionVehicle);
                                    overlay.Exec("CVehicleGraphOBDIIModule");
                                    lcd.rows[0].DisplayString = "Engine";
                                    buttonPanel.outputs[(int)buttonPanelValues.Engine] = true;
                                    break;
                                case buttonPanelValues.DVD:
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionDVD);
                                    lcd.rows[0].DisplayString = "DVD";
                                    break;
                                case buttonPanelValues.AMFM:
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionRadio);
                                    lcd.rows[0].DisplayString = "AM/FM";
                                    break;
                                case buttonPanelValues.Phone:
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionBluetoothModule);
                                    lcd.rows[0].DisplayString = "Phone";
                                    break;
                                default:
                                    break;
                            }
                            moduleChange((buttonPanelValues)e.Index);
                        }
                    }
            
                    void moduleChange(buttonPanelValues v)
                    {
                        // first turn everything off
                        for (int i = 0; i < 8; i++)
                            buttonPanel.outputs[i] = false;
            
                        // Now, turn on the specific value
                        buttonPanel.outputs[(int)v] = true;
            
                        // Then, light up the music/satalite/DVD button if they are playing
                        string mediaType = app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTMediaType);
                        if (mediaType == "Music")
                            buttonPanel.outputs[(int)buttonPanelValues.MP3] = true;
            
                        if (mediaType == "Satelite")
                            buttonPanel.outputs[(int)buttonPanelValues.XM] = true;
            
                        if (mediaType == "DVD")
                            buttonPanel.outputs[(int)buttonPanelValues.DVD] = true;
            
                        lastModule = app.GetCurrentModuleName(); // so we won't detect amodule change.
            
                        // make sure the radio anteana is up if we are in radio mode
                        if (v == buttonPanelValues.AMFM)
                            relay.outputs[0] = true;
                        else
                            relay.outputs[0] = false;
            
            
                    }
            
                    // There are currently no sensors on this interface kit.
                    void buttonPanel_SensorChange(object sender, SensorChangeEventArgs e)
                    {
                    }
            
                    void headUnit_InputChange(object sender, InputChangeEventArgs e)
                    {
                        if (e.Value)    // We don't want to run this on up and down push of the button
                        {
                            switch (e.Index)
                            {
                                case 0:
                                    //Togle display mode
                                    lcdMode = (lcdMode + 1) % numheadUnitOptions;
                                   // lcd.rows[0].DisplayString = "LcdMode " + Convert.ToString(lcdMode);
                                    lastArtist = ""; // force redisplay of current artist
                                    lastSong = "";
                                    updateDisplay();
                                    app.SpeechController.Speak(currentHeadUnitMode);
                                    break;
                                case 1:
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionTogglePause);
                                    app.SpeechController.Speak(app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTMediaState));
            
                                    break;
                                case 3:
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionNext);
                                    app.SpeechController.Speak("Next");
                                    break;
                                case 2:
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionPrevious);
                                    app.SpeechController.Speak("Previous");
                                    break;
                                case 4:
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionFF);
                                    app.SpeechController.Speak(app.GetDynamicStringValue(StreetDeck.enumDynamicLabelType.eDLTMediaState));
                                    break;
                                default:
                                    break;
                            }
            
                        }
                    }
            
                    void headUnit_SensorChange(object sender, SensorChangeEventArgs e)
                    {
                        switch (e.Index)
                        {
                            case 0:
                                //Volume Knob
                                uint vol = (uint)(1000 - e.Value) / 10;
                                app.SetVolume(StreetDeck.enumVolumeTypes.eVTMaster, vol);
                                break;
                            case 1:
                                // Inner Tone knob
                                if (e.Value < 500)
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionSetNightMode);
                                else
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionSetDayMode);
                                break;
                            case 2: // Temperature
                                insideTemperature = (9 / 5) * ((e.Value - 200) / 4) + 32;
            
                                break;
                            case 3:
                                //Fuel Sensor
                                fuelLevel = (e.Value - 553) / (739-553) * 100; //739 ;
                                //app.SetVolume(StreetDeck.enumVolumeTypes.eVTMaster, vol);
                                break;
                            case 7:
                                // Dashboard light dimmer
                                dashboardDim = (e.Value - 553) / (739 - 553) * 100;
                                break;
                            default:
                                break;
                        }
                    }
            
                    void ifkit_Detach(object sender, DetachEventArgs e)
                    {
                    }
            
                    private void ifkit_Attach(object sender, AttachEventArgs e)
                    {
                        InterfaceKit phid = (InterfaceKit)sender;
                        switch (phid.SerialNumber)
                        {
                            case headUnitId:             // Head Unit
                                phid.SensorChange += new SensorChangeEventHandler(headUnit_SensorChange);
                                phid.InputChange += new InputChangeEventHandler(headUnit_InputChange);
                                headUnit = phid;
                                break;
            
                            case relayId:   // The relay
                                relay = phid;
                                break;
            
                            default: // The button pannel
                                phid.SensorChange += new SensorChangeEventHandler(buttonPanel_SensorChange);
                                phid.InputChange += new InputChangeEventHandler(buttonPanel_InputChange);
                                buttonPanel = phid;
            
                                // Turn everything on to show that we are working
                                for (int i = 0; i < 8; i++)
                                    buttonPanel.outputs[i] = true;
                                break;
            
                        }
            
                    }
            
                    // If you rotate the encoder, then do function up or down.
                    void enc_PositionChange(object sender, EncoderPositionChangeEventArgs e)
                    {
                        
                        switch (e.Index)
                        {
                            case 0:
                                if (enc.encoders[0] > lastEncodedValue)
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionUp);
                                else
                                    app.SendFunction(StreetDeck.enumSDFunctions.eFunctionDown);
                                lastEncodedValue = enc.encoders[0];
                                break;
                            default:
                                break;
                        }
                    }
            
                    // If you press the encoder in, then emit "OK".
                    void enc_InputChange(object sender, InputChangeEventArgs e)
                    {
                        switch (e.Index)
                        {
                            case 0:
                                app.SendFunction(StreetDeck.enumSDFunctions.eFunctionOk);
                                break;
                            default:
                                break;
                        }
                    }
            
                    void enc_Detach(object sender, DetachEventArgs e)
                    {
                        
                    }
            
                    void enc_Attach(object sender, AttachEventArgs e)
                    {
                        Phidgets.Encoder phid = (Phidgets.Encoder)sender;
            
                    }
            
                    void lcd_Detach(object sender, DetachEventArgs e)
                    {
                      
                    }
            
                    void lcd_Attach(object sender, AttachEventArgs e)
                    {
                        Phidgets.TextLCD phid = (Phidgets.TextLCD)sender;
                        lcd.rows[0].DisplayString = "  1955";
                        lcd.rows[1].DisplayString = "  BUICK";
                    }
            
                }
            
            
            }
            As always with software, this is version 0.1. I still have to add support for my HQCT-eA. That should be fun!
            Andy
            55 Buick Carputer - http://www.55buick.com/Carputer/carputer.htm

            Comment


            • #7
              Nice...ever since I put an infill t3 in my dash I lost most of the functions of the stock lcd display(06 eclipse). I was planning on getting the phigidts lcd display (http://www.phidgets.com/index.php?mo...emview&IID=116), but knew I had some work to with coding. You are gonna save a lot of people some work!!!

              Got any pics/vids of the everything in action?
              Mitsubishi Eclipse 2006 GT
              Infill T3 running StreetDeck

              Comment


              • #8
                There is nothing like pushing a button. Touch screens are cool, but I'm old fashioned as far as needing to push buttons! The Phidget LCD is still sitting in the front seat waiting for me to have time to tear my dash apart and put it in (about 4 hours) and then put it back together (another 4 hours).

                Here is a blurry photo from today:



                I need to quit drinking so much coffee!
                Andy
                55 Buick Carputer - http://www.55buick.com/Carputer/carputer.htm

                Comment


                • #9
                  Better photo.
                  Andy
                  55 Buick Carputer - http://www.55buick.com/Carputer/carputer.htm

                  Comment


                  • #10
                    Ok, I have a video of the complete system.

                    http://www.youtube.com/watch?v=9Idu9XyAnmQ
                    Andy
                    55 Buick Carputer - http://www.55buick.com/Carputer/carputer.htm

                    Comment

                    Working...
                    X