Hi, I have trouble understanding the Morse code when it comes to how many seconds it should wait until next letter will happen. From this project.
https://create.arduino.cc/projecthub/vladakrsmanovic/arduino-morse-code-machine-709cc5?f=1
I want to increase the dot time because it seems to assume it is a dash rather than dot. Which makes a "T" instead of an "E". Also how do I know which one is telling me to stop before next word?
I don't understand what cheker or linecheker does in this code. I am not using a button, I am trying to get it to morse base on voltage difference instead which is this code.
Code below:
const int buttonPin = A0;
const int ledPin = 13;
const int buzzer = 9;
int ledState = HIGH;
int buttonState = LOW;
int lastButtonState = LOW;
int doesitwork = LOW; // variable used for debuging early versions of the code
int pause_value = 250; // depending on your skill and how fast your fingers are you can change this value to make typing a message faster or slower
long signal_length = 0;
long pause = 0;
String morse = "";
String dash = "-";
String dot = "*";
boolean cheker = false;
boolean linecheker = false;
long lastDebounceTime = 0;
long debounceDelay = 50;
void setup()
{
Serial.begin(9600);
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buzzer, OUTPUT);
Serial.println("Welcome to Arduino-Uno morse machine");
Serial.println("Using these values print out your message in morse and read out the message in english in the serial monitor");
Serial.println("https://goo.gl/images/R4AIsW morse code values for learing");
while(!digitalRead(buttonPin))
;
}
void loop() {
//added codes
int sensorValue = analogRead(buttonPin);
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
float voltage = sensorValue * (5.0 / 1023.0);
if (voltage > 10) buttonState = HIGH; //Higher than 10v
else if (voltage < 9.96) buttonState = LOW; //Lower than 9.96v
if (buttonState && lastButtonState) // basic state machine depending on the state of the signal from the button
{
++signal_length;
if (signal_length<2*pause_value) //this help to notice that there is a change in the signal length aka that its not a dot anymore but a dash
{ // best use for the measuring of signal_length would be use of the millis() but this was used for simplicity
tone(buzzer, 1500) ;
}
else
{
tone(buzzer, 1000) ;
}
}
else if(!buttonState && lastButtonState) //this part of the code happens when the button is released and it send either * or - into the buffer
{
if (signal_length>50 && signal_length<2pause_value )
{
morse = morse + dot;
}
else if (signal_length>2pause_value)
{
morse = morse + dash;
}
signal_length=0;
digitalWrite(13, LOW);
noTone(buzzer);
}
else if(buttonState && !lastButtonState) // this part happens when the button is pressed and its use to reset several values
{
pause=0;
digitalWrite(13, HIGH);
cheker = true;
linecheker = true;
}
else if (!buttonState && !lastButtonState)
{
++pause;
if (( pause>3pause_value ) && (cheker))
{
printaj(morse);
cheker = false;
morse = "";
}
if ((pause>15pause_value) && (linecheker))
{
Serial.println();
linecheker = false;
}
}
lastButtonState=buttonState;
delay(1);
}
void printaj(String prevodilac) //ugly part of the code but it works fine
{ //compare morse string to known morse values and print out the letter or a number
//the code is written based on the international morse code, one thing i changed is that insted of typing a special string to end the line it happens with enough delay
if (prevodilac=="-")
Serial.print("A");
else if (prevodilac=="-")
Serial.print("B");
else if (prevodilac=="--")
Serial.print("C");
else if (prevodilac=="-")
Serial.print("D");
else if (prevodilac=="*")
Serial.print("E");
else if (prevodilac=="-")
Serial.print("F");
else if (prevodilac=="--")
Serial.print("G");
else if (prevodilac=="")
Serial.print("H");
else if (prevodilac=="**")
Serial.print("I");
else if (prevodilac=="---")
Serial.print("J");
else if (prevodilac=="--")
Serial.print("K");
else if (prevodilac=="-**")
Serial.print("L");
else if (prevodilac=="--")
Serial.print("M");
else if (prevodilac=="-")
Serial.print("N");
else if (prevodilac=="---")
Serial.print("O");
else if (prevodilac=="--")
Serial.print("P");
else if (prevodilac=="---")
Serial.print("Q");
else if (prevodilac=="-")
Serial.print("R");
else if (prevodilac=="")
Serial.print("S");
else if (prevodilac=="-")
Serial.print("T");
else if (prevodilac=="-")
Serial.print("U");
else if (prevodilac=="-")
Serial.print("V");
else if (prevodilac=="--")
Serial.print("W");
else if (prevodilac=="--")
Serial.print("X");
else if (prevodilac=="-*--")
Serial.print("Y");
else if (prevodilac=="--**")
Serial.print("Z");
else if (prevodilac=="----")
Serial.print("1");
else if (prevodilac=="---")
Serial.print("2");
else if (prevodilac=="--")
Serial.print("3");
else if (prevodilac=="-")
Serial.print("4");
else if (prevodilac=="*****")
Serial.print("5");
else if (prevodilac=="-")
Serial.print("6");
else if (prevodilac=="--")
Serial.print("7");
else if (prevodilac=="---")
Serial.print("8");
else if (prevodilac=="----")
Serial.print("9");
else if (prevodilac=="-----")
Serial.print("0");
Serial.print(" ");
prevodilac="";
}