rfid to serial to socket to rasp(python)
- Войдите на сайт для отправки комментариев
Втр, 20/08/2019 - 14:27
Привет, Помогите пожалста. Есть скрипт который собирает данные rfid метки и отправляет на serial(arduino + rfid rc522), есть скрипт на питоне в малине который должен принять код метки, помогие соеденить через сеть. Когда считываю serial и пытаюсь отправить через socket получаю первый число метки:
#include <Ethernet.h> #include <SPI.h> char ser; byte mac[] = { 0xBE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192, 168, 0, 178 }; byte server[] = { 192, 168, 0, 36 }; int tcp_port = 9999; EthernetClient client; void(* resetFunc) (void) = 0;//объявляем функцию reset с адресом 0 void setup() { Ethernet.begin(mac, ip); Serial.begin(9600); delay(500); if (client.connect(server, tcp_port)) { } else { resetFunc(); //вызываем reset } } void loop() { if (Serial.available()>0) { ser = Serial.read(); client.write(ser); // Send what is reed on serial monitor client.stop(); Serial.print(ser);delay(500); resetFunc(); //вызываем reset } }
Причем, если сделать такой вид:
Передается строка как надо!
resetFunc(); //вызываем reset
зачем ?
resetFunc(); //вызываем reset
зачем ?
Ведь вопрос не в этом......
Сначала соберите весь ID в строку/число, а потом только посылайте его.
Разве не очевидно, по какой причине на стороне raspberry получаете только один символ?
Дак ты первый символ метки и отправляешь. Один. А потом, ХРЯСЬ!!!, и Reset.
Ахха-ха))) Я вообще нуб в программировании но тоже это заметил. Смутили «умные слова про передачу данных» (не дорос я ещё до этого). И ресет вообще убил. Зачем ресет? Это где то описано в документации? (Интересно узнать)
Интересно узнать
а то )))
Да дело не в reset,
вот так тоже вся строка передается, проблема в том, client.write() считанное из Serial.read() не принимает.
Или как сделать переменную из Serial.read() в кавычках "value"?
Да ты идиот штоли? Так
client.write(
"врврвраврвра"
);
ты сразу всю строку передаешь, а так
client.write(
ser
);
только один (первый) считанный символ, потом отправляешь контроллер в перезагрузку, все буферы очищаются, больше ничего не передаеца.
тебе надо сначала собрать ВСЮ переданную СТРОКУ, а не один символ char, коим является ser, и передать уже ВСЮ СТРОКУ. Херли тут непонятного?
Канешна, ватьмашу, дело не в резет, а в (сам придумай)
Не зли меня...
Убрал перезагрузку, эффект тот же 1 символ
Если переменную делаю тип String то на client.write() выходит ошибка:
no matching function for call to 'EthernetClient::write(String&)'
Бросьте, это дело не ваше.
Если переменную делаю тип String то на client.write() выходит ошибка:
no matching function for call to 'EthernetClient::write(String&)'
мошт, так надо:
String YourVar;
.
.
.
client.write(YourVar.c_str());
Бросьте, это дело не ваше.
+100500
Убрал перезагрузку, эффект тот же 1 символ
Разберите построчно этот код
Что именно вы считываете по read(), что передаете, зачем после этого сразу stop() ? зачем делали reset (ну какая то мысль была же, пусть и ошибочная) ? зачем delay в конце ? вы там с бубном вокруг кода пляшите что ли ? ) как поймете каждую строчку (и нужна ли она) - может быть заработает
Если так делаю то, аруино пересылает в другой какой то системе например j это 10610, причем до малины дошло только 106.
поставлю-ка я вопрос по-другому, сколько символов может влесть в переменную char ser;?
}
А если еще не все прислали по Serial ?
эммм 1 алфавитно-цифровой
Тогда ждать..... других инструкций ж нет
То есть надо из алфавитно-цифрового кода метки сделать только цифровой код и его норм передать в INT?
в int такая же ерунда, т.е. надо передать как-то массив?
а если строку разбить посимвольно, и потом собрать на другом конце?
а если строку разбить посимвольно, и потом собрать на другом конце?
её надо сначала собрать из символов, которые ты читаешь как Serial.read(). Ты описание на нее читал? Сколько символов она аддаёт за 1 вызов?
shiyri - сколько символов у тебя в RFID? - 10 ? 16? - а ты принимаешь только один!
решение задачи - читать Сериал в цикле, дожидаясь, пока придут все символы, потом собрать в одну строку - и только после этого передавать.
Но только по твоим вопросам я вижу, что ты абсолютно деревянный (без обид). Тебе надо сесть и прочитать какую-то книжку по программированию, прорешать примеры - и только потом вернутся к этой задачке. А с нынесними твоими "знаниями" у тебя нет ни малейшего шанса решить задачу.
вот так работает, считывает.
вот так зависает в порт валиться абра-кадабра бесконечно.
что это вообще? Как первое "считывает", если это оператор print?
Во втором случае зачем сначала снова первый вариант?
Вы чего вообще добиться-то хотите? вроде в предпоследнем сообщении я вам четко обьяснил. что надо делать. Это ваше решение не имеет ничего общего с моими рекомендациями... или вы уже совсем о другом?
Правильно заданный вопрос - 80% ответа. Жалко, что правильно задать вопрос далеко не с первого раза получается. Или не получается вообще.
Вывод - это фигня, было бы чего выводить, а вот как вы buffer заполняете ?
оказалось просто:))))
оказалось просто:))))
Ну попробуй buffer из 7ми символов обработать...
охх...
оказалось просто:))))
Ну попробуй buffer из 7ми символов обработать...
дык у меня изначально 10 символов в метке, только они идут по два или три......
например: 3518216427
Так проканало с 7ю то или нет?
Так проканало с 7ю то или нет?
Я тебя не понимаю!
У меня на метках только такой код, как я его увеличу?
Да ну нафиг. Я же о последнем куске кода говорю. И конкретно про переменную buffer.
так?
получается :
3518216427000
а если 4 прохода if то
3518216427
no matching function for call to 'TwoWire::write(String&)'
у меня же переменная value в String изначально.....
а если 4 прохода if то
3518216427
Что еще за четыре прохода if? Откуда это все вообще?
no matching function for call to 'TwoWire::write(String&)'
у меня же переменная value в String изначально.....
На это уже дед отвечал в ЭТОЙ ЖЕ теме...
Пользуйся:
Почитай хотя бы эту книгу.
посыл по книге понял, поизучаю, вот так сделал, но отправляет по одному символу......
Нееее.... Сначала упорно изучать книгу, а потом делать. Ты же просто обрывки кода вставляешь куда попало даже не думая.
Причем я тебе готовую функцию дал, но ты ее даже не смотрел (или не понял что это вообще такое).
Пользуйся:
это ооооч сложно
Если такое сложно, то гоу учиццо, учиццо и еще раз учиццо!
Без знаний в программировании делать нечего.
А разделителя никакого нет, сплошняком цифры сыпет ? Как вариант ждать небольшой таймаут в качестве разделителя, а то прием N символов в общем то не гарантирует, что считана метка карты, а не 5 символов с одной карты и 2 со следующей.