Перемещение сервопривода с python Arduino - PullRequest
1 голос
/ 19 апреля 2020

Здесь я пытаюсь управлять моим сервоприводом sg90 с помощью ползунка GUI, созданного с помощью Tkinter, и отправлять текущее значение ползунка в Arduino через последовательный порт. Теперь проблема заключается в том, что когда я говорю, я перемещаю ползунок с 72 на 77 быстро, значение, которое он показывает на последовательном мониторе, равно 7374757677.

здесь есть код python:

from tkinter import *

screen = Tk()
screen.geometry("400x400")

#some commands for arduino
import serial
uno = serial.Serial('/dev/ttyACM0', 9600)

def servocontrol(var):
    uno.write(str(servo.get()).encode())

#defining the widget
servo = Scale(screen, from_=0, to=180, orient=HORIZONTAL, command=servocontrol)

#packing the widget
servo.pack()

#running the loop
screen.mainloop()

и вот код Arduino:

#include <Servo.h>

Servo myservo;
String pypos;

int pos = 0;

void setup()
{
  myservo.attach(9);
  Serial.begin(9600);
}

void loop()
{
  if(Serial.available() > 0) {
    pypos = Serial.readString();
    Serial.println("Angle: " + pypos);
    Serial.println('\n');
    int pyposint = pypos.toInt();
    myservo.write(pyposint);
    Serial.flush();
    delay(15);
  }  
}

теперь посмотрите на вывод,

enter image description here

Понятия не имею что не так. было бы очень полезно, если бы кто-нибудь мог мне помочь.

1 Ответ

1 голос
/ 19 апреля 2020

Я нашел исправление, если кто-то также ищет ответ на этот вопрос, вот что я сделал,

Вместо того, чтобы отправлять данные в виде строки путем кодирования, я отправлял данные как целое число в байтах формат.

uno.write(bytes([var]))

После этого все работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...