C# и Arduino
- Войдите на сайт для отправки комментариев
Чт, 25/10/2012 - 16:21
Visual Studio 2010 C# на читает с компорта сообщение дуины. Отправленые команды доходят на дуину. Но ето только в Visual Studio в родном компиляторе дуини все ок... проверял монитором порта - отправляет и получает. Кто может помогите с С#.
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// Открываем порт, и задаем скорость в 9600 бод
serialPort1.PortName = "COM9";
serialPort1.BaudRate = 9600;
serialPort1.Open();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// При закрытии программы, закрываем порт
if (serialPort1.IsOpen) serialPort1.Close();
}
private void button1_Click(object sender, EventArgs e)
{
// Передача данных из текстового поля в порт
serialPort1.Write(textBox1.Text);
// Прием данных и вывод его в окно программмы
textBox2.Text = serialPort1.ReadLine();
}
}
}
Сигнал по ком доходит до дуины, индикатор горит\тухнет.
Когда доходит до строки textBox2.Text = serialPort1.ReadLine(); програма замерает... ждет но ничего не приходит((( А должно прийти текстовое сообщение через ком помпорт с дуины.
Arduino:
int led = 12;
int inSize = 0;
char str[128];
void setup ()
{
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop()
{
inSize=0;
memset(str,'\0',128);
//Serial.println("Testing!!!");
if (Serial.available()>0)
{
inSize = Serial.available();
for (int i = 0; i < inSize; i++)
{
str[i] = Serial.read();
}
if (strcmp(str,"on") == 0)
{
Serial.println("111");
digitalWrite(led, HIGH);
}
else if (strcmp(str,"off") == 0)
{
delay(1000);
Serial.println("Led is OFF");
digitalWrite(led, LOW);
}
else if (strcmp(str, "hello") == 0)
{
Serial.println("Hello! My name is Arduin!");
}
else
{
Serial.println("Error command!");
}
}
}
Встроеним монитором портов проверил... команда доходит до дуины и ответ приходит с ком порта) Но на VS C# не приходит ответ! Помогите.
Если розкоментировать строку //Serial.println("Testing!!!"); в скетче то иногда проскакивает сообщение! Как мне с етим бороться???
Добавление строк в private void button1_Click решило проблему
serialPort1.RtsEnable = false;
serialPort1.DtrEnable = true;
и вместо textBox2.Text = serialPort1.ReadLine();
использовать
textBox2.Text = serialPort1.ReadExisting();
но почему ReadLine(); не работает?
и вместо textBox2.Text = serialPort1.ReadLine();
использовать
textBox2.Text = serialPort1.ReadExisting();
но почему ReadLine(); не работает?
Не претендую на глубокое знание С#, но может просто символа окончания строки нет
Вот и ReadLine заработал:
// Открываем порт, и задаем скорость в 9600 бод
serialPort1.PortName = "COM9";
serialPort1.BaudRate = 9600;
serialPort1.DtrEnable = true; //в описание порта нужно било добавить
serialPort1.Open();
Полний код на Visual C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public String c;
public Form1()
{
InitializeComponent();
// Открываем порт, и задаем скорость в 9600 бод
serialPort1.PortName = "COM9";
serialPort1.BaudRate = 9600;
serialPort1.DtrEnable = true;
serialPort1.Open();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// При закрытии программы, закрываем порт
if (serialPort1.IsOpen) serialPort1.Close();
}
private void button1_Click(object sender, EventArgs e)
{
// Передача данных из текстового поля в порт
serialPort1.Write(textBox1.Text);
c = serialPort1.ReadExisting();
// Прием данных и вывод его в окно программмы
textBox2.Text = c;
textBox3.Text = serialPort1.ReadLine();
}
}
}
Обратите пожалуйста внимание на тему, раскрывающую магию вставки программного кода в комментарии.
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Как в С#
Структуру
запихнуть в serialPort1.Write
Преобразовать структуру в массив байт. И передать массив.
Т.е. как то так https://kojt.wordpress.com/2010/12/06/структуры-в-c-запись-и-чтение-бинарных/#more-73