The Arduino sketch can be loaded on an external Arduino board (Mega 2560) and the C# program on the LP-CPU, and it works fine. My problem is communicating with the onboard Arduino (Leonardo). More specifically, have the string received by the Arduino, i.e. if I put code in the Arduino to continually send the string to the LP-CPU, it is received and displayed by the C# program.
I can zip up the entire project if it is needed but I am listing the code below in hopes that someone will spot what I am doing wrong!
Arduino sketch:
Code: Select all
//******* MACROS *******
#define set(xpin) (digitalWrite(xpin, HIGH))
#define clr(xpin) (digitalWrite(xpin, LOW))
//******* GLOBAL VARIABLES *******
String inputString;
boolean stringComplete = false;
//******* PIN DEFINITIONS *******
int LED = 13;
//-----------------------------------------------
void flashLED(int t)
//-----------------------------------------------
{
set(LED);
delay(t);
clr(LED);
}
//-----------------------------------------------
void serialEvent()
//-----------------------------------------------
{
while (Serial.available())
{
char inChar = (char)Serial.read();
if (inChar == '\n')
{
stringComplete = true;
return;
}
inputString += inChar;
}
}
//-----------------------------------------------
void setup()
//-----------------------------------------------
{
int i;
pinMode(LED, OUTPUT);
Serial.begin(115200);
while (!Serial)
{
delay(1);
if (i++ > 1500)
break;
}
inputString.reserve(64);
inputString = "";
for (i = 0; i < 5; i++)
{
set(LED);
delay(150);
clr(LED);
delay(150);
}
}
//-----------------------------------------------
void loop()
//-----------------------------------------------
{
if (stringComplete)
{
Serial.print("Echo: |" + inputString + "|\n");
inputString = "";
stringComplete = false;
flashLED(10);
}
}
- Available serial port combo box
COM port open button
Single line Textbox for the string to send to the Arduino
Send button
Multiline Textbox to display the echoed strings
Code: Select all
using System;
using System.IO.Ports;
using System.Windows.Forms;
namespace LPSerialTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
string[] ports = SerialPort.GetPortNames();
PortCB.Items.AddRange(ports);
}
//-------------------------------------------------------
private bool SendMsg(string str)
//-------------------------------------------------------
{
if (COMPort.IsOpen)
{
COMPort.WriteLine(str);
return (true);
}
else
{
MessageBox.Show("ERROR: COM Port is not open");
return (false);
}
}
//-------------------------------------------------------
private delegate void processValueDelegate(string value);
private void COMPort_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
//-------------------------------------------------------
{
SerialPort sp = (SerialPort)sender;
string value = sp.ReadLine();
processValue(value);
}
//-------------------------------------------------------
private void processValue(string value)
//-------------------------------------------------------
{
if (this.InvokeRequired)
{
this.BeginInvoke(new processValueDelegate(processValue), new object[] { value });
}
else
recBox.Text += value +"\r\n";
}
//-------------------------------------------------------
private void sendBtn_Click(object sender, EventArgs e)
//-------------------------------------------------------
{
SendMsg(sendBox.Text);
}
//-------------------------------------------------------
private void OpenBtn_Click(object sender, EventArgs e)
//-------------------------------------------------------
{
try
{
if (COMPort.IsOpen)
{
COMPort.Close();
}
COMPort.PortName = PortCB.Text;
COMPort.Open();
if (COMPort.IsOpen)
{
COMPort.DtrEnable = true;
OpenBtn.Enabled = false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "There is a problem opening the COM Port", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}