Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Tone.h>
- #include <Keypad.h>
- /*
- Blizzard Box v.02
- (c) GNU 2014
- Designed by Douglas Berdeaux
- WeakNetLabs@Gmail.com
- */
- // array of tone output pins:
- int bbt1[12] = {1300,700,700,900,700,900,1100,700,900,1100,1100,1500}; // blue box tone 1
- int bbt2[12] = {1500,900,1100,1100,1300,1300,1300,1500,1500,1500,1700,1700}; // bluebox tone 2
- int rbt[2] = {1700,2200}; // 66 ms on/off
- int delayBbMsLong = 100; // 100 ms
- int delayBbMsShort = 70; // shorter
- int delayRbMsQ = 33; // 33 ms for $0.25 ACTS
- int delayRbMsO = 66; // Other (dime/nickel)
- const byte rows = 4; //four rows
- const byte cols = 4; //three columns
- boolean recording = 0; // are we recording?
- boolean recorded = 0; // we have a stored number
- char recTones[20] = {'x','x','x','x','x','x','x','x','x','x',
- 'x','x','x','x','x','x','x','x','x','x'}; // don't dial x digits.
- char keys[rows][cols] = { // matrix layout used by the Keypad library
- {'1','2','3','a'},
- {'4','5','6','b'},
- {'7','8','9','c'},
- {'#','0','*','d'}
- };
- char heldButton; // which button was held.
- byte rowPins[rows] = {5,4,3,2}; //connect to the row pinouts of the keypad
- byte colPins[cols] = {9,8,7,6}; //connect to the column pinouts of the keypad
- // global objects
- Tone freq[2];
- Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, rows, cols );
- void setup(void){
- // Serial.begin(9600); // Debugging Serial connection for printing to screen
- freq[0].begin(11); // Initialize our first tone generator
- freq[1].begin(12); // Initialize our second tone generator
- keypad.setHoldTime(2000); // hold for two seconds to change state to HOLD
- pinMode(10, INPUT);
- }
- void loop(){
- int buttonState = digitalRead(10);
- if(buttonState == HIGH){
- playTone(2600,1000);
- }
- char button = keypad.getKey();
- if(keypad.getState() == HOLD){
- int intB = heldButton - 48; // get Blue Box element index
- if(intB==52){ // long press D
- if(recording){
- playTone(2200,66);
- playTone(1500,500);
- recording=0; // stop recording
- }else{
- playTone(1500,66);
- playTone(2200,500);
- recording=1; // save the digit pressed
- for(int i=0;i<=19;i++){ // reset array
- recTones[i] = 'x';
- }
- }
- }
- }
- if (button){
- int intB = button - 48; // get Blue Box element index
- heldButton = button; // store this for later (hack)
- if((intB<10&&intB>-1)||(intB>48&&intB<52)||intB==-13||intB==-6){ // 0-9,A-C
- playTone(intB,delayBbMsLong); // play it
- if(((intB<10&&intB>-1)||(intB==-13||intB==-6))&&recording){
- for(int i=0;i<=19;i++){ // record it into array
- if(recTones[i]=='x'){ // overwriet the first found 'x' char
- recTones[i]=button; // store integer values to pass to playTone();
- break; // leave the rest of the 'x's alone.
- }
- }
- }
- }else if(intB==52){
- for(int i=0;i<=19;i++){
- if(recTones[i] == 'x'){
- break;
- }else{
- playTone((recTones[i] - 48),70);
- }
- }
- }
- }
- }
- void playTone(int freqElement,int delayMs){ // pass frequency element from array
- if(freqElement==-13){ freqElement=10; } // KP
- if(freqElement==-6){ freqElement=11; } // ST
- if(freqElement>-1&&freqElement<13){
- freq[0].play(bbt1[freqElement]);
- freq[1].play(bbt2[freqElement]);
- delay(delayMs); // play tone for delay milliseconds.
- stopTone(); // stop the tone
- if(heldButton == 'd'){ delay(delayMs); } // need to delay between playing too.
- }else if(freqElement > 48 && freqElement < 52){ // 49,50,51 = A,B,C
- switch(freqElement){ // These are for Red box tones
- case (49):
- redBox(4,delayRbMsQ);
- break;
- case (50):
- redBox(1,delayRbMsO);
- break;
- case (51):
- redBox(0,delayRbMsO);
- break;
- }
- }
- else if(freqElement>100){
- // a specific frequency
- freq[0].play(freqElement);
- digitalWrite(12,HIGH); // needed voltage on pin or volume lowers!
- delay(delayMs);
- freq[0].stop(); // done
- }else{
- // THAIR SHOUL BE NO ELSE!!
- }
- }
- void redBox(int iterations,int delayMs){ // play tones
- for(int i=0;i<=iterations;i++){
- freq[0].play(rbt[0]);
- freq[1].play(rbt[1]);
- delay(delayMs);
- stopTone();
- delay(delayMs);
- }
- }
- void stopTone(){ // stop them if they are playing
- if(freq[0].isPlaying()){
- freq[0].stop();
- }
- if(freq[1].isPlaying()){
- freq[1].stop();
- }
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement