Я бы хотел отправить данные с python do arduino для управления двигателями через реле. Идея состоит в том, чтобы отправить номер, чтобы идентифицировать двигатель и значение, чтобы, наконец, переместить его. К сожалению, я борюсь с некоторыми проблемами. Данные теряются.pyserial communication with arduino (для управления двигателем)
Итак, в этом минимальном примере есть идентификатор «n», чтобы указать, что принятые данные являются переменной «число» и идентификатором «c», чтобы идентифицировать, что полученные данные являются счетчиком. Чтобы узнать, в чем дело, я отправляю данные обратно на Python и пытаюсь его прочитать. Это настройка работает только для первых символов. Все другие данные теряются.
Может кто-нибудь дать мне подсказку? Необходимы ли эти идентификаторы? Должен ли я устанавливать некоторую задержку(), или, возможно, другую скорость baut?
Я думаю, что это что-то о втором идентификаторе. Настройка работает нормально, если я только работаю с «счетчиком», например.
спасибо, что заблаговременно!
Pyhton:
import serial
import time
Port = "/dev/cu.usbserial-A601FZBL"
ser = serial.Serial(Port,9600,timeout=1)
time.sleep(1)
counter = 0
def Test(counter):
ser.write(b"n")
ser.write(str(1).encode())
print("number:", 1)
get = ser.readline().decode()
print("get:", get)
ser.write(b"c")
ser.write(str(counter).encode())
print("counter:", counter)
get = ser.readline().decode()
print("get:", get)
print()
while True:
Test(counter)
counter += 1
Arduino:
void setup() {
Serial.begin(9600);
}
int number;
int counter;
void loop() {
if (Serial.available() > 0) {
if (Serial.peek() == 'n') {
Serial.read();
number = Serial.parseInt();
Serial.println(number);
if (Serial.peek() == 'c') {
Serial.read();
counter = Serial.parseInt();
Serial.println(counter);
}
while (Serial.available() > 0) {
Serial.read();
}
}
}
}
Извините! Вот мой пример перспектива: (я запутался, почему существует дополнительная пустая-линия, рядом с печатью() на выходе)
number: 1
get: 1
counter: 0
get:
number: 1
get:
counter: 1
get:
number: 1
get:
counter: 2
get:
number: 1
get:
counter: 3
get:
number: 1
get:
counter: 4
get:
number: 1
get:
counter: 5
Где проходит ваш образец? – SamB
Спасибо SamB, просто добавил. –
Я думаю, вам нужно поставить условные обозначения * внутри * цикла while? – SamB