-1

我目前正在开发一个硬件电子应用程序,我希望能够使用 USB 电缆轻松切换我的电路。我想做的就是拥有一个 arduino 或其他设备,我可以将其插入任何计算机,运行一个小型应用程序并将一根电线切换到 5v。这对于许多小型应用程序来说非常实用。

问题:

-我想要一个可以插入任何计算机并使用小型应用程序切换 5v 线来控制电子设备的小型设备。我该怎么做呢?

4

2 回答 2

0

如果您的 MCU 没有 USB 前端,您可以使用汇编程序,例如。http://www.cesko.host.sk/IgorPlugUSB/IgorPlug-USB%20%28AVR%29_eng.htm这允许实现简单的USB1.1低速设备。如果您需要高速,您的 MCU 应该内置 USB 引擎,然后您可能会从 MCU 制造商那里找到适用于 USB 的应用说明。

让我们注意这取决于您需要或不编写自己的驱动程序的设备类。您可以使用 HID、串行或 CDCACM 类。最后你可以只使用 FTDI 的桥接芯片http://www.ftdichip.com/

于 2013-07-31T22:07:47.330 回答
0

我这里有一些代码。我使用一个简单的晶体管IRFU5305,我将一根引线连接到 arduino 的一个引脚,另外 2 根连接到 USB 的电源线。

根据您使用的是 n 沟道晶体管还是 p 沟道晶体管,您可能需要调整代码。

Arduino代码:

String inputString = "";         // a string to hold incoming data
boolean stringComplete = false;  // whether the string is complete

void setup() 
{                
  pinMode(8, OUTPUT);
  Serial.begin(9600);
  // reserve 20 bytes for the inputString (input is max 20 chars long)
  inputString.reserve(20);
  Serial.print("waitingforinput");
  digitalWrite(8,true);
}

void loop() 
{
  if (stringComplete) 
  {
    Serial.println(inputString);
    inputString.trim();
    if(inputString=="F8")    
    {
      digitalWrite(8,true);
    }
    else if(inputString=="T8")
    {
      digitalWrite(8,false);
    }
    inputString = "";
    stringComplete = false;
  }
  delay(500);
}

void serialEvent() 
{
  while (Serial.available()) 
  {
    Serial.println("inputreceived");
    char inChar = (char)Serial.read();
    inputString += inChar;
    // if the incoming character is a newline, set a flag
    // so the main loop can do something about it:
    if (inChar == '\n') 
    {
      stringComplete = true;
      Serial.println(inputString);
    }    
  }
}

Python代码:

import serial
import time
import os

ARDUINOPORT = os.getenv('ARDUINOPORT', None)

def send_string_to_arduino(cmd):
    """sends a certain command string to the arduino over Serial"""
    print ARDUINOPORT
    ser = serial.Serial()
    ser.port = ARDUINOPORT
    ser.baudrate = 9600
    ser.parity = serial.PARITY_NONE
    ser.bytesize = serial.EIGHTBITS
    ser.stopbits = serial.STOPBITS_ONE
    ser.timeout = 10
    ser.xonxoff = False
    ser.rtscts = False
    ser.dsrdtr = False
    ser.open()
    time.sleep(2)
    ser.readline()
    ser.write(cmd+"\n")
    ser.close()

def switch_pin_on(pinnumber):
    """switches the pin with pinnumber(int) of the connected Arduino on"""
    cmd = "T"+str(pinnumber)
    print cmd
    send_string_to_arduino(cmd)
    return

def switch_pin_off(pinnumber):
    """switches the pin with pinnumber(int) of the connected Arduino off"""
    cmd = "F"+str(pinnumber)
    print cmd
    send_string_to_arduino(cmd)
    return

def set_arduino_port(comport):
    """sets to which comport the arduino is connected to, comport should be a string ("COM2")"""
    global ARDUINOPORT
    ARDUINOPORT = comport
    return

if __name__ == '__main__':
    set_arduino_port("COM17")
    switch_pin_off(8)
    switch_pin_on(8)
于 2013-08-02T08:08:24.313 回答