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