Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#串行端口can';无法从Arduino Micro接收_C#_Arduino_Serial Port - Fatal编程技术网

C#串行端口can';无法从Arduino Micro接收

C#串行端口can';无法从Arduino Micro接收,c#,arduino,serial-port,C#,Arduino,Serial Port,尝试在.NET Framework 4.6.1串行端口和Arduino Micro之间通信时,我可以成功地向Micro发送字节,但无法接收。尝试回声测试时,Arduino接收工作(并且RX亮起),但TX失败-未发送字节或错误。我已经尽可能地精简了代码,其中Arduino只需每秒写入一个字符,而C#app只在循环中读取,但没有接收到字节。Micro TX指示灯不亮,Serial.write调用返回0。我已经打开/关闭了我能找到的各种流量控制/握手设置,没有任何区别。确认奇偶校验/停止位等。我可以在

尝试在.NET Framework 4.6.1串行端口和Arduino Micro之间通信时,我可以成功地向Micro发送字节,但无法接收。尝试回声测试时,Arduino接收工作(并且RX亮起),但TX失败-未发送字节或错误。我已经尽可能地精简了代码,其中Arduino只需每秒写入一个字符,而C#app只在循环中读取,但没有接收到字节。Micro TX指示灯不亮,Serial.write调用返回0。我已经打开/关闭了我能找到的各种流量控制/握手设置,没有任何区别。确认奇偶校验/停止位等。我可以在我的测试应用程序和RealTerm之间来回切换,RealTerm一切正常,关闭它并启动C#SerialPort应用程序和nada。SerialPort如何可能使此失败

C# 阿杜伊诺 请尝试启用并:

编辑


根据gregsmi的说法,它通过启用DTR或RTS来工作

您是否确保将DtrEnable和RtsEnable都设置为true?在您的C#code中,我建议您全局创建
SerialPort
对象,然后使用按钮
open
close
您的端口。我还想订阅
DataReceived事件
,让程序陷入无休止的while循环是不好的做法@PaulF谢谢-任何一个都有效!不知道为什么…这是有效的!如果DtrEnable或RtsEnable设置为true,则实际有效…@gregsmi感谢您的反馈。对不起,我记不清了——有一段时间了,Duino不使用这些信号。没有正确初始化SerialPort,然后发现一些随机的东西似乎可以解决问题,这是一个令人讨厌的问题。它可能会回来。握手是最典型的问题,当从未分配时,它确实是随机的。“对于Arduino,它必须是无的。”汉斯·帕桑,你能为Arduino发布没有DTS/RTS的工作代码吗?遗憾的是,我没有任何Arduino陪伴我去测试它——是的,握手必须设置为“无”,但这样你根本无法阅读Arduino的内容。@HansPassant,你能澄清你所说的“Arduino不使用这些信号”是什么意思吗?以上我的经验表明,至少Arduino Micro在某种程度上依赖于它们,事实上,它不会发送其他信息。请注意,我在过去肯定为其他不关心这些信号的Arduino(到期?)模型编写过-否则我以前会遇到这个问题。。。
class Program
{
    static void Main(string[] args)
    {
        readPacket();
    }

    private static void readPacket()
    {
        var spd_Port = new SerialPort("COM4", 115200);
        spd_Port.ErrorReceived += Spd_Port_ErrorReceived;
        spd_Port.Open();

        while (true)
        {
            while (spd_Port.BytesToRead > 0)
            {
                Console.WriteLine(spd_Port.ReadChar());
            }
            Thread.Sleep(10);
        }
    }

    private static void Spd_Port_ErrorReceived(Object sender, SerialErrorReceivedEventArgs e)
    {
        Console.WriteLine(e);
    }
}
void setup()
{
    // set all pins as inputs (except serial pins)
    init_pins();

    pinMode(ARD_LED, OUTPUT);
    digitalWrite(ARD_LED, HIGH);

    // Configure serial port
    Serial.begin(115200);
}

int i = 0;
void loop()
{
    int j = Serial.write(0x24);
    if (j)
    {
        digitalWrite(ARD_LED, i == 0 ? HIGH : LOW);
        i = (i + 1) % 2;
    }

    delay(1000);
}
_serialPort.DtrEnable = true;
_serialPort.RtsEnable = true;