수복이입니다.
C#으로 아두이노 제어하기 위해서는
C#에서 통신 신호를 보내면, 아두이노에서 받아 신호에 해당하는 액션을 취하는 것을 제어 방법으로 사용하는 것 같습니다.
또한 아두이노에서 신호를 보내 C#에서 받아서 C#에서도 특정 액션을 취할 수 있습니다.
즉 무궁무진하게 활용할 수 있습니다.
EX) 물리적 버튼 없이 컴퓨터 화면 버튼을 눌러서 아두이노 제어하기
많은 예제중, C#에서 "A" 라는 신호를 보낼 때 아두이노에서 "A"라는 신호를 받아들이면 그에대한 해당 액션을 취하는 예제가 많았습니다.
수복이는 조금 다르게 생각해서, C# 에서 아두이노 코딩처럼 사용하고 싶었습니다.
아직까진 INPUT 을 제어하는 방법을 생각하고 있는데, OUTPUT 및 PINMODE 설정까지 가능합니다.
즉 C#에서 아두이노 코딩인, digitalWrite(3,HIGH); pinMode(3,OUTPUT); 같이 C#에서 쓰면 실제로 작동하도록 하고 싶었습니다.
하지만 아두이노에 아예 코딩을 안하는건 힘들더라구요..
저는 NI-VISA 라이브러리로 아두이노 통신을 해봤습니다.
C#에서 VISA를 찾고, 아두이노 주소에 연결한 후 PIN 몇번으로 신호를 보내면(버튼 3 클릭)
신호는 "s1110", "a1110" 과 같이 아두이노에 보냅니다.
아두이노는 C#에서 신호를 줄 때 한글자씩 읽더라구요?
그래서 아두이노가 읽으면서 5자 까지 붙여서 한번에 읽도록 했습니다.
S 11 1 0 뜻은
S- SET (A는 액션입니다)
11- 11번핀
1- 출력핀 (0은 입력핀으로 설정)
0- 그냥넣었습니다.
이렇게 아두이노 코드처럼 사용할 수 있었습니다.
즉 C#에서 핀 몇번을 켜줘 !! 꺼줘 !! 라고 명령하면 가능한 시스템입니다.
아직 잘 모르고, 초보자라 이곳저곳 참고해서 만들었습니다. 여러 방법이 있지만, 저는 아두이노 용어에 친숙한지라 C#에서도 편하게 하고싶어서 이와같이 진행했습니다.
아래는 아두이노 코딩입니다.
아래는 C# 코딩입니다.
using Ivi.Visa;
using NationalInstruments.Visa;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Windows.Forms;
namespace Arduino_Community
{
public partial class Form1 : Form
{
String OUTPUT = "OUTPUT";
String INPUT = "INPUT";
class va
{
public static MessageBasedSession mbSession;
}
public Form1()
{
InitializeComponent();
}
private void signal(string s)
{
Application.DoEvents();
va.mbSession.RawIO.Write(s);
Application.DoEvents();
while (true)
{
try
{
Application.DoEvents();
textBox1.Text = va.mbSession.RawIO.ReadString();
}
catch { }
if (textBox1.Text != "")
{
DateTime currentTime = DateTime.Now;
string formattedTime = currentTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
Console.Write(textBox1.Text + formattedTime);
textBox1.Text = "";
break;
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
using (var rm = new ResourceManager())
{
try
{
IEnumerable<string> resources = rm.Find("?*");
foreach (string s in resources)
{
ParseResult parseResult = rm.Parse(s);
comboBox1.Items.Clear();
comboBox1.Items.Add(s);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
private void button1_Click(object sender, EventArgs e)
{
using (var rmSession = new ResourceManager())
{
try
{
va.mbSession = (MessageBasedSession)rmSession.Open(comboBox1.Text);
MessageBox.Show("연결 성공", "성공");
}
catch (InvalidCastException)
{
MessageBox.Show("연결하지 못하였습니다.","실패");
}
catch (Exception exp)
{
MessageBox.Show("연결하지 못하였습니다.", "실패");
}
finally
{
Cursor.Current = Cursors.Default;
}
}
}
private void button2_Click(object sender, EventArgs e)
{
using (var rm = new ResourceManager())
{
try
{
IEnumerable<string> resources = rm.Find("?*");
foreach (string s in resources)
{
ParseResult parseResult = rm.Parse(s);
comboBox1.Items.Clear();
comboBox1.Items.Add(s);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
private void PinMode(int x, String y) {
char zero = '0';
int z=0;
if (y == "OUTPUT")
{
z = 1;
}
if (y == "INPUT")
{
z = 0;
}
signal("s" + x.ToString().PadLeft(2, zero)+z.ToString()+"0");
}
private void digitalWrite(int x, int y)
{
char zero = '0';
signal("a" + x.ToString().PadLeft(2, zero) + y.ToString() + "0");
}
private void button3_Click(object sender, EventArgs e)
{
int pin = int.Parse(textBox2.Text);
PinMode(pin, OUTPUT);
digitalWrite(pin, 1);
Thread.Sleep(1000);
digitalWrite(pin, 0);
}
}
}
'C#' 카테고리의 다른 글
터치 스크린 컴퓨터에서 작동하는 화상 키보드 만들기 (0) | 2023.07.15 |
---|---|
파워포인트 사진 정렬 및 크기 변경 Tool (1) | 2023.06.27 |
문서작업 효율 개선 , 자동 캡쳐 프로그램 오토키 (AutoKey) (0) | 2023.06.27 |