Декодер азбуки Морзе при обработке проблемы адаптации

Я пытаюсь сделать декодер азбуки Морзе при обработке. У меня есть коды Arduino для этого, но я хочу сделать это без какого-либо физического инструмента или другой кнопки, только с помощью моего компьютера и щелчка мыши.

Вот ссылка, которую я использовал для Arduino.

Я пытаюсь оптимизировать код Arduino, который я нашел в Интернете, для обработки, но не имею никакого опыта в обработке.

/*
  PROGRAM TO DECIPHER MORSE CODE USING A PUSH BUTTON AND DISPLAY IT ON THE SERIAL MONITOR
  DATE: 20 JANUARY 2017
  AUTHORS: PINAKI SADHUKHAN AND PRIYANKA SADHUKHAN
*/

unsigned long signal_len,t1,t2;   //time for which button is pressed
int inputPin = 2;                 //input pin for push button
int ledPin = 4;                   //outpu pin for LED
String code = "";                 //string in which one alphabet is stored

void setup() {
  Serial.begin(9600);
  pinMode(inputPin, INPUT_PULLUP); //internal pullup resistor is used to simplify the circuit
  pinMode(ledPin,OUTPUT);
}

void loop()
{
NextDotDash:
  while (digitalRead(inputPin) == HIGH) {}
  t1 = millis();                            //time at button press
  digitalWrite(ledPin, HIGH);               //LED on while button pressed
  while (digitalRead(inputPin) == LOW) {}
  t2 = millis();                            //time at button release
  digitalWrite(ledPin, LOW);                //LED off on button release
  signal_len = t2 - t1;                     //time for which button is pressed
  if (signal_len > 50)                      //to account for switch debouncing
  {
    code += readio();                       //function to read dot or dash
  }
  while ((millis() - t2) < 500)           //if time between button press greater than 0.5sec, skip loop and go to next alphabet
  {     
    if (digitalRead(inputPin) == LOW)
    {
      goto NextDotDash;
    }
  }
  convertor();                          //function to decipher code into alphabet
}

char readio()
{
  if (signal_len < 600 && signal_len > 50)
  {
    return '.';                        //if button press less than 0.6sec, it is a dot
  }
  else if (signal_len > 600)
  {
    return '-';                        //if button press more than 0.6sec, it is a dash
  }
}

void convertor()
{
  static String letters[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-",
                             ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "E"
                            };
  int i = 0;
  if (code == ".-.-.-")
  {
    Serial.print(".");        //for break
  }
  else
  {
    while (letters[i] != "E")  //loop for comparing input code with letters array
    {
      if (letters[i] == code)
      {
        Serial.print(char('A' + i));
        break;
      }
      i++;
    }
    if (letters[i] == "E")
    {
      Serial.println("<Wrong input>");  //if input code doesn't match any letter, error
    }
  }
  code = "";                            //reset code to blank string
}

Я пытаюсь адаптировать его к Processing3, но многие коды несовместимы с Processing, вместо того, чтобы оба они использовали язык Java. Все мои усилия напрасны.


person ThePureblood    schedule 08.10.2019    source источник
comment
Привет! В чем именно заключается ваш вопрос? Вы можете прочитать Как задать хороший вопрос перед публикацией. Вы обнаружите, что это сообщество очень полезно... если вы соблюдаете его правила!   -  person laancelot    schedule 08.10.2019
comment
почему это помечено как java?   -  person Piglet    schedule 09.10.2019
comment
@Piglet Arduino IDE - это программа на основе Java, не так ли?   -  person ThePureblood    schedule 09.10.2019
comment
Я не понимаю, как язык, на котором была написана IDE, имеет отношение к вашему сообщению. Код, который у вас есть, это C++. Или лучше какой-нибудь специфический для Arduino диалект. Я не уверен, какую помощь вы ожидаете здесь. Просто сделайте несколько уроков...   -  person Piglet    schedule 09.10.2019


Ответы (1)


Я не на 100% то, что вы хотите знать, но я думаю, вы хотите реализовать декодер Морзе в Processing, и все, что у вас есть, это реализация Arduino.

Так что вместо того, чтобы пытаться перевести реализацию Arduino (что неплохо, если вы умеете читать код Arduino), почему бы просто не реализовать ее с нуля.

Вот что вам нужно знать, если вы хотите использовать мышь:

  • Как обрабатывать нажатие и отпускание кнопки мыши
  • Как измерить время
  • Тайминги конкретной азбуки Морзе, которую вы хотите декодировать
  • Как вывести текст
  • Некоторые базовые знания по обработке, чтобы вы могли использовать переменные и управляющие структуры.

Эти знания можно быстро получить с помощью веб-поиска.

Затем вы измеряете, как долго мышь нажимается каждый раз, когда она нажимается. Это дает вам . и _, которые вы затем комбинируете в символы, которые дают вам слова.

person Piglet    schedule 09.10.2019