Прием данных с ПК с помощью Serial.read()

S@R
Offline
Зарегистрирован: 30.04.2015

Помогите пжлста,не получается обработать принятые данные, в строковой форме в ардуино,с помощью Serial.read(). Посылаю с ПК букву,принимаю в ардуино, но присвоить эту букву,строковой переменной с помощью serial.read() не получается,выводит числа в диапазоне от 224...,что не так?Как я понимаю он выдает мне код символа из таблицы Аски,или я ошибаюсь,если нет,то как мне преобразовать обратно в букву?

int msg[30];
int t=0;
int r=112;

void setup() {                

   Serial.begin(9600);
 
}

void loop() 
 {


while(Serial.available() == 0){

}

delay(100);

int i=0;

while(Serial.available()) {

  msg[i] = Serial.read(); 
  Serial.println(msg[i]);
  i++;

}

}

 

maksim
Offline
Зарегистрирован: 12.02.2012

https://ru.wikipedia.org/wiki/UTF-8

http://i.voenmeh.ru/kafi5/Kam.loc/inform/UTF-8.htm

Так же нужно помнить, что дуиновский монитор не отображает кириллицу.

Datak
Offline
Зарегистрирован: 09.10.2014
int msg[30];

Соответственно, как int оно и выводится - числом, то есть.

Надо или изменить тип самого массива msg, или преобразовать тип уже после, при вызове println.

maksim
Offline
Зарегистрирован: 12.02.2012

Даже когда массив будет иметь правильный тип, судя по кодам:

S@R пишет:

выводит числа в диапазоне от 224...

буков он все равно не увидет.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Кстати по поводу вывода в сериал русских букв. Когда-то дома написал такой скетчик, что б вывести все доступные символы в мониторе ком-порта, хотел подобрать что-то красивое из нестандартных.

void setup(){
  Serial.begin(9600);
  for (byte n=32; n<254; n++) {
  Serial.print(n);
  Serial.print(" = ");  
  Serial.println(char(n));
  }       
}

Так он в конце байта  выводил без проблем все русские буквы! А на работе стоит та-же версия ардуино, и с этим-же скетчем выводит одни кракозябры..  Очевидно, что винда заведует этим вопросом. Дома win8 на работе win7.  Глубоко причину не копал, ибо нет надобности..

Datak
Offline
Зарегистрирован: 09.10.2014

Ну да, это уже зависит не от того, кто выводит в Serial-порт, а от того кто выводит на экран принятое из этого порта.

И от конкретного виндоса, конечно, может зависеть. Или, точнее, от его настроек.