Как сформировать пакет?
- Войдите на сайт для отправки комментариев
Пт, 08/03/2013 - 15:02
Привет всем форумчаном помогите пожалуйста в написании кода.
Суть кода такова , если приходит пакет с сериал порта
подобного типа
#4 символов # 20 символов # 35 символов #
то мы подставляем другой пакет сформированный в if (val в хвост первого пакета
#4 символов # 20 символов # 35 символов # #open#
и отправляем весь пакет в сериал
Вот код попытки сформирования пакета, подскажите пожалуйста как его сформировать
byte val = 0, val2 = 0, prev_val = 0 int fadeValue = 0; void setup(){ } void loop(){ digitalWrite(loadPin, 0); digitalWrite(loadPin, 1); val = SiftIn8bit(dataPin, clockPin); // читаем 8в входов 165 val2 = SiftIn8bit(dataPin, clockPin); if (val == B00000001 && val2 == B00000000) // Если первый бит 1 то { Формируем пакет (open) // #open# } if (val == B00000011 && val2 == B00000000) // Если первый бит 11 то { Формируем пакет (closed); // #closed# } } byte SiftIn8bit(byte dataPin, byte clockPin){ byte in8bit = 0; for(int i = 0; i < 8; i++){ // читаем по 8в digitalWrite(clockPin, 0); if(digitalRead(dataPin)) in8bit |= 1<<i; else in8bit &= ~(1<<i); digitalWrite(clockPin, 1); } return in8bit; }
А этот код должен читает то что приходит из сериал и подставлять хвост к первому пакету.
Тут у меня несколько проблем он не может прочитать символ # да и подставляет он сформированный пакет с переда
String slovo; boolean read_end = 0; void setup() { Serial.begin(9600); } void loop() { if(Serial.available()) { delay(2); slovo += (char)Serial.read(); read_end = 1; } else if(read_end) { if(slovo.substring(0,3) == "#123#123#123#") // Если с сериал приходит пакет # # # # то мы подставляем хвост #closed# к пакетуи отпровляем в сериал { Serial.print("#closed#") ; } if(slovo.substring(0,3) == "#123#123#123#") // Если с сериал приходит пакет # # # # то мы подставляем хвост #closed# к пакету и отпровляем в сериал { Serial.println("#closed#"); } Serial.println(slovo); read_end = 0; slovo = ""; } }
Помогите пожалуйста новичку
Куда делась вкладка редактировать?
В названия темы ошибочка небольшая не сформируем, а как сформировать?
По нормальному обьясните что хотите.
Привет извиняюсь что так объясняю сейчас попытаюсь более подробней объяснить
Есть устройство которое посылает пакеты в формате NEX в мадам через TX
#15D23#5255637735R26252RRRW#552431526WWTFX763#
Я подключаю ардуино в цепь, то есть беру сигнал с устройства TX и подключаю в ардуино RX и соответственно TX с ардуино идeт в модем RX
Суть кода такова когда приходит пакет выше указного формата к ним нужно цеплять хвост #open# каторый формируется в ардуино с кнопак
И отправлять в RX на модем
Данные которые приходят с устройства постоянна меняются,
Не меняется только количество знаков
#4 символов # 20 символов # 35 символов #
Я так думаю что мы создаём переменную Val для считывания данных
И катко нужно создать формулу
Если приходит пакет в катарам находится знаки # и между ними определённое количество символов то мы к этому пакету привязываем хвост сформированный в ардуино #open# и отравляем этот пакет в сборе дальше в сериал.
Данные которые приходят с устройства постоянна меняются,
Не меняется только количество знаков
#4 символов # 20 символов # 35 символов #
Вот вы наконец-то сделали формальное представление поступающего пакета.
Теперь попробуйте изобразить, как выглядит отправляемый пакет.
PS: А. нашел. Отправляемый пакет выглядит вот так:
#4 символов # 20 символов # 35 символов # #open#
Теперь вопрос: если пришел пакет #15D23#5255637735R26252RRRW#552431526WWTFX763#, то отправляемый пакет должен выглядеть как #15D23#5255637735R26252RRRW#552431526WWTFX763# #open#.
Лучше друг под дружкой:
#15D23#5255637735R26252RRRW#552431526WWTFX763#
#15D23#5255637735R26252RRRW#552431526WWTFX763# #open#
Так или все же иначе?
И бога ради - не начинайте снова о рисунке обоев в вашей комнате. Обрисуйте только суть вопроса.
Еще вопрос: входящий пакет вы сами формируете или получаете из какого-либо чужого устройства?
Другими словами - может этот пакет выглядеть не так:
#15D23#5255637735R26252RRRW#552431526WWTFX763# а, например, так:
<15D23#5255637735R26252RRRW#552431526WWTFX763>
Входящий пакет с чужого устройства он выглядит именно так, но содержимое между # я не стал точно переписывать поскольку оно постоянно меняется
#15D23#5255637735R26252RRRW#552431526WWTFX763#
не меняется только количество знаков между #
А исходящий пакет с ардуино должен быть с привязкой
#15D23#5255637735R26252RRRW#552431526WWTFX763# #open#
Хотя хвост у пакета который отправляется можно сделать и таким
#15D23#5255637735R26252RRRW#552431526WWTFX763#open#
Входящий пакет с чужого устройства он выглядит именно так, но содержимое между # я не стал точно переписывать поскольку оно постоянно меняется
Никому - и программе в том числе - неинтересно, меняется или не меняется поступающая от внешнего устройства информация. В рамках постановки задачи, которая с трудом начинает освобождаться от ненужных подробностей, всем - и программе в том числе - важно знать, как модифицируется поступающая информация.
Я правильно понял:
1) поступивший пакет никак не изменяется, просто к нему привязывается хвост #open# (ну или open#)
2) поступающий пакет формируете не вы, поэтому влияния на него оказать не можете и он будет начинаться и кончаться именно знаками #
Ответьте на эти вопросы четко - "да" или "нет".
В этом коде хвост подставляется к приходящему пакету нооо
Если он такой же по содержанию, а нужно чтобы содержания не имело значении
1) поступивший пакет никак не изменяется, просто к нему привязывается хвост #open# (ну или open#)
ДА
2) поступающий пакет формируете не вы, поэтому влияния на него оказать не можете и он будет начинаться и кончаться именно знаками #
ДА
Тут вроде бы часть кода работает
Но когда я пытаюсь прописать ещё одну сквозную команду то происходит вот что
То получается такая ерунда
а если так
Сейчас попробую
Попробовал не компилируется 18 строка
А если ковычки заменить на одиночные
вместо slovo.charAt(1) ==
"#" поставить
slovo.charAt(1) == '
#' и т.д.
Поменял компил проходит но программа не работает
Отправляю в сериал AT возвращается тоже самое
Отправляю в сериал #123#123#123# нечего не приходит
а так
Я вот так сделал сейчас теперь текст #123#123#123#
отправляется но хвост не подставляется
Сейчас попробую
Так отправляется в серил но тоже хвост не подставляется
Отправляем: #15D23#5255637735R26252RRRW#552431526WWTFX763# ,
получаем: #15D23#5255637735R26252RRRW#552431526WWTFX763#open#
тоже вначале думал буфер пробегать, но потом решил раз есть .charAt, использовать его, но блин почемуто не работает
open# дописывается любой входящей строке, в которой присутствуют четыре шарпа(#), другие строки возвращаются как есть.
а почему бы не испоьзовать функцию
проверяя сколько в destination знаков "#"? потом же легче работать,если пакет нужно куда то передать..
Конкретно в данном случае это бессмысленно.
Зачем константу перезаписывать в буфер и выводить, если можно просто сразу вывести эту константу не записывая в буфер.
Всё заработало большое спасибо
Теперь осталось разобраться с формированием хвоста
Не могу сообразить как сохранить open# в slovo что бы его прочитать в Serial
всё равно не понял
Подскажите как сохранения сделать?
Чего та не получается
А вот так заработало
А так?
Чего та не получается
не получаеться,потому что я забыл добавить ";" в конце строчки.а вы наверняка не исправили.
bit, так скажите, вы все также используете объект класса String.slovo или все таки массив символов char slovo[] ?
Сейчас подождите чего та я тут опять напутал
Сейчас допишу код целиком и выложу
Вот код вроде всё работает так как нужно
Если в сериал приходит пакет в # то к нему цепляется хвост сформированный в зависимости от нажатой кнопки и оправляется в сериал
Спасибо большое тем кто помогал