Consulta estoy testeando la comunicación serial en mi arduino, arme el código y lo subí al ATMEGA, al utilizar monitor serie de del IDE de arduino puedo prender y apagar 2 leds. Es decir que el código funciona OK.
El problema surge cuando quiero realizar la comunicación con C#. Cuando veo el arduino apretó algún botón para prender o apagar un led desde la aplicación en C# enciende el led RX del arduino como si estuviera recibiendo la orden pero no enciende el led.
¿Alguna idea de que puede ser?
Una observación: No tengo fuente externa, es decir alimento con USB. Para un par de leds no creo que afecte.
Por las dudas dejo el código pero no tiene nada raro es bastante sencillo.
Código
using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; namespace SerialArduino { public partial class Form1 : Form { SerialPort mySerial; public Form1() { InitializeComponent(); init(); } private void init() { try { // if (mySerial.IsOpen == false) // { mySerial.BaudRate = 9600; mySerial.PortName = "COM3"; mySerial.Open(); // } } catch (Exception) { MessageBox.Show("Error"); } button1.Enabled = true; button2.Enabled = false; button3.Enabled = true; button4.Enabled = false; } private void button1_Click(object sender, EventArgs e) { try { mySerial.Write("led1"); mySerial.Write("on"); button1.Enabled = false; button2.Enabled = true; } catch (Exception) { MessageBox.Show("Error"); } } private void button2_Click(object sender, EventArgs e) { try { mySerial.Write("led1"); mySerial.Write("off"); button1.Enabled = true; button2.Enabled = false; } catch (Exception) { MessageBox.Show("Error"); } } private void button3_Click(object sender, EventArgs e) { try { mySerial.Write("led2"); mySerial.Write("on"); string var = mySerial.ReadLine(); MessageBox.Show(var); button3.Enabled = false; button4.Enabled = true; } catch (Exception) { MessageBox.Show("Error"); } } private void button4_Click(object sender, EventArgs e) { try { mySerial.Write("led2"); mySerial.Write("off"); button3.Enabled = true; button4.Enabled = false; } catch (Exception) { MessageBox.Show("Error"); } } } }
El código de arduino
Código
int led1 = 2; int led2 = 3; //int led3 = 4; String selectedLed; String selectedStatus; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); // pinMode(led3, OUTPUT); } void loop() { selectedLed = ""; selectedStatus = ""; // put your main code here, to run repeatedly: while(Serial.available()==0){ } selectedLed = Serial.readString(); while(Serial.available()==0){ } selectedStatus = Serial.readString(); Serial.println(selectedLed); Serial.print(selectedStatus); if (selectedLed == "led1") { if (selectedStatus == "on") { digitalWrite(led1,HIGH); } else { if(selectedStatus == "off") { digitalWrite(led1,LOW); } } } else { if(selectedLed == "led2") { if (selectedStatus == "on") { digitalWrite(led2,HIGH); } else { if(selectedStatus == "off") { digitalWrite(led2,LOW); } } } } }