Проблема с передачей сигнала

Stempler
Offline
Зарегистрирован: 09.06.2019

Здравствуйте всем, к сожалению прошлую мою тему закрыли, по этому пришлось создать новую.

Опишу проблему подробно.

Есть одно устройство, которое посылает сигнал, приемником этого сигнала стала Arduino UNO.

Сам сигнал такого вида (скриншот с лог. анализатора)

 

На сколько я понимаю, сигнал состоит из 2 байтов по 8 бит.

Я загоняю его в переменную и пытаюсь передать уже его, с ардуины.

byte signals ;   // 

                        
void setup() {
        Serial.begin(9600);     
}
 
void loop() {
 
       
        if (Serial.available() > 0) {

signals = Serial.read();
 delay(10);

Serial.println(signals, DEC);




  delay(2000);


        }        }

 

Но на выходе из ардуины получается совсем другой сигнал

Т.е грубо говоря - вместо двух чисел 35, 118 выходит три числа - 48, 13, 10.

Помогите разобраться, что к чему и из-за чего.

nik182
Offline
Зарегистрирован: 04.05.2015

13 и 10 это конец строки. Всё работает как запрограмировано. 

Stempler
Offline
Зарегистрирован: 09.06.2019

nik182 пишет:

13 и 10 это конец строки. Всё работает как запрограмировано. 

хм.а тогда откуда берется 48? И куда пропадает 35 и 118?

Green
Offline
Зарегистрирован: 01.10.2015

Serial.write(signals);

nik182
Offline
Зарегистрирован: 04.05.2015

Почитай уже что нибудь про сериальную передачу. Нельзя в одну переменную, читая символы, прямо засунуть два. Нужна обработка. Ну а 48 это код нуля. 

Stempler
Offline
Зарегистрирован: 09.06.2019

nik182 пишет:

Почитай уже что нибудь про сериальную передачу. Нельзя в одну переменную, читая символы, прямо засунуть два. Нужна обработка. Ну а 48 это код нуля. 

Читал про передачу. так же думал уже на счет того что нужно несколько переменных. Пробовал в массив вгонять, не получилось. Не пойму как разделить сериал рид на несколько значений и переместить их по отдельности в массивы. Подскажешь?

nik182
Offline
Зарегистрирован: 04.05.2015

Я бы подсказал, если б понял что ты хочешь. У тебя прилетают два символа #v . Как их интерпретировать и что с ними делать не понятно. Например по сериалу прибежит строка из трёх символов 255. Её можно упаковать в один байт 0xFF. Или на,оборот, прибегает байт 1 и его можно развернуть в строку из четырёх символов 0х01.  

Stempler
Offline
Зарегистрирован: 09.06.2019

nik182 пишет:

Я бы подсказал, если б понял что ты хочешь. У тебя прилетают два символа #v . Как их интерпретировать и что с ними делать не понятно. Например по сериалу прибежит строка из трёх символов 255. Её можно упаковать в один байт 0xFF. Или на,оборот, прибегает байт 1 и его можно развернуть в строку из четырёх символов 0х01.  

Я хочу попросту принять эти символы и передать их же дальше. Пробую вот так, но тоже что-то ни о чем...

int8_t a[2];
int i;
                        
void setup() {
        Serial.begin(9600);     
}
 
void loop() {
 
        if (Serial.available() > 0) {

 Serial.readBytes((char *)a, 2); // в a[0] первая переменная, а в a[1] вторая

 Serial.setTimeout(100);

for (i = 0; i < 2; i = i + 1) {
  Serial.write(a[i]);
}

  delay(2000);


        }            }

 

nik182
Offline
Зарегистрирован: 04.05.2015

Приходит на Rx. Уходит на Tx.

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()) {     
    Serial.write(Serial.read());  
 }


 

Stempler
Offline
Зарегистрирован: 09.06.2019

nik182 пишет:

Приходит на Rx. Уходит на Tx.

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()) {     
    Serial.write(Serial.read());  
 }


 

Этот код выдает на анализаторе 6 чисел - 244.

Но мне нужно чтобы была запись каждого числа в переменную. 

b707
Offline
Зарегистрирован: 26.05.2017

Stempler пишет:

Этот код выдает на анализаторе 6 чисел - 244.

Но мне нужно чтобы была запись каждого числа в переменную. 

да погодите вы с переменной. Вы сначала добейтесь, чтобы байты передавались  правильно. Если у вас на входе 35 и 118, а на выходе - 6 раз по 244 - значит пока ничего не принимается, это просто мусор.

Stempler
Offline
Зарегистрирован: 09.06.2019

хм.Я понял. В какую сторону копать?

nik182
Offline
Зарегистрирован: 04.05.2015

Это код не может выдавать 6 символов(!!!). У меня он просто возвращает то что пришло в ком порт. Что передается в мониторе ардуино, когда этот код  просто загружен у тебя? Должно быть : нажал 1, на экране монитора увидел 1. Без анализатора. Сначала надо добиться этого, потом к анализатору можно переходить. 

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Это код не может выдавать 6 символов(!!!). У меня он просто возвращает то что пришло в ком порт. Что передается в мониторе ардуино, когда этот код  просто загружен у тебя?

nik182-  да ничего у него не передается

ТС читает сигналы с неизвестного устройства, о котором не знает НИЧЕГО - ни скорости передачи, ни параметров соединения, ни, даже - а последовательный ли это порт вообще.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

b707, устройство-то известное, положим. А вот всё остальное - действительно под вопросом. Поэтому я ему писал два скетча - универсальный "приемник" и "передатчик". Но они показались "слишком сложными", поэтому Максим идти своим путем и действовать методом тыка. Брукли уже помог ему в "исполнителях" с приемом по UART (если это UART, конечно, а не простое совпадение). Теперь пришло время помогать с передачей.

Stempler
Offline
Зарегистрирован: 09.06.2019

sadman41 пишет:

b707, устройство-то известное, положим. А вот всё остальное - действительно под вопросом. Поэтому я ему писал два скетча - универсальный "приемник" и "передатчик". Но они показались "слишком сложными", поэтому Максим идти своим путем и действовать методом тыка. Брукли уже помог ему в "исполнителях" с приемом по UART (если это UART, конечно, а не простое совпадение). Теперь пришло время помогать с передачей.

мм... Меня просто беспокоит точность сигнала. 

Собственно я хочу передать данный сигнал не для какого либо дальнейшего развития, а для наглянности. Т.е грубо говоря, каждое число будет в своем массиве и будет идти сравнения, т.е если в массивах "35" и "118" , то на цифр. пине  HIGH, если "34" и "119", то LOW.

b707
Offline
Зарегистрирован: 26.05.2017

если для наглядности - возьмите две ардуины. одной передавайте, на другую принимайте.

Я вам на амперке уже писал, что у вас проблема вовсе не в принимающем коде

Stempler
Offline
Зарегистрирован: 09.06.2019

Спасибо, я понял. Пробую.