Pyserial с Arduino и TKinter не откроет мой графический интерфейс - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь подсчитать число оборотов двигателя в Arduino с помощью IRsensor и использовать Python для построения моего графического интерфейса, где он должен отображать значение оборотов, которое дает arduino, и вводить значение, которое изменяет скорость этого двигателя. Моя первая проблема заключается в том, что графический интерфейс не открывается, я всегда получаю одну и ту же ошибку:

could not open port 'COM3': PermissionError(13, 'Access is denied.', None, 5)

, а другая проблема - как показывать значение из RPM в графическом интерфейсе Python. Другими словами, мне нужно продолжать читать и отправлять значения из python в arduino, но я довольно новичок в python, поэтому я не могу этого сделать.

Arduino

float rev = 0;
unsigned int rpm;
int oldtime = 0;
int time;
int rpmd = 0;
int PWM = 6;
int spd = 0;

void isr() //interrupt service routine
{
  rev++;
}

void setup()
{
  Serial.begin(9600);
  attachInterrupt(digitalPinToInterrupt(2), isr, FALLING);
  pinMode(PWM, OUTPUT);
  //Serial.println("Send a value between 1 and 255");
}

void loop()
{

if (Serial.available() > 1) {
      spd =  Serial.parseInt();
      //Serial.print("Set Speed to: ");
      //Serial.println(spd);
      analogWrite(PWM, spd);
     // Serial.println("done!");
  }

  delay(1000);
  detachInterrupt(digitalPinToInterrupt(2));           //detaches the interrupt
  time = millis() - oldtime;    //finds the time
  rpm = (rev / time) * 60000;   //calculates rpm
  oldtime = millis();           //saves the current time
  rev = 0;
    Serial.println(rpm);

  attachInterrupt(digitalPinToInterrupt(2), isr, FALLING);
}

Python

import numpy as np
from scipy import signal as sp
from tkinter import *
import matplotlib
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
from matplotlib import pyplot as plt

import serial
import time

# RAIZ
R = Tk()
R.title('Arduino-Python')
R.configure(background='grey63', padx=10, pady=10)
# R.state('zoomed')

# LABELS O ETIQUETAS
L1 = Label(R, text="Valor RPM Deseado (10k MAX)")
L1.configure(background = 'white',width=25)
L1.grid(row=0, column=0, padx=(100, 100), pady=(100, 100),)

L2 = Label(R, text="RPM")
L2.configure(background = 'white',width=17)
L2.grid(row=1, column=0, padx=(100, 100), pady=(100, 100),)

L3 = Label(R, text="?")
L3.configure(background = 'grey63',width=17)
L3.grid(row=1, column=1, padx=(100, 100), pady=(100, 100),)

# CAJAS DE TEXTO
EF = Entry(R)
EF.configure(background = 'white',width=25)
EF.grid(row=0, column=1, padx=(100, 100), pady=(100, 100))
EF.config(width=10)

E2 = Entry(R)
E2.configure(background = 'white',width=25)
E2.grid(row=0, column=1, padx=(100, 100), pady=(100, 100))
E2.config(width=10)

def Comm():
    global EF
    arduino = serial.Serial('COM3', 9600)
    #L3.config(text= ":D")
    arduino.write(str(EF))
    arduino.close() 


# BOTON ACEPTAR
btn = Button(R, text="Set Speed", command=Comm, width=25)
#btn = Button(R, text="Set Speed", command=R.destroy, width=25)
btn.grid(row=0, column=3, padx=(100, 100), pady=(100, 100))

arduino = serial.Serial('COM3', 9600)
rawString = arduino.readline().decode("utf-8").strip('\n').strip('\r')
# print(rawString)
L3.config(text= rawString)

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