PDA

View Full Version : نحوه ارسال کاراکتر مشخص کننده Enter توسط پورت سریال



amin_a_y
سه شنبه 24 آبان 1390, 23:24 عصر
سلام دوستان خسته نباشید
ببخشید من پطور می تمنم کاراکتر اینتر رو با پورت سریال بفرستم ("n\") این رو امتحان کردم نشد!
ممنون می شم جواب بدین..!

Amir Oveisi
سه شنبه 24 آبان 1390, 23:38 عصر
به جای n\ از r\n\‌ استفاده کنید.

amin_a_y
پنج شنبه 26 آبان 1390, 15:22 عصر
سلام دوستان
امیدوارم دنیا به کامتون باشه!:قلب:
من یه مشکله دیگه برام پیش اومد:گریه:
من چطور میتونم پورت سریال بعد از ارسال یک رشته دوباره کامل تمیزش کنم؟


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Control_Car
{
public partial class ControlCar : Form
{
public ControlCar()
{
InitializeComponent();
}
private void Control(char chrControl)
{
serialPort1.Write(chrControl+"\r\n");
serialPort1.WriteLine(string.Empty);
}

private void btnForword_Click(object sender, EventArgs e)
{
char chrForword = 'w';
Control(chrForword);

}

private void btnBack_Click(object sender, EventArgs e)
{
char chrBack = 's';
Control(chrBack);
}

private void btnLeft_Click(object sender, EventArgs e)
{
char chrLeft ='a';
Control(chrLeft);
}

private void btnRight_Click(object sender, EventArgs e)
{
char chrRight = 'd';
Control(chrRight);
}

private void btnOpen_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen == true)
serialPort1.Close();
serialPort1.BaudRate = 9600;
serialPort1.DataBits = 8;
serialPort1.PortName = "COM1";
serialPort1.Open();
}

private void btnClose_Click(object sender, EventArgs e)
{
serialPort1.Close();
}
}
}

Amir Oveisi
پنج شنبه 26 آبان 1390, 20:09 عصر
منظورتون از تمیز کردن چی هست؟‌ مشکلتون چی هست؟

amin_a_y
پنج شنبه 26 آبان 1390, 20:21 عصر
ممنون از جوابتون
ببنید من می خوام دو موتور DC رو با C# کنترل می کنم...!
حالا من با میکروکنترل بخش درایورشه نوشتم و با هایبر ترمینال درست کار میکنه یعنی وقتی کارکتر "w" رو با یه اینتر می فرستم موتور حرکت میکنه...!
ولی مشکل اینجاست که وقتی من همین کارو با C# انجام میدم مینویسم "w\r\n" و این برای بار اول درست کار میکنه ولی برای بار دوم و سوم و... دیگه کار نمیکنه...!
وقتی خروجی پورت سریال رو نگاه کردم با میکروکنترل دیدم یه کارکتر اضافه نیز در ارسال دوم به اول رشته اضافه شده کارکتر شبیه "|||" این.حالا به نظرتون این میتونه از چی باشه؟

Amir Oveisi
پنج شنبه 26 آبان 1390, 20:45 عصر
به جای اینکه یک بار write کنید و بعد writeline فقط از Writeline استفاده کنید. قبلش هم serialport.NewLine‌ رو با "\r\n" مقدار دهی کنید. این کار مشخص می کنه که در دستور writeline و readline چه کاراکتری آخر خط رو نشون میده.
تست کنید ببینید چه نتیجه ای میگیرید

amin_a_y
پنج شنبه 26 آبان 1390, 21:09 عصر
ممنون ولی کد رو امتحان کردم نشد!:گریه:

serialPort1.NewLine = "\r\n";
serialPort1.WriteLine(chrControl+"\r\n"+string.Empty);
فرق write با writeline چیه؟
ممنون

Amir Oveisi
پنج شنبه 26 آبان 1390, 22:00 عصر
WriteLine بعد از Write کردن buffer اون stream ای رو که داده ها از طریق اون ارسال میشند Flush میکنه.

اون string.Empty رو چرا همیشه قرار میدید اون ته؟‌ دلیل خاصی داره کارتون؟

amin_a_y
پنج شنبه 26 آبان 1390, 22:04 عصر
ممنون!!!!
بخاطر اینکه شاید یه string خالی پاکش کنه!
البته شما استادید!
بدون اون هم امتحان کردم فرقی نمکنه!
Flush یعنی پاک میکنه؟
راهه دیگه به نظرتون نمیرسه؟