Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- DIY Shifter
- Runs on a Teensy 2.0
- Wes Jurica - 2013
- */
- #include <Bounce.h>
- #include <EEPROM.h>
- #include "MorseEnDecoder.h"
- // Gear microswitches are connected to the following pins:
- #define gearR 0
- #define neutral 1
- #define gear1 2
- #define gear2 3
- #define gear3 4
- #define gear4 5
- #define gear5 6
- #define gear6 9
- #define gear7 8
- int gearPins[8] = {gearR, gear1, gear2, gear3, gear4, gear5, gear6, gear7};
- int currentGear = 1;
- int selectedGear = 1;
- int gearChangeDifference = 0;
- int modeLed = 11;
- int modeButtonPin = 10;
- Bounce modeButton = Bounce(modeButtonPin, 35);
- int resetToNeutralPin = 12;
- Bounce resetToNeutralButton = Bounce(resetToNeutralPin, 35);
- boolean isSequentialMode = false;
- int sequentialShiftDelay = 45;
- morseEncoder morseOutput(modeLed);
- int morseIndex = 0;
- String had = "http://hackaday.com";
- String secret = "1n3n3n7";
- boolean isSecretUnlocked = false;
- String recentShifts[7] = {"#", "#", "#", "#", "#", "#", "#"};
- int recentShiftIndex = 0;
- void setup()
- {
- pinMode(gear1, INPUT_PULLUP);
- pinMode(gear2, INPUT_PULLUP);
- pinMode(gear3, INPUT_PULLUP);
- pinMode(gear4, INPUT_PULLUP);
- pinMode(gear5, INPUT_PULLUP);
- pinMode(gear6, INPUT_PULLUP);
- pinMode(gear7, INPUT_PULLUP);
- pinMode(gearR, INPUT_PULLUP);
- pinMode(modeButtonPin, INPUT_PULLUP);
- pinMode(modeLed, OUTPUT);
- pinMode(resetToNeutralPin, INPUT_PULLUP);
- delay(3000);
- isSequentialMode = EEPROM.read(0);
- digitalWrite(modeLed, isSequentialMode);
- morseOutput.setspeed(26);
- }
- void loop()
- {
- morse();
- modeButtonPress();
- resetToNeutralButtonPress();
- getSelectedGear();
- checkForNewGear();
- delay(25); // replace with gear shift timer for no blocking
- }
- void message(String nextGear)
- {
- if (recentShiftIndex < 6)
- {
- recentShifts[recentShiftIndex] = nextGear;
- recentShiftIndex++;
- }
- else
- {
- String recentShiftsString = "";
- recentShifts[6] = nextGear;
- for (int i = 0; i < 6; i++)
- {
- recentShiftsString += recentShifts[i];
- recentShifts[i] = recentShifts[i + 1];
- }
- recentShiftsString += nextGear;
- if (recentShiftsString.equals(secret))
- {
- isSecretUnlocked = true;
- Keyboard.set_modifier(MODIFIERKEY_GUI);
- Keyboard.set_key1(KEY_S);
- Keyboard.send_now();
- delay(15);
- Keyboard.set_modifier(0);
- Keyboard.set_key1(0);
- Keyboard.send_now();
- delay(15);
- Keyboard.println("internet explorer");
- delay(2000);
- Keyboard.set_modifier(MODIFIERKEY_ALT);
- Keyboard.set_key1(KEY_D);
- Keyboard.send_now();
- delay(15);
- }
- }
- }
- void morse()
- {
- if (isSecretUnlocked)
- {
- morseOutput.encode();
- if(morseOutput.available())
- {
- morseOutput.write(had.charAt(morseIndex));
- morseOutput.encode();
- Keyboard.print(had.charAt(morseIndex));
- morseIndex++;
- }
- if (morseIndex > had.length() - 1)
- {
- morseIndex = 0;
- isSecretUnlocked = false;
- digitalWrite(modeLed, isSequentialMode);
- Keyboard.println("");
- }
- }
- }
- void resetToNeutralButtonPress()
- {
- if (resetToNeutralButton.update())
- {
- if (resetToNeutralButton.fallingEdge())
- {
- if (isSequentialMode)
- {
- for (int i = 0; i < 10; i++)
- {
- Keyboard.print("z");
- delay(sequentialShiftDelay);
- }
- Keyboard.print("a");
- delay(sequentialShiftDelay);
- }
- else
- {
- Keyboard.print("n");
- }
- for (int i = 0; i < 5; i++)
- {
- digitalWrite(modeLed, HIGH);
- delay(200);
- digitalWrite(modeLed, LOW);
- delay(200);
- }
- digitalWrite(modeLed, isSequentialMode);
- }
- }
- }
- void modeButtonPress()
- {
- if (modeButton.update())
- {
- if (modeButton.fallingEdge())
- {
- if (isSequentialMode)
- {
- isSequentialMode = false;
- digitalWrite(modeLed, isSequentialMode);
- EEPROM.write(0, isSequentialMode);
- }
- else
- {
- isSequentialMode = true;
- digitalWrite(modeLed, isSequentialMode);
- EEPROM.write(0, isSequentialMode);
- }
- }
- }
- }
- void pressGearKeys()
- {
- if (isSequentialMode)
- {
- for (int i = 0; i < abs(gearChangeDifference); i++)
- {
- if (gearChangeDifference > 0)
- {
- Keyboard.print("a");
- }
- else if (gearChangeDifference < 0)
- {
- Keyboard.print("z");
- }
- delay(sequentialShiftDelay);
- }
- }
- else
- {
- String gearToPrint;
- switch(selectedGear)
- {
- case gearR:
- gearToPrint = "R";//q");
- break;
- case neutral:
- gearToPrint = "n";//w");
- break;
- case gear1:
- gearToPrint = "1";//e");
- break;
- case gear2:
- gearToPrint = "2";//r");
- break;
- case gear3:
- gearToPrint = "3";//t");
- break;
- case gear4:
- gearToPrint = "4";//y");
- break;
- case gear5:
- gearToPrint = "5";//u");
- break;
- case gear6:
- gearToPrint = "6";//i");
- break;
- case gear7:
- gearToPrint = "7";//o");
- break;
- }
- Keyboard.print(gearToPrint);
- message(gearToPrint);
- }
- digitalWrite(modeLed, isSequentialMode);
- currentGear = selectedGear;
- }
- void getSelectedGear()
- {
- for (int i = 0; i < sizeof(gearPins)/sizeof(int); i++)
- {
- if (digitalRead(gearPins[i]) == 0)
- {
- selectedGear = gearPins[i];
- return;
- }
- }
- selectedGear = neutral;
- }
- void checkForNewGear()
- {
- if (currentGear == selectedGear)
- {
- gearChangeDifference = 0;
- }
- else
- {
- gearChangeDifference = selectedGear - currentGear;
- pressGearKeys();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement