Results 1 to 10 of 10

Thread: StreetDeck for a 1955 Buick

  1. #1
    Low Bitrate aforget's Avatar
    Join Date
    Nov 2003
    Location
    Santa Cruz, CA, USA
    Posts
    65

    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. #2
    Raw Wave god_of_cpu's Avatar
    Join Date
    Jan 2004
    Location
    SilverSpring Maryland
    Posts
    2,960
    Quote 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.


    Quote 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.

    Quote 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


    Quote 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.

    Quote 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.

    Quote 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:
    StreetDeck Input Plugins (Remotes, Steering Wheel Controls, etc.)




    Quote 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.

  3. #3
    Low Bitrate aforget's Avatar
    Join Date
    Nov 2003
    Location
    Santa Cruz, CA, USA
    Posts
    65
    Quote 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

  4. #4
    Raw Wave god_of_cpu's Avatar
    Join Date
    Jan 2004
    Location
    SilverSpring Maryland
    Posts
    2,960
    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.

  5. #5
    Low Bitrate aforget's Avatar
    Join Date
    Nov 2003
    Location
    Santa Cruz, CA, USA
    Posts
    65
    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

  6. #6
    Low Bitrate aforget's Avatar
    Join Date
    Nov 2003
    Location
    Santa Cruz, CA, USA
    Posts
    65
    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

  7. #7
    Constant Bitrate sharpmat007's Avatar
    Join Date
    Nov 2006
    Location
    Washington, DC
    Posts
    211
    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

  8. #8
    Low Bitrate aforget's Avatar
    Join Date
    Nov 2003
    Location
    Santa Cruz, CA, USA
    Posts
    65
    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

  9. #9
    Low Bitrate aforget's Avatar
    Join Date
    Nov 2003
    Location
    Santa Cruz, CA, USA
    Posts
    65
    Better photo.
    Andy
    55 Buick Carputer - http://www.55buick.com/Carputer/carputer.htm

  10. #10
    Low Bitrate aforget's Avatar
    Join Date
    Nov 2003
    Location
    Santa Cruz, CA, USA
    Posts
    65
    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

Similar Threads

  1. Replies: 15
    Last Post: 08-21-2007, 03:46 PM
  2. Streetdeck Now Available for Purchase
    By god_of_cpu in forum StreetDeck
    Replies: 46
    Last Post: 01-02-2007, 10:58 AM
  3. StreetDeck Fonts
    By god_of_cpu in forum DigitalMods (Scripts / API)
    Replies: 1
    Last Post: 02-16-2006, 05:21 PM
  4. StreetDeck File Extentions (.sdu and .sdz)
    By god_of_cpu in forum StreetDeck F.A.Q.
    Replies: 0
    Last Post: 01-22-2006, 10:26 PM
  5. StreetDeck in Blogs
    By Fiberoptic in forum StreetDeck
    Replies: 2
    Last Post: 01-16-2006, 09:57 AM

Bookmarks

Posting Permissions

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