Самый быстрый способ прочитать массив чисел из python
Я пытаюсь отправить массив чисел из Python в Arduino через последовательное соединение. Я могу надежно прочитать небольшой входящий набор чисел (например, 123435678) из python, который я могу затем проанализировать, поскольку я знаю, сколько цифр должно быть в каждом числе (например, 1, 23456, 78). Я делаю это с помощью своего кода Arduino:
void getInput() {
char buff[9];
int field1;
char field2[6];
char field3[3];
Serial.readBytes(buff, 8); //читаем 8 байт из последовательного порта
buff[9] = '\0'; // null завершает только что прочитанную строку
Serial.println(buff); //проверяем, что мы его получили
for(int i=0; i<buff_len;i++) { //теперь разделим строку на отдельные числа
if(i==0) {
field1 = buff[0] - 48; //превратить его в int, используя ASCII
}
if(i>=1 && i<6) {
field2[i-1] = buff[i];
field2[5] = '\0';
}
if(i>=6) {
field3[i-6]=buff[i];
field3[2] = '\0';
}
}
for(int i=0;i<buff_len;i++) { //очистить буфер
buff[i]=0;
}
}
Но если бы я хотел отправить целый массив, содержимое которого я не знаю заранее, например так:
for i in range(200):
ser.write(i)
Как лучше всего передать эти числа в Arduino и сохранить их в виде массива целых чисел? Должен ли я сначала создать массив в python как numpy.linspace()
и отправить его?
@janizer, 👍0
Обсуждение1 ответ
Лучший ответ:
Если вы не знаете длину данных, вам нужно отправлять маркеры начала и конца, чтобы ваш другой код мог указать, где начинается и заканчивается передача. Я обычно использую < и >, поэтому пакет данных может выглядеть как <12345678>. Вам не нужно использовать эти конкретные символы, просто выберите то, что, как вы знаете, не будет отображаться в ваших данных.
Да. Добавление новой строки в конце каждого еще более распространено и хорошо сочетается со многими традиционными вычислительными инструментами. Так как кажется, что в каждой записи есть несколько полей, также может помочь использование пробела или запятой между ними., @Chris Stratton
- Не удается связаться с ардуино с помощью python (Windows)
- Последовательная связь Arduino с Python: отправка массива
- Построение графика на Python с использованием Tkinter Canvas
- Как отправить целое число через pyserial с Python на Arduino и получить тот же результат?
- Сброс последовательного порта Arduino в последовательном мониторе и Python
- Отправка числа с плавающей запятой из python в arduino
- Serial Comm. проблема синхронизации между Arduino и Pyserial
- Печать массива с помощью функции печати и последовательной записи в Arduino Uno
Хотя это, вероятно, не единственная ваша проблема, вы вызываете *неопределенное поведение* при записи в 10-й элемент (индекс 9) 9-элементного
buff[9]
., @Chris Stratton