Проблема с передачей сигнала
- Войдите на сайт для отправки комментариев
Сб, 06/07/2019 - 15:59
Здравствуйте всем, к сожалению прошлую мою тему закрыли, по этому пришлось создать новую.
Опишу проблему подробно.
Есть одно устройство, которое посылает сигнал, приемником этого сигнала стала 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.
Помогите разобраться, что к чему и из-за чего.
13 и 10 это конец строки. Всё работает как запрограмировано.
13 и 10 это конец строки. Всё работает как запрограмировано.
хм.а тогда откуда берется 48? И куда пропадает 35 и 118?
Serial.write(signals);
Почитай уже что нибудь про сериальную передачу. Нельзя в одну переменную, читая символы, прямо засунуть два. Нужна обработка. Ну а 48 это код нуля.
Почитай уже что нибудь про сериальную передачу. Нельзя в одну переменную, читая символы, прямо засунуть два. Нужна обработка. Ну а 48 это код нуля.
Читал про передачу. так же думал уже на счет того что нужно несколько переменных. Пробовал в массив вгонять, не получилось. Не пойму как разделить сериал рид на несколько значений и переместить их по отдельности в массивы. Подскажешь?
Я бы подсказал, если б понял что ты хочешь. У тебя прилетают два символа #v . Как их интерпретировать и что с ними делать не понятно. Например по сериалу прибежит строка из трёх символов 255. Её можно упаковать в один байт 0xFF. Или на,оборот, прибегает байт 1 и его можно развернуть в строку из четырёх символов 0х01.
Я бы подсказал, если б понял что ты хочешь. У тебя прилетают два символа #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); } }Приходит на Rx. Уходит на Tx.
void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) { Serial.write(Serial.read()); }Приходит на Rx. Уходит на Tx.
void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) { Serial.write(Serial.read()); }Этот код выдает на анализаторе 6 чисел - 244.
Но мне нужно чтобы была запись каждого числа в переменную.
Этот код выдает на анализаторе 6 чисел - 244.
Но мне нужно чтобы была запись каждого числа в переменную.
да погодите вы с переменной. Вы сначала добейтесь, чтобы байты передавались правильно. Если у вас на входе 35 и 118, а на выходе - 6 раз по 244 - значит пока ничего не принимается, это просто мусор.
хм.Я понял. В какую сторону копать?
Это код не может выдавать 6 символов(!!!). У меня он просто возвращает то что пришло в ком порт. Что передается в мониторе ардуино, когда этот код просто загружен у тебя? Должно быть : нажал 1, на экране монитора увидел 1. Без анализатора. Сначала надо добиться этого, потом к анализатору можно переходить.
Это код не может выдавать 6 символов(!!!). У меня он просто возвращает то что пришло в ком порт. Что передается в мониторе ардуино, когда этот код просто загружен у тебя?
nik182- да ничего у него не передается
ТС читает сигналы с неизвестного устройства, о котором не знает НИЧЕГО - ни скорости передачи, ни параметров соединения, ни, даже - а последовательный ли это порт вообще.
b707, устройство-то известное, положим. А вот всё остальное - действительно под вопросом. Поэтому я ему писал два скетча - универсальный "приемник" и "передатчик". Но они показались "слишком сложными", поэтому Максим идти своим путем и действовать методом тыка. Брукли уже помог ему в "исполнителях" с приемом по UART (если это UART, конечно, а не простое совпадение). Теперь пришло время помогать с передачей.
b707, устройство-то известное, положим. А вот всё остальное - действительно под вопросом. Поэтому я ему писал два скетча - универсальный "приемник" и "передатчик". Но они показались "слишком сложными", поэтому Максим идти своим путем и действовать методом тыка. Брукли уже помог ему в "исполнителях" с приемом по UART (если это UART, конечно, а не простое совпадение). Теперь пришло время помогать с передачей.
мм... Меня просто беспокоит точность сигнала.
Собственно я хочу передать данный сигнал не для какого либо дальнейшего развития, а для наглянности. Т.е грубо говоря, каждое число будет в своем массиве и будет идти сравнения, т.е если в массивах "35" и "118" , то на цифр. пине HIGH, если "34" и "119", то LOW.
если для наглядности - возьмите две ардуины. одной передавайте, на другую принимайте.
Я вам на амперке уже писал, что у вас проблема вовсе не в принимающем коде
Спасибо, я понял. Пробую.