如何通过 arduino 代码关闭或重置?

Posted

技术标签:

【中文标题】如何通过 arduino 代码关闭或重置?【英文标题】:How do I close or reset via arduino code? 【发布时间】:2019-07-08 04:17:34 【问题描述】:

好吧,我想打印 arduino 中的数据,对吗?我已经尝试过使用 ser.close (),因为它在代码中并且它不起作用,当我重新启动 arduino 时,它是 printe,完成了按下 arduino 上的按钮的整个过程。我想知道如何重置或以其他方式关闭您启动代码的正确方式。

def getSerialData(self):

    lines=b''

    with serial.Serial('COM5',9600) as ser:      
        while (ser.inWaiting()<0): #Do while loop waiting for data 
            time.sleep(0.1)
        tempo = 20.0
        endtime=time.time()+tempo
        time.sleep(tempo-15.0)
        print("tempo")
        while (time.time()<endtime):
            print("entrou")
            time.sleep(0.1)
            line = ser.readline()
            #line = line.encode("utf-8")
            lines += line
            #lines += bytes(line, 'utf-8')
    ser.close()
    print("saiu")
    lin = lines.split()
    print(lin)

【问题讨论】:

您想通过 Python 脚本软重置您的 Arduino 板吗? 对了,你能帮帮我吗? 【参考方案1】:

您可以选择重置您的 arduino 硬件

使用 1 根线连接到 RESET 引脚

只使用软件

void(* resetFunc) (void) = 0;//在地址0声明复位函数 重置函数(); //调用重置

【讨论】:

【参考方案2】:

如果您想使用 Python 脚本控制您的 Arduino 板,您需要首先建立串行通信,然后创建一个简单的协议以将您的命令从 Python 脚本发送到 Arduino。对于 Arduino 中的重置部分,有一些 ways 可以做到这一点,我更喜欢使用看门狗超时。

Arduino 代码:

#include <avr/wdt.h>


void setup()

    MCUSR = 0;  // clear out any flags of prior resets.
    Serial.begin(9600);


// read a command from serial and do proper action
void read_command()

    String command;
    if (Serial.available())
    
        command = Serial.readString();
        Serial.print("Received Command: ");
        Serial.println(command);
        // do proper work with command
        if (command == "RST")
        
            Serial.println("Arduino is Reseting...");
            // reset board
            wdt_enable(WDTO_15MS); // turn on the WatchDog and don't stroke it.
            for(;;)  
            // do nothing and wait for the eventual...
             
        
    


void loop()

    // get new commands
    read_command();
    delay(1000);

Python 脚本:

import serial
from time import sleep


# remember to set this value to a proper serial port name
ser = serial.Serial('COM1', 9600)
ser.open()
# flush serial for unprocessed data
ser.flushInput()
while True:
   command = "RST"
   ser.write(command.encode())
   """
   # use below code if you want to take commands from user
   command = input("Enter your command: ")
   if command:
      command += "\r\n"
      ser.write(command.encode())
   """
   ser.flushInput()
   sleep(3)

【讨论】:

以上是关于如何通过 arduino 代码关闭或重置?的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 USB 向 Arduino 发送/接收数字来控制电机

通过 CDC COM 端口与 Arduino 进行 Windows COM 通信

Arduino开发板制作

Arduino独立

如何防止 Arduino 数字引脚在启动时变高?

arduino恢复出厂设置