Advertisement
ChuseCubr_

Arduino Morse Phone

Jun 4th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <SoftwareSerial.h>
  2.  
  3. //Tells Arduino to use pins 12 and 13 to communicate with GSM Shield
  4. SoftwareSerial GPRS(12, 13);
  5.  
  6. //Declaration of integer variables. *State watches the button state *LastState is used to see if there's a change in the state, *Counter is used for counting how many times button was pressed
  7. int ditState, ditLastState, dahLastState, dahState, spaceState, spaceLastState, spaceCounter, delState, delLastState, delCounter, sendState, sendLastState, sendCounter;
  8.  
  9. //Declaration of string variables. txtmsg is the final message, others are buffers for translation and appending
  10. String txtmsg, codeBuffer, letterBuffer, wordBuffer;
  11.  
  12. void setup()
  13. {
  14.   //Initialization of variables
  15.   spaceCounter = 0; delCounter = 0; sendCounter = 0;
  16.   txtmsg = ""; codeBuffer = ""; letterBuffer = ""; wordBuffer = "";
  17.  
  18.   //Assigns input values to variables (INPUT_PULLUP turns on pin's internal pullup resistor bc I'm too lazy to add resistors. Note that this inverts the values)
  19.   pinMode(2, INPUT_PULLUP);
  20.   pinMode(4, INPUT_PULLUP);
  21.   pinMode(6, INPUT_PULLUP);
  22.   pinMode(8, INPUT_PULLUP);
  23.   pinMode(10, INPUT_PULLUP);
  24.  
  25.   //Initializes ports (for communication)
  26.   GPRS.begin(9600); Serial.begin(9600);
  27. }
  28.  
  29. void loop()
  30. {
  31.   //Displays new messages from GSM Shield to serial monitor
  32.   while(GPRS.available()){
  33.     Serial.write(GPRS.read());
  34.   }
  35.  
  36.   //redefinition of variables (updates on each loop)
  37.   ditLastState = ditState; ditState = digitalRead(2);
  38.   dahLastState = dahState; dahState = digitalRead(4);
  39.   spaceLastState = spaceState; spaceState = digitalRead(6);
  40.   delLastState = delState; delState = digitalRead(8);
  41.   sendLastState = sendState; sendState = digitalRead(10);
  42.  
  43.   //Reads dit button input
  44.   if(ditState!=ditLastState){
  45.     if(ditState==LOW){
  46.       //resets counters for buttons with multiple presses for multiple functions
  47.       spaceCounter = 0; delCounter = 0; sendCounter = 0;
  48.       //adds dit to code buffer (to be used for translating)
  49.       codeBuffer = codeBuffer + ".";
  50.     }
  51.   }
  52.  
  53.   if(dahState!=dahLastState){
  54.     if(dahState==LOW){
  55.       spaceCounter = 0; delCounter = 0; sendCounter = 0;
  56.       //adds dah to code buffer
  57.       codeBuffer = codeBuffer + "-";
  58.     }
  59.   }
  60.  
  61.   if(spaceState!=spaceLastState){
  62.     if(spaceState==LOW){
  63.       delCounter = 0; sendCounter = 0;
  64.       //counts how many times space button is pressed
  65.       spaceCounter++;
  66.       //on single press starts new letter
  67.       if(spaceCounter==1){
  68.         letterBuffer = morse(); wordBuffer = wordBuffer + letterBuffer; codeBuffer = "";
  69.       }
  70.       //on double press adds space
  71.       else if(spaceCounter==2){
  72.         txtmsg = txtmsg + " " + wordBuffer; wordBuffer = "";
  73.       }
  74.       //on triple pressing adds .
  75.       else{
  76.         txtmsg = txtmsg + "."; spaceCounter = 0;
  77.       }
  78.     }
  79.   }
  80.  
  81.   if(delState!=delLastState){
  82.     if(delState==LOW){
  83.       spaceCounter = 0; sendCounter = 0;
  84.       //counts how many times del button is pressed
  85.       delCounter++;
  86.       //on single press, clears code buffer (current letter being typed)
  87.       if(delCounter==1){
  88.         codeBuffer = "";
  89.       }
  90.       //on double press, clears word buffer (current word being typed)
  91.       else if(delCounter==2){
  92.         wordBuffer = "";
  93.       }
  94.       //on triple press, clears whole text message
  95.       else{
  96.         txtmsg = "";
  97.       }
  98.     }
  99.   }
  100.  
  101.   if(sendState!=sendLastState){
  102.     if(sendState==LOW){
  103.       sendCounter++;
  104.       if(sendCounter==3){
  105.         //upon triple pressing send, finishes text
  106.         letterBuffer = morse(); wordBuffer = wordBuffer + letterBuffer; letterBuffer = "";
  107.         txtmsg = txtmsg + " " + wordBuffer; wordBuffer = "";
  108.         //sends
  109.         Serial.println("AT+CMGS=\"+63569737780\"");
  110.         Serial.println(txtmsg);
  111.         GPRS.println("AT+CMGS=\"+63569737780\"");
  112.         GPRS.println(txtmsg);
  113.         GPRS.write(0x1a);
  114.         txtmsg = ""; spaceCounter = 0; delCounter = 0; sendCounter = 0;
  115.       }
  116.     }
  117.   }
  118. }
  119.  
  120. //runs through morse characters and compares to current word upon pressing space, and returns translation. * is for characters that don't translate to anything, and "" is for del button, bc that bugs out without it.
  121. String morse(){
  122.   if(codeBuffer==".-"){return "a";}
  123.   else if(codeBuffer=="-..."){return "b";}
  124.   else if(codeBuffer=="-.-."){return "c";}
  125.   else if(codeBuffer=="-.."){return "d";}
  126.   else if(codeBuffer=="."){return "e";}
  127.   else if(codeBuffer=="..-."){return "f";}
  128.   else if(codeBuffer=="--."){return "g";}
  129.   else if(codeBuffer=="...."){return "h";}
  130.   else if(codeBuffer==".."){return "i";}
  131.   else if(codeBuffer==".---"){return "j";}
  132.   else if(codeBuffer=="-.-"){return "k";}
  133.   else if(codeBuffer==".-.."){return "l";}
  134.   else if(codeBuffer=="--"){return "m";}
  135.   else if(codeBuffer=="-."){return "n";}
  136.   else if(codeBuffer=="---"){return "o";}
  137.   else if(codeBuffer==".--."){return "p";}
  138.   else if(codeBuffer=="--.-"){return "q";}
  139.   else if(codeBuffer==".-."){return "r";}
  140.   else if(codeBuffer=="..."){return "s";}
  141.   else if(codeBuffer=="-"){return "t";}
  142.   else if(codeBuffer=="..-"){return "u";}
  143.   else if(codeBuffer=="...-"){return "v";}
  144.   else if(codeBuffer==".--"){return "w";}
  145.   else if(codeBuffer=="-..-"){return "x";}
  146.   else if(codeBuffer=="-.--"){return "y";}
  147.   else if(codeBuffer=="--.."){return "z";}
  148.   else if(codeBuffer=="----"){return "ch";}
  149.   else if(codeBuffer==".----"){return "1";}
  150.   else if(codeBuffer=="..---"){return "2";}
  151.   else if(codeBuffer=="...--"){return "3";}
  152.   else if(codeBuffer=="....-"){return "4";}
  153.   else if(codeBuffer=="....."){return "5";}
  154.   else if(codeBuffer=="-...."){return "6";}
  155.   else if(codeBuffer=="--..."){return "7";}
  156.   else if(codeBuffer=="---.."){return "8";}
  157.   else if(codeBuffer=="----."){return "9";}
  158.   else if(codeBuffer=="-----"){return "0";}
  159.   else if(codeBuffer=="..--.."){return "\?";}
  160.   else if(codeBuffer==".-..."){return "&";}
  161.   else if(codeBuffer==".----."){return "\'";}
  162.   else if(codeBuffer==".--.-."){return "@";}
  163.   else if(codeBuffer=="-.--.-"){return ")";}
  164.   else if(codeBuffer=="-.--."){return "(";}
  165.   else if(codeBuffer=="---..."){return ":";}
  166.   else if(codeBuffer=="--..--"){return ",";}
  167.   else if(codeBuffer=="-...-"){return "=";}
  168.   else if(codeBuffer==".-.-.-"){return ".";}
  169.   else if(codeBuffer=="-....-"){return "-";}
  170.   else if(codeBuffer==".-.-."){return "+";}
  171.   else if(codeBuffer==".-..-."){return "\"";}
  172.   else if(codeBuffer=="-..-."){return "/";}
  173.   else if(codeBuffer==""){return "";}
  174.   else{return "*";}
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement