Arduino mega 2560 и RS485
- Войдите на сайт для отправки комментариев
Ср, 29/07/2015 - 12:03
Добрый день!
Помогите разобраться что не так...
Есть счетчик гейгера, работает через rs485. Купил модуль ttl to rs485 "C25B" и хочу на arduino mega получать данные с этого счетчика. Вот как я это подключил:А вот скетч:
#define SerialTxControl 10 //RS485 управляющий контакт на arduino pin 10
#define RS485Transmit HIGH
#define RS485Receive LOW
char bufferss[100];
byte numbers[] = {85, 170, 03};
void setup(void) {
Serial.begin(9600);
Serial1.begin(9600);
pinMode(SerialTxControl, OUTPUT);
pinMode(13, OUTPUT);
}
void loop(void) {
digitalWrite(SerialTxControl, RS485Transmit);
delay(100);
for (int i = 0; i < 3; i++){
Serial1.write(byte(numbers[i]));
}
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
digitalWrite(SerialTxControl, RS485Receive); // читаем данные с порта
int i = 0;
if (Serial1.available()) {
Serial.println("Serial1.available");
//delay(700);
while ( Serial1.available() && i < 99)
{
bufferss[i++] = Serial1.read();
}
bufferss[i++] = '\0';
}
delay(200);
if (i > 0) {
Serial.write(bufferss); // Выводим что приняли с других устройств
}
delay(1000);
}
Второй день борюсь с этим, помогите пожалуйста!
Сорри)
Ранее писал прогу(виндовс форм), для этого же счетчика и знаю что отправлять нужно 3 байта а в ответ должно приходить 10. В данном случае ничего не приходит...
А сейчас хочется сделать так, чтобы ответ от счетчика отображать на дисплее.
Может я что-то не так объяснил? ответьте плз!
Сказал "пиши", так не жди, а диктуй. Продиктовал, сразу говори, чтобы слушал. За 0,1 секунды можно дохрена чего сделать.
Каст в 17 строке нахрен не нужен.
Спасибо! Завтра буду пробовать
Добрый день!
Вот осциллограмма сигнала:
Вот скетч:
На осциллографе (слева) видно мой запрос, а справа ответ от датчика. В дуне не срабатывает Serial1.available.. я так понимаю, что проблема в уровне сигналов?
Теперь принимаю только 4 байта... добился этого за счет delay(3);. Но мне надо 10 байт)
Понял в чем проблема!
На дуню я должен получать "55 AA 13 49 00 00 00 0B 00 67" - 10 байт (протестил через usb to rs485)
А получаю я строку такого вида "55 AA 13 49 0B 67" - 6 байт.... В скетче пропадают "00"
55 AA 13 49 00 00 00 0B 00 67
Как в скетче учитывать "00"?
0x00 - это конец строки. Делай Serial.print в HEX сразу после получения.
Так эти строки могу иметь значение, если я буду так делать, то я буду разрывать пакет данных.
Или я что-то не так понял?
Есть мнение, что Serial1.available() не реагирует на 0x00.
Спасибо!) Я разобрался. Помог Serial.readString(), он считал всю строку