簡體   English   中英

如何獲得python IDLE / GUI與mbed板通信?

[英]How do I get python IDLE/ GUI communicating with mbed board?

我需要一個與mbed(LPC1768)板通信的python GUI。 我可以將字符串從mbed板發送到python的IDLE,但是當我嘗試將值發送回mbed板時,它無法按預期工作。

我編寫了一個非常基本的程序,在該程序中,我從mbed板上讀取了一個字符串並將其打印在Python的IDLE上。 然后,程序應要求用戶鍵入一個值,該值應發送到mbed板。

該值應設置LED閃爍之間的時間。

python代碼

import serial

ser = serial.Serial('COM8', 9600)

try:
    ser.open()
except:
    print("Port already open")

out= ser.readline()                    

#while(1):

print(out)


time=input("Enter a time: " )
print (time)

ser.write(time.encode())


ser.close()

和mbed c ++代碼

#include "mbed.h"

//DigitalOut myled(LED1);
DigitalOut one(LED1);
DigitalOut two(LED2);
DigitalOut three(LED3);
DigitalOut four(LED4);

Serial pc(USBTX, USBRX);

float c = 0.2;


int main() {
    while(1) {

        pc.printf("Hello World!\n");
        one = 1;
        wait(c);
        two=1;
        one = 0;
        wait(c);
        two=0;
        c = float(pc.getc());
        three=1;
        wait(c);
        three=0;
        four=1;
        wait(c);
        four=0;     
    }
}

該程序等待在IDLE中輸入該值並將其發送到mbed板,然后開始使用發送給它的值,但突然停止工作,我無法弄清原因。

您需要采取這一行:

c = float(pc.getc());

走出循環。

您的程序停止工作的原因是該行一直保持到您再次發送東西為止。 如果您僅發送一次,它將永遠等待。

如果要在程序進入while循環后動態設置等待時間,建議將回調函數附加到串行RX中斷。

RawSerial pc(USBTX, USBRX);

void callback() {
    c = float(pc.getc());
}

Serial使用互斥鎖,不能在mbed OS5的ISR中使用。 請改用RawSerial

int main() {

    pc.attach(&callback, Serial::RxIrq);

    while(1) {
        // your code for LED flashing
        // no need to call pc.getc() in here
        one = 1;
        wait(c);
        one = 0;
        wait(c);
    }
}

這樣,LED會繼續閃爍,並且只要mbed接收到值,您就可以更新c

另外,您似乎正在發送ASCII字符。 ASCII 1是十進制的49 因此,當您發送'1'時, pc.get()返回49 我認為那不是你想要的。 如果您總是發送一個數字( pc.getc() - 48 ),則簡單的解決方法是pc.getc() - 48 但是您最好將string解析為int並在python端進行錯誤處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM