edem
22.Февраль.2023 16:59:22
1
Доброго дня! Помогите плиз с решением.
Я хочу передать число с одной Ардуины на другую посредством rx/tx интерфеса
как мне byte передать в сериал как char?
byte x = ((PINB&(1<<0))?(1<<0):0) \
| ((PINB&(1<<1))?(1<<1):0) \
| ((PINB&(1<<2))?(1<<2):0) \
| ((PINB&(1<<3))?(1<<3):0);
Serial.write(x);
так как выше не получается, вторая Ардуина не понимает. Если передаю пр
Serial.write ('2');
то все в порядке.
edem
22.Февраль.2023 17:23:25
3
if (Serial.available() )
{
char ch=Serial.read();
if (ch=='2')
{digitalWrite(ledStart, HIGH); }
else
{digitalWrite(ledStart, LOW); }
} // if
вот так я пытаюсь получить значение на приемнике
Никак. Вопрос представляет собой бессмысленный набор слов и ответить на него невозможно.
Ну, передавайте не символом, а числом, кто Вам не даёт? Вариантов миллион
Пример №1
byte b = 2;
Serial.write(b);
Пример №2
Serial.write((byte)2);
Пример №3
Serial.write('2'-'0');
Можно ещё десяток вариантов привести.
edem:
if (Serial.available() )
{
char ch=Serial.read();
if (ch==‘2’)
{digitalWrite(ledStart, HIGH); }
else
{digitalWrite(ledStart, LOW); }
} // if
вот так я пытаюсь
Вам лень код нормально вставить? Или умышленно издеваетесь? Умеете же!
Это “код” не смотрел и смотреть не буду, пока не вставлен по-человечески. И уже начинаю жалеть, что подсказал Вам как передавать.
rkit
22.Февраль.2023 17:38:52
6
А с чего ты решил, что это равно ‘2’?
edem
22.Февраль.2023 17:45:32
7
да, фишка в том,что бывает что и равно 2, а бывает и 8
мне нужно получить результат этого выражения на второй ардуине
он может быть от 0 до 8
@edem , у меня складывается впечатление, что Вы не понимаете разницу между 2 и ‘2’.
edem
22.Февраль.2023 17:59:55
9
ок, нет проблем, если бы все понимал, то и вопроса не было
итак 2 - это число
‘2’ - это символ
когда я пишу в сериале ‘2’ - то передаю код этого символа. Насколько я знаю так работает сериал.
что я передаю если Serial.print(2) ? Вероятно это же число и передаю.
Только, что мне это дает? У меня результат выражения имеет тип byte. И именно с этим типом у меня проблемы.
v258
22.Февраль.2023 18:02:10
10
Число 2 - это 0x02, символ ‘2’ - это 0x32. Насколько это одно и то же - вам виднее
edem
22.Февраль.2023 18:28:58
11
ок, как мне отправить выражение через сериал
byte x = ((PINB&(1<<0))?(1<<0):0) \
| ((PINB&(1<<1))?(1<<1):0) \
| ((PINB&(1<<2))?(1<<2):0) \
| ((PINB&(1<<3))?(1<<3):0);
и принять его
Upper
22.Февраль.2023 18:31:51
12
Не понятно, какие проблемы с типом byte?
Как вы выше написали, если на приемнике используете
if (ch==‘2’)
Значит передавать надо Serial.print(x). Если x меньше 10.
Но наверно лучше на приемнике сравнивать
if (ch==2)
Тогда передавать надо Serial.write(x)
1 лайк
edem
22.Февраль.2023 19:42:00
13
я там вверху написал, и вероятно, напрасно
что проблем с передачей и приемом
типа Serial.write(‘2’) у меня нет. ВСЕ ОТЛИЧНО РАБОТАЕТ
именно это вариант у меня не работает.
edem:
if (Serial.available() )
{
char ch=Serial.read();
if (ch=='2') //
{digitalWrite(ledStart, HIGH); }
else
{digitalWrite(ledStart, LOW); }
} // if
вот так я пытаюсь получить значение на приемнике
В 5 стр. замените
if (ch==‘2’)
на
if (ch==2)
edem
22.Февраль.2023 20:34:10
15
КОНГЕНИАЛЬНО
В итоге:
на передатчике
delay(1000);
x = ((PINB&(1<<0))?(1<<0):0) \
| ((PINB&(1<<1))?(1<<1):0) \
| ((PINB&(1<<2))?(1<<2):0) \
| ((PINB&(1<<3))?(1<<3):0);
Serial.write(x);
на приемнике
if (Serial.available() )
{
int ch=Serial.read();
if (ch==2)
{digitalWrite(ledStart, HIGH); }
else
{digitalWrite(ledStart, LOW); }
v258
23.Февраль.2023 04:27:39
16
edem:
КОНГЕНИАЛЬНО
Похоже, вы сами не понимаете, чего хотите. Попробуйте расписать подробно словами, что вы пытаетесь передать и почему это что-то должно равняться ‘2’ (т.е. 0x32 в шестнадцатеричном или 50 в десятичном исчислении)
b707
23.Февраль.2023 08:29:50
17
Что это за ужас???
Если это - чтение четырех младших бит порта B, то это можно записать много короче
byte x = PINB & 0xF;
Учите битовые операции
1 лайк
edem
23.Февраль.2023 09:27:01
18
byte x = PINB & 0xF;
ок! задействованые пины идут по порядку/ надо попробовать
v258:
Похоже, вы сами не понимаете, чего хотите. Попробуйте расписать подробно словами, что вы пытаетесь передать и почему это что-то должно равняться ‘2’ (т.е. 0x32 в шестнадцатеричном или 50 в десятичном исчислении)
byte x = ((PINB&(1<<0))?(1<<0):0) \
| ((PINB&(1<<1))?(1<<1):0) \
| ((PINB&(1<<2))?(1<<2):0) \
| ((PINB&(1<<3))?(1<<3):0);
что по вашему может находится в переменной x?
mykaida
23.Февраль.2023 10:04:12
20
Komandir:
Ху…ня ?
Соглашусь с коллегой.
А вывести просто в серийный порт (пока без второй ардуинки), и посмотреть чего получается - это неподъёмная задача?
edem
23.Февраль.2023 10:37:18
21
Komandir:
Ху…ня ?
да, а если пропустить через UART получится - ‘2’