// Alien Laser Communicator 12-10-20 #include // used when running 32MHZ on a LGT8F328P #define DEBUG // to turn off comment out this line #define LED 13 // LED used for visual display #define Fire 12 // Fire defines the digital output port #define PTime 42 // Pulse Time for Fire duration time in milliseconds // NOTE: These times are for running a 32 MHZ LGT8F328P // Divide by 2 or change appropriately if NANO used // PTime = 55 is 10 WPM // PTime = 42 is 15 WPM // PTime = 28 is 20 WPM int cnt; // cnt is short for count; used in outputChar() int durTime; // dur is short for duration Time; used in burst() int charCnt = 0; // counter for fetching a character from message string int mLength; // message Length int toneFreq; // Tone Frequency variable for "tone" function char thisChar; // used in loop() decodeChar() and outputChar() char alfa; // used in outputChar() char alpha; String flash; // used in decodeChar() and outputChar() String message1 = ".... " "I am what I believe. I believe, never lie to yourself " "or anyone else and always practice the golden rule. " "I am one asking help for the human species on this planet. " "Entities with love and respect for sovereign life forms " "are invited to my home, this planet, to help the human " "species become members of your federation. "; // NOTES about timing // 1 dah or dash = 3 dit or dots. // Space between parts of the same letter = 1 dit or dots // Space between letters = 3 dit or dots // Space between words = 7 dit or dots // Change PTime to change code speed, see(#define PTime) void setup() { // *** comment out "clock_prescale_set" when using an Arduino NANO clock_prescale_set(clock_div_1); // used when running 32MHZ on a LGT8F328P // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } pinMode(Fire, OUTPUT); pinMode(LED, OUTPUT); Serial.println("Start"); Serial.println(); toneFreq=PTime*5; } void loop() { mLength = message1.length(); for(charCnt=0; charCnt= 0x40) thisChar = thisChar & 0xDF; if(thisChar != 0x0A){ decodeChar(); outputChar(); } } delay(PTime*7); } } //} void burst(int){ digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) // tone(12, toneFreq, durTime);// Only used when using a Speaker verse a beeper digitalWrite(Fire, HIGH); // Fire the laser delay(durTime); // wait for some time in milliseconds digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW digitalWrite(Fire, LOW); // Turn off the laser noTone(12); delay(PTime); // wait for some time in milliseconds } void outputChar(){ #ifdef DEBUG Serial.println(flash); Serial.print("Char = "); Serial.write(thisChar); Serial.print(" "); #endif cnt=0; alfa=flash.charAt(cnt); while(alfa!='='){ if(alfa=='t'){ #ifdef DEBUG Serial.print("dit "); #endif durTime = PTime; // dit length = 1 Ptime burst(durTime); } if(alfa=='h'){ #ifdef DEBUG Serial.print("dah "); #endif durTime = PTime * 3; // dah length = 3 dits or 3 Ptime burst(durTime); } delay(PTime * 3); // character spacing 3 dits total ++cnt; alfa=flash.charAt(cnt); } #ifdef DEBUG Serial.println(); #endif // Serial.print("Char = "); // Serial.write(thisChar); // Serial.print(" Hex = "); // Serial.print(thisChar, HEX); // Serial.print(" Dec = "); // Serial.println(thisChar); } void decodeChar(){ // NOTES about flash string // t = dit, h = dah // "=" is used as the string terminator switch(thisChar){ case 0x41: // A flash = "th="; // t = dit, h = dah, A = dit dah break; case 0x42: // B flash = "httt="; // dah dit dit dit break; case 0x43: // C flash = "htht="; // dah dit dah dit break; case 0x44: // D flash = "htt="; // dah dit dit dit break; case 0x45: // E flash = "t="; // dit break; case 0x46: // F flash = "ttht="; // dit dit dah dit break; case 0x47: // G flash = "hht="; // dah dah dit break; case 0x48: // H flash = "tttt="; // dit dit dit dit break; case 0x49: // I flash = "tt="; // dit dit break; case 0x4A: // J flash = "thhh="; // dit dah dah dah break; case 0x4B: // K flash = "hth="; // dah dit dah break; case 0x4C: // L flash = "thtt="; // dit dah dit dit break; case 0x4D: // M flash = "hh="; // dah dah break; case 0x4E: // N flash = "ht="; // dah dit break; case 0x4F: // O flash = "hhh="; // dah dah dah break; case 0x50: // P flash = "thht="; // dit dah dah dit break; case 0x51: // Q flash = "hhth="; // dah dah dit dah break; case 0x52: // R flash = "tht="; // dit dah dit break; case 0x53: // S flash = "ttt="; // dit dit dit break; case 0x54: // T flash = "h="; // dah break; case 0x55: // U flash = "tth="; // dit dit dah break; case 0x56: // V flash = "ttth="; // dit dit dit dah break; case 0x57: // W flash = "thh="; // dit dah dah break; case 0x58: // X flash = "htth="; // dah dit dit dah break; case 0x59: // Y flash = "hthh="; // dah dit dah dah break; case 0x5A: // Z flash = "hhtt="; // dah dah dit dit break; case 0x30: // 0 flash = "hhhhh="; // dah dah dah dah dah break; case 0x31: // 1 flash = "thhhh="; // dit dah dah dah dah break; case 0x32: // 2 flash = "tthhh="; // dit dit dah dah dah break; case 0x33: // 3 flash = "ttthh="; // dit dit dit dah dah break; case 0x34: // 4 flash = "tttth="; // dit dit dit dit dah break; case 0x35: // 5 flash = "ttttt="; // dit dit dit dit dit break; case 0x36: // 6 flash = "htttt="; // dah dit dit dit dit break; case 0x37: // 7 flash = "hhttt="; // dah dah dit dit dit break; case 0x38: // 8 flash = "hhhtt="; // dah dah dah dit dit break; case 0x39: // 9 flash = "hhhht="; // dah dah dah dah dit break; case 0x2C: // . flash = "ththth="; // dit dah dit dah dit dah break; case 0x2E: // , flash = "hhtthh="; // dah dah dit dit dah dah break; case 0x2F: // / flash = "httht="; // dah dit dit dah dit break; case 0x3F: // @ flash = "thhtht="; // dit dah dah dit dah dit break; } }