앉아있는 프래그래머

C# 아두이노 RS232 시리얼통신 아두이노값을 C#에서 받기 본문

프로그래밍/C#,ALT-8RSD-12V - RS232 시리얼 통신

C# 아두이노 RS232 시리얼통신 아두이노값을 C#에서 받기

맛있는 단무지! 2018. 7. 18. 15:27

아두이노도 ALT-8RSD와 같은 Serialport 연결을 사용하면 된다.


다른점은 빨간색으로 표시해뒀으니 비교


아두이노 코드

//====================================================================================================

const int buttonPin1 = 2;
const int chattering = 1000; 
  

void setup() {
  Serial.begin(9600);
  pinMode(buttonPin1, INPUT);

}

void loop() {

  if (digitalRead(buttonPin1) == LOW) {
      Serial.println("1");
      delay(chattering);
      }
   }


코드에대해서 간단히 설명하자면 아두이노 DigitalPin 2번에 스위치를 만들어주고 Serial.begin(9600) 9600bps로 C#과 서로 동일하게 만들어준다. 그리고 button을 눌렸을때 digitalRead 말그대로 데이터를 읽는다. 만약 그것이 LOW(눌려졌다)경우

Serial.println("1"); 값을 시리얼통신으로 전달..


Serial.println("1"); -> 밑에 C#코드  Adruino_DataReceived 로 전달


참고  딜레이를 만든 이유


채터링

전자 회로 내의 스위치 접점이 닫히거나 열리는 순간에 기계적인 진동에 의해
매우 짧은 시간안에 스위치가 붙었다가 떨어지는 것을 반복하는 현상


이 반복 현상으로 인해서 나는 한번 눌렸어도 무수한 데이터가 보내 질수가 있다.

그래서 값에 delay를 주어 Chattering방지를 만들어 준것이다. 




C# 코드

//====================================================================================================

using.System.IO.Ports;


class serialport{


SerialPort port = new SerialPort();


//=======================================================================================================

      private void button_Click(object sender, EventArgs e)
        {  


      if(port.IsOpen == false){

         port = new SerialPort("COM4", 9600);
                port.Encoding = Encoding.Default;
                port.Parity = Parity.None;
                port.DataBits = 8;
                port.StopBits = StopBits.One;
                port.DataReceived += new SerialDataReceivedEventHandler(Adruino_DataReceived);
                port.Open();

        }else{

                port.Close();

        }


//=======================================================================================================

       private void Adruino_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {

            SerialPort myport = (SerialPort)sender;        //sender는 보내는 사람으로서 아두이노의 내용이라고 생각하면 된다.
            string s = myport.ReadExisting();                //s 에 myport의 내용을 넣는다.

            

값 처리 예시

            int n =Convert.ToInt16(s);

           

            switch(n){

                    case 2: textBox1.Text = "1이 전송되었습니다.";  break;

                    case 2: textBox1.Text = "2가 전송되었습니다.";  break;

                    case 2: textBox1.Text = "3이 전송되었습니다.";  break;

                          }

        }

}

 

Comments