Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // TRANSMITTER LOGIC FOR MAX2606 TRANSMITTER
- // UPLOAD USING ATtiny85, 8MHz Internal NO BOD Core!!!!
- // -------------------CREDITS-----------------------------------
- // Morse Code Converter By http://forum.singul4rity.com/thread-317.html
- // -------------------------------------------------------------
- #include<pitches.h>
- int TXLed = 0; //Define Led TX Indicator Pin
- int tonePin = 1; //Define Audio Pin
- int PTT = 4; //Define PTT Pin
- int toneFreq = 800; //Define Morse Tone Frequency in Hz
- //1200000 = 15 MIN DELAY
- unsigned long pauseTime = 900000; //Define Program Repeat Time Delay - 60000 = 1 Minute - multiply by 60 to get 1 Hour
- //Enter Morse String to be Sent MUST PUT DASHES BETWEEN LETTERS TO GET CHARACTER BREAK AND SPACES BETWEEN WORDS!!
- String morseInput = "F-O-X-H-U-N-T T-E-S-T";
- void setup(){
- pinMode(tonePin,OUTPUT); //AUDIO
- pinMode(TXLed,OUTPUT); //INDICATOR LED
- pinMode(PTT,OUTPUT); //PTT
- }
- void loop(){
- //BUILD LOGIC
- delay(1000); //Wait before doing anything
- digitalWrite(TXLed,HIGH); //Enable TX Led
- digitalWrite(PTT,HIGH); //Enable PTT
- delay(1000); //Wait for Radio to TX
- SendMorse(); //Send Morse String
- int i;
- for(i=0;i<1;i++)
- {
- delay(1000); //Wait a sec before playing melody(s)
- MelodyOne(); //Play Melody #1
- delay(1000); //Wait between melodies
- MelodyTwo(); //Play Melody #2
- //delay(1000); //Wait between melodies
- //MelodyThree(); //Play Melody #3
- }
- delay(1000); //Wait
- SendMorse(); //Send Final Morse String
- delay(500); //Wait
- digitalWrite(PTT,LOW); //Disable PTT
- digitalWrite(TXLed,LOW); //Disable TX Led
- delay(pauseTime); //Wait to start over - putting the final delay here allows the program to run at least once at power up. Shows logic is working.
- }
- //Encode Morse String Function
- void SendMorse(){
- for(int i = 0;i<morseInput.length();i++){
- switch (morseInput[i]){
- case '0': lang(5); break;
- case '1': kurz(1);lang(4); break;
- case '2': kurz(2);lang(3); break;
- case '3': kurz(3);lang(2); break;
- case '4': kurz(4);lang(1); break;
- case '5': kurz(5); break;
- case '6': lang(1);kurz(4); break;
- case '7': lang(2);kurz(3); break;
- case '8': lang(3);kurz(2); break;
- case '9': lang(4);kurz(1); break;
- case 'a': case 'A': kurz(1);lang(1); break;
- case 'b': case 'B': lang(1);kurz(3); break;
- case 'c': case 'C': lang(1);kurz(1);lang(1);kurz(1); break;
- case 'd': case 'D': lang(1);kurz(2); break;
- case 'e': case 'E': kurz(1); break;
- case 'f': case 'F': kurz(2);lang(1);kurz(1); break;
- case 'g': case 'G': lang(2);kurz(1); break;
- case 'h': case 'H': kurz(4); break;
- case 'i': case 'I': kurz(2); break;
- case 'j': case 'J': kurz(1);lang(3); break;
- case 'k': case 'K': lang(1);kurz(1);lang(1); break;
- case 'l': case 'L': kurz(1);lang(1);kurz(2); break;
- case 'm': case 'M': lang(2); break;
- case 'n': case 'N': lang(1);kurz(1); break;
- case 'o': case 'O': lang(3); break;
- case 'p': case 'P': kurz(1);lang(2);kurz(1); break;
- case 'q': case 'Q': lang(2);kurz(1);lang(1); break;
- case 'r': case 'R': lang(1);kurz(1);lang(1); break;
- case 's': case 'S': kurz(3); break;
- case 't': case 'T': lang(1); break;
- case 'u': case 'U': kurz(2);lang(1); break;
- case 'v': case 'V': kurz(3);lang(1); break;
- case 'w': case 'W': kurz(1);lang(2); break;
- case 'x': case 'X': lang(1);kurz(2);lang(1); break;
- case 'y': case 'Y': lang(1);kurz(1);lang(2); break;
- case 'z': case 'Z': lang(2);kurz(2); break;
- case ' ': wordBreak(); break;
- case '.': kurz(1);lang(1);kurz(1);lang(1);kurz(1);lang(1); break;
- case '-': CharBreak(); break;
- default: continue;
- }
- }
- }//End SendMorse Function
- //DAH Function
- void lang(int loops){
- for(int i = 0;i < loops; i++){
- tone(tonePin,toneFreq);
- delay(385);
- noTone(tonePin);
- delay(90);
- }
- }
- //DIT Function
- void kurz(int loops){
- for(int i = 0; i<loops; i++){
- tone(tonePin,toneFreq);
- delay(125);
- noTone(tonePin);
- delay(100);
- }
- }
- //WordBreak Function
- void wordBreak(){
- noTone(tonePin);
- delay(850);
- }
- //CharBreak Function
- void CharBreak(){
- noTone(tonePin);
- delay(165);
- }
- //Melody One Function - Twinkle
- void MelodyOne(){
- //Number of notes in the melody:
- int numberOfNotes = 14;
- int melody[] = {NOTE_C4, NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4};
- // note durations: 4 = quarter note, 8 = eighth note, etc.:
- int noteDurations[] = {
- 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
- // iterate over the notes of the melody:
- for (int thisNote = 0; thisNote < numberOfNotes; thisNote++) {
- // to calculate the note duration, take one second
- // divided by the note type.
- //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
- int noteDuration = 1000/noteDurations[thisNote];
- tone(tonePin, melody[thisNote],noteDuration);
- // to distinguish the notes, set a minimum time between them.
- // the note's duration + 30% seems to work well:
- int pauseBetweenNotes = noteDuration * 1.30;
- delay(pauseBetweenNotes);
- // stop the tone playing:
- noTone(tonePin);
- }
- }
- //Melody Two Function - Zelda
- void MelodyTwo(){
- //Number of notes in the melody:
- int numberOfNotes = 32;
- int melody[] = { //Define the melody as being the notes following using those defined in pitches.h
- NOTE_E4, NOTE_G4, NOTE_D4, NOTE_C4, NOTE_D4,
- NOTE_E4, NOTE_G4, NOTE_D4, 0, NOTE_E4,
- NOTE_G4, NOTE_D5, NOTE_C5, NOTE_G4, NOTE_F4,
- NOTE_E4, NOTE_D4, 0, NOTE_E4, NOTE_G4,
- NOTE_D4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_G4,
- NOTE_D4, 0, NOTE_E4, NOTE_G4, NOTE_D5,
- NOTE_C5, NOTE_G4};
- int noteDurations[] = { //Define the note durations, 1 to 1 with melody 1 = 8 beats
- 2,4,2,8,8, // 2 = 4 beats (whole note)
- 2,4,2,4,2, // 4 = 2 beats (half note)
- 4,2,4,2,8, // 8 = 1 beats (quarter note)
- 8,2,4,2,4,
- 2,8,8,2,4,
- 2,4,2,4,2,
- 4,1 };
- // iterate over the notes of the melody:
- for (int thisNote = 0; thisNote < numberOfNotes; thisNote++) {
- // to calculate the note duration, take one second
- // divided by the note type.
- //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
- int noteDuration = 1000/noteDurations[thisNote];
- tone(tonePin, melody[thisNote],noteDuration);
- // to distinguish the notes, set a minimum time between them.
- // the note's duration + 30% seems to work well:
- int pauseBetweenNotes = noteDuration * 1.30;
- delay(pauseBetweenNotes);
- // stop the tone playing:
- noTone(tonePin);
- }
- }
- //Melody Three Function - Lullaby
- void MelodyThree(){
- //Number of notes in the melody:
- int numberOfNotes = 27;
- int melody[] = {
- NOTE_G6, NOTE_G6, NOTE_AS6, NOTE_G6, NOTE_G6,
- NOTE_AS6, NOTE_G6, NOTE_AS6, NOTE_DS7, NOTE_D7,
- NOTE_C7, NOTE_C7, NOTE_AS6, NOTE_F6, NOTE_G6,
- NOTE_GS6, NOTE_F6, NOTE_F6, NOTE_G6, NOTE_GS6,
- NOTE_F6, NOTE_GS6, NOTE_D7, NOTE_C7, NOTE_AS6,
- NOTE_D7, NOTE_DS7};
- int noteDurations[] = {
- 6,8,2.5,8,
- 4,2,6,10,
- 4,3,8,4,
- 4,6,8,4,
- 4,6,8,2.5,
- 6,8,8,8,
- 4,4,2};
- // iterate over the notes of the melody:
- for (int thisNote = 0; thisNote < numberOfNotes; thisNote++) {
- // to calculate the note duration, take one second
- // divided by the note type.
- //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
- int noteDuration = 1000/noteDurations[thisNote];
- tone(tonePin, melody[thisNote],noteDuration);
- // to distinguish the notes, set a minimum time between them.
- // the note's duration + 30% seems to work well:
- int pauseBetweenNotes = noteDuration * 1.30;
- delay(pauseBetweenNotes);
- // stop the tone playing:
- noTone(tonePin);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement