python定义电机类,机器人类

该文展示了PyQt5中信号和槽的概念,用于实现对象间的通信,例如Motor类中的start_motor_signal和input_signal。此外,文中还涉及到二进制数组的操作,以及如何创建可拖动的GUI控件。同时,定义了一个Robort类,模拟了机器人抓取货物的过程,基于传感器信号执行不同步骤。
摘要由CSDN通过智能技术生成
from PyQt5.QtCore import QObject,pyqtSignal
from connect import *


class Motor(QObject):
    start_motor_signal=pyqtSignal(int,bool)
    input_signal=pyqtSignal(int,int,int)
    def __init__(self,*args,**kwargs):
        super(Motor, self).__init__(*args,**kwargs)
        self.is_on=None
        self.running = None
        self.error = None
        self.input_signal.connect(self.get_input_singals)

    def get_input_singals(self,is_on:int,running:int,eror:int)->None:#合闸,运行,故障
        self.is_on=is_on
        self.running=running
        self.error=eror

    def start_stop_mortor(self,addr:int,val:bool):
        if self.running:
            return
        self.start_motor_signal.emit(addr,val)


if __name__=='__main__':
    def run_motor(addr,data):
        if data==True:
            print(f'{addr}-motor is running')
        else:
            print(f'{addr}-mortor in stopping')
    mortor1=Motor()
    mortor1.start_motor_signal.connect(run_motor)
    mortor1.input_signal.emit(1,0,1)

    # print(mortor1.is_on)
    # print(mortor1.running)
    # print(mortor1.error)

    import time
    import random
    while True:
        a=random.randint(1,10)
        b=random.randint(0,1)
        mortor1.start_stop_mortor(MOTOR_6,b)
        time.sleep(1)
二维数组
from connect import WORD

def bin_array(word:int):
    data=bin(word)[2:].zfill(16)[::-1]
    re_data=data[::-1]
    return re_data


def two_array(data:int):
    list_array = [[None for j in range(4)] for i  in range(4)]
    bin_array=bin(data)[2:].zfill(16)[::-1]
    n=0
    for i in range(1,5):
        for j in range(1,5):
            bit=bin_array[n]
            list_array[i-1][j-1]=int(bit)
            n+=1
    return list_array

if __name__=='__main__':
    s=two_array(5)
    print(s)

    # b=bin_array(8)
    # print(b)
    # print(b[0])
    # print(b[0])
    # print(b[0])
    # print(b[3])
    print(bin(32768))
    print(bin(27468))

控件移动

from PyQt5.QtWidgets import QWidget, QCheckBox, QPushButton, QApplication, QLabel
from PyQt5.QtGui import QMouseEvent
from PyQt5.QtCore import Qt, QPoint

def draggable(widget: QWidget, movable: bool):
    """给控件添加拖动功能

    Args:
        widget: 需要拖动的控件
        movable: 是否可拖动
    """
    if movable:
        widget.setMouseTracking(True)
        widget.setCursor(Qt.OpenHandCursor)
    else:
        widget.setMouseTracking(False)
        widget.setCursor(Qt.ArrowCursor)

    def mousePressEvent(event: QMouseEvent):
        if event.button() == Qt.LeftButton:
            widget.setCursor(Qt.ClosedHandCursor)
            widget.offset = event.pos()

    def mouseMoveEvent(event: QMouseEvent):
        if event.buttons() == Qt.LeftButton:
            widget.move(widget.pos() + event.pos() - widget.offset)

    def mouseReleaseEvent(event: QMouseEvent):
        widget.setCursor(Qt.OpenHandCursor)


    widget.mousePressEvent = mousePressEvent
    widget.mouseMoveEvent = mouseMoveEvent
    widget.mouseReleaseEvent = mouseReleaseEvent




if __name__ == '__main__':
    import sys
    app=QApplication(sys.argv)

    widget = QWidget()
    widget.resize(800,760)
    checkbox = QCheckBox('允许拖动', widget)
    checkbox.move(10, 10)
    draggable(checkbox, True)

    button = QPushButton('按钮', widget)
    button.move(50, 50)
    button.setFixedSize(50, 30)
    draggable(button, True)

    label = QLabel(widget)
    label.resize(150,150)
    label.setStyleSheet('background-color:cyan;')
    draggable(label,True)


    widget.show()

机器提取货物


#货物到位传感器




class Robort:

    def __init__(self):
        self.hand_out :bool=None
        self.hand_out_end :bool=None
        self.hand_back:bool = None
        self.hand_back_end:bool =None
        self.hand:bool =None
        self.hand_end:bool =None
        self.hand_open:bool =None
        self.hand_open_end:bool = None
        self.step:int = 0
        self.good_signal:bool = None

    def start(self,data=[None,None,None,None,None])->None:
        #[1,1,1,1,1]
        self.good_signal=data[0]
        self.hand_out_end = data[1]
        self.hand_back_end = data[2]
        self.hand_end = data[3]
        self.hand_open_end = data[4]

        if self.good_signal:
            if self.step == 0:
                self.hand_out=1
                print('self.hand_out',self.hand_out)
                if self.hand_out_end:
                    self.hand_out=0
                    self.step=1
                    print('self.hand_out', self.hand_out)


            elif self.step ==1:
                self.hand=1
                print('self.hand',self.hand)

                if self.hand_end:
                    self.hand=0
                    self.step=2
                    print('self.hand', self.hand)

            elif self.step==2:
                self.hand_back=1
                print('self.hand_back',self.hand_back)

                if self.hand_back_end:
                    self.hand_back=0
                    self.step=0
                    print('self.hand_back', self.hand_back)







if __name__=='__main__':
    import time
    r=Robort()
    while True:
        r.start([1,1,0,1,1])
        time.sleep(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值