Преобразовать char * в char [] - PullRequest
0 голосов
/ 05 августа 2020

Привет, дорогой Inte rnet: D

Итак, я написал переводчик «Текст в Морзе», который работал хорошо. Теперь я хочу сделать то же самое с ардуино. Код Морзе должен отображаться мигающим светодиодом. Моя проблема в том, что у меня есть const char* morse[]={"....", ".-", ".-..", ".-..", "---"};, который я не могу преобразовать или переназначить на новую переменную char str[], чтобы дать правильный вывод с помощью светодиода.

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define SHORT 2
#define LONG 3
#define PAUSE 800

char sentence[50]="Hello";
const char* morse[500];


const static char* letters[50]={"10","0111","0101","011","1","1101","001","1111","11","1000","010","1011","00","01","000","1001","0010","101","111","0","110","1110","100","0110","0100","0011"}; //A-Z

void setup(){
  pinMode(SHORT, OUTPUT);
  digitalWrite(SHORT, LOW);
  pinMode(LONG, OUTPUT);
  digitalWrite(LONG, LOW);
  Serial.begin(9600);
  all_Caps();
}

void loop(){
  all_Caps();
  int b=strlen(sentence);
    for(int i=0;i<b;i++)morse[i]=letters[sentence[i]-'A'];
  showtime();

  delay(PAUSE*10);
}


void all_Caps(){
  int b=strlen(sentence);
    for(int i=0;i<b;i++){
        sentence[i]= toupper(sentence[i]);
    }
}


void showtime(){
  
  char str[10];
  
  
  for(int i=0;i<10;i++){
    str=morse[i]; 
  }
  for(int e=0;e<10;e++){
    if(str[e]==1){
      digitalWrite(SHORT, HIGH);
      delay(50);
      digitalWrite(SHORT, LOW);
      delay(PAUSE);
    }
    else if(str[e]==0){
      digitalWrite(LONG, HIGH);
      delay(300);
      digitalWrite(LONG, LOW);
      delay(PAUSE);
    }
  }     
}

edit:

Итак Я изменил str=morse[i] на str[i]=morse[i], как сказано в комментариях. Теперь я получил предупреждающее сообщение:

sketch_aug05a.ino:48:19: warning: invalid conversion from 'const char*' to 'char' [-fpermissive]

1 Ответ

1 голос
/ 05 августа 2020

Нельзя назначать строки, и это здесь не нужно

    for(int i=0;i<b;i++)
    {
        showtime(letters[toupper(sentence[i])-'A']);
    }
void showtime(const char *code)
{
    while(*code)
    {
        if(*code++ == '1')
        {
            digitalWrite(SHORT, HIGH);
            delay(50);
            digitalWrite(SHORT, LOW);
        }
        else
        {
            digitalWrite(LONG, HIGH);
            delay(300);
            digitalWrite(LONG, LOW);
        }
        delay(PAUSE);
    }
}          

Функция Allcaps не нужна.

...