JUST GO
[공통] 온도 모니터링 본문
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.Data.SqlClient; // MS-SQL DB 사용 네임스페이스 활성화
namespace RS232_CDS_11_11
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
COM_port.DataSource = SerialPort.GetPortNames(); // 사용할 통신포트 관련 변수들 불러오기
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void connect_Click(object sender, EventArgs e)
{
if (!serialPort1.IsOpen) // 시리얼포트가 열려 있지 않으면
{
serialPort1.PortName = COM_port.Text; // 콤보박스의 선택된 COM포트명을 시리얼포트명으로 지정
serialPort1.BaudRate = 9600; // 통신속도 9600[bps]설정
serialPort1.DataBits = 8; // 통신에서 사용하는 기본 data크기는 char형의 1byte(8비트)설정
serialPort1.StopBits = StopBits.One;
serialPort1.Parity = Parity.None; // Parity->오류체크 기능 사용안함(비동기방식 기본설정 값)
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); // 수신설정 활성화
serialPort1.Open(); // 시리얼포트 열기
connection_status.Text = "포트가 열렸습니다."; // 접속 상태 표시
connection_status.ForeColor = Color.Green; // 접속 상태 표시 글자색 지정
}
else // 시리얼포트가 열려 있으면
{
connection_status.Text = "포트가 이미 열려 있습니다.";
}
}
private void disconnect_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen) // 시리얼포트가 열려 있으면
{
serialPort1.Close(); // 시리얼포트 닫기
connection_status.Text = "포트가 닫혔습니다."; // 접속 상태 표시
connection_status.ForeColor = Color.Red; // 접속 상태 표시 글자색 지정
}
else // 시리얼포트가 닫혀 있으면
{
connection_status.Text = "포트가 이미 닫혀 있습니다.";
}
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
this.Invoke(new EventHandler(MySeialReceived)); // 수신설정 함수 연결
}
int temp_x = 0;
private void MySeialReceived(object sender, EventArgs e)
{
char Rec = (char)serialPort1.ReadByte(); // 시리얼 버퍼에 수신된 데이터를 ReceivedData 읽어 오기
string data = ""; // 수신된 data string str 객체에 문자열로 저장하기 위한 변수 선언 및 초기화
string[] dataArr = new string[] { };
switch (Rec)
{
case 'T':
{
while (true)
{
char Buff = (char)serialPort1.ReadByte();
if (Buff == 'E')
{
break;
}
data += Buff;
}
data = data.Replace("\n", "").Replace("\r", "");
dataArr = data.Split(',');
textBox1.Text = dataArr[0];
textBox1.ForeColor = Color.Green;
string strconn = "Data Source=127.0.0.1;Initial Catalog =Temp_DB_2;User ID=sa; Password=1234"; // DB접속정보
string insertSQL = string.Format("INSERT INTO Temp_table(date,Temp_data)VALUES('{0}','{1}')", DateTime.Now, dataArr[0]);
using (SqlConnection connection = new SqlConnection(strconn))
{
connection.Open();
using (SqlCommand command = new SqlCommand(insertSQL, connection))
{
command.ExecuteNonQuery(); // 데이터 추가 요청 함수 실행
}
connection.Close();
}
int max_x = 10; // 보여줄 X축 값 개수(viewport)
double values = double.Parse(dataArr[0]);
chart1.Series[0].Points.AddXY(temp_x,values);
//데이터 셋의 갯수가 윈도우 사이즈를 초과하면
if(chart1.Series[0].Points.Count > max_x) // 보여줄 갯 수보다 크면 첫 번째 데이터를 삭제
{
chart1.Series[0].Points.RemoveAt(0); // 첫번째 데이터를 삭제한다.
}
chart1.ChartAreas[0].AxisX.Maximum = temp_x;
chart1.ChartAreas[0].AxisX.Minimum = chart1.Series[0].Points[0].XValue;
double max = 0;
for(int i=0; i < chart1.Series[0].Points.Count; i++)
{
if(max < chart1.Series[0].Points[i].YValues[0])
{
max = chart1.Series[0].Points[i].YValues[0];
}
}
chart1.ChartAreas[0].AxisY.Maximum = max+5;
temp_x++;
}
break;
case 'C':
{
while (true)
{
char Buff = (char)serialPort1.ReadByte();
if (Buff == 'E')
{
break;
}
data += Buff;
}
data = data.Replace("\n", "").Replace("\r", "");
dataArr = data.Split(',');
label3.Text = dataArr[0];
label4.Text = (Int32.Parse(data) > 800 ? "가로등 ON" : "가로등 OFF");
label4.ForeColor = Int32.Parse(data) > 800 ? System.Drawing.Color.Green : Color.Red;
}
break;
case 'D':
{
while (true)
{
char Buff = (char)serialPort1.ReadByte();
if (Buff == 'E')
{
break;
}
data += Buff;
}
data = data.Replace("\n", "").Replace("\r", "");
label6.Text = data + "cm";
listBox1.Items.Add(DateTime.Now.ToString() + " " + "거리측정 출력");
}
break;
default:
break;
}
}
private void L1_Click(object sender, EventArgs e)
{
}
private void Button_Click(object sender, EventArgs e)
{
if (!serialPort1.IsOpen)
{
MessageBox.Show("포트가 열려있지 않습니다.");
return;
}
DateTime now = DateTime.Now;
Button btn = (Button)sender;
serialPort1.Write(btn.Name.Substring(1));
listBox1.Items.Add(now.ToString() + " " + btn.Text);
}
private void button1_Temp_Click(object sender, EventArgs e)
{
string selectSQL = "SELECT DATE,Temp_data FROM Temp_table"; // sql명령어 문자열로 만들어 변수에 저장
string strconn = "Data Source=127.0.0.1;Initial Catalog =Temp_DB_2;User ID=sa; Password=1234"; // DB접속정보
using(SqlConnection connection = new SqlConnection(strconn)) // DB연결객체 생성
{
connection.Open(); // DB연결 요청
using(SqlCommand command = new SqlCommand(selectSQL, connection)) //DB명령어 객체 생성
{
SqlDataReader reader = command.ExecuteReader(); //ExecuteReader()함수를 이용해서 reader객체 생성
while (reader.Read()) //Read()함수를 이용한 칼럼 정보 읽어 오기
{
listBox2.Items.Add(reader["DATE"]+ " " + reader["Temp_data"]);
}
}
connection.Close(); //DB 연결 해제
}
}
private void button2_CLS_Click(object sender, EventArgs e)
{
listBox2.Items.Clear(); // listBox 조회 화면 클리어
}
private void button4_CDS_Click(object sender, EventArgs e)
{
string selectSQL = "SELECT DATE,CDS_data,status FROM CDS_table"; // sql명령어 문자열로 만들어 변수에 저장
string strconn = "Data Source=127.0.0.1;Initial Catalog =CDS_DB;User ID=sa; Password=1234"; // DB접속정보
using (SqlConnection connection = new SqlConnection(strconn)) // DB연결객체 생성
{
connection.Open(); // DB연결 요청
using (SqlCommand command = new SqlCommand(selectSQL, connection))//DB명령어 객체 생성
{
SqlDataReader reader = command.ExecuteReader(); //ExecuteReader()함수를 이용해서 reader객체 생성
while (reader.Read()) //Read()함수를 이용한 칼럼 정보 읽어 오기
{
listBox3.Items.Add(reader[0] + " " + reader[1] + " " + reader[2]);
}
}
connection.Close(); //DB연결 해제
}
}
private void button3_CDS_CLS_Click(object sender, EventArgs e)
{
listBox3.Items.Clear(); // listBox3 조회 화면 클리어
}
}
}
#define PB0 0 // PB0 ->아두이노 8번핀
#define PB1 1 // PB1 ->아두이노 9번핀
float temperature;
int lm35Pin = A0;
int CDS = A1;
int LED = 2;
int trig_pin = 11;
int echo_pin = 12;
void setup() {
// analogReference(INTERNAL); // 기준전압 2.56[V] 참조
DDRB = 0b00000011; // PB0, PB1 출력모드 설정
pinMode(CDS, INPUT);
pinMode(LED,OUTPUT);
pinMode(trig_pin, OUTPUT);
pinMode(echo_pin, INPUT);
Serial.begin(9600);
}
void loop() {
int val = analogRead(A1); // 조도센서
long duration, distance; // 초음파 센서
int reading = analogRead(A0); // 온도센서
// Serial.println("val="+String(val)+" "+"reading="+String(reading));
float voltage = (reading*5.0)/1024; // 전압값 출력
float temperature = (float)(reading*5*100)/1024; // 전압값을 온도로 변경
if(Serial.available()){ // 수신 감지 되었을 때
char a = Serial.read();
switch(a){
case '1':
PORTB &= ~(1<<PB0); //아두이노 8번핀 HIGH
break;
case '2':
PORTB |= 1<<PB0; //아두이노 8번핀 LOW
break;
case '3':
PORTB &= ~(1<<PB1); //아두이노 9번핀 HIGH
break;
case '4':
PORTB |= 1<<PB1; //아두이노 9번핀 LOW
break;
case '5':
{
digitalWrite(trig_pin,HIGH);
delayMicroseconds(10);
digitalWrite(trig_pin,LOW);
duration = pulseIn(echo_pin,HIGH);
distance = ((float)(340 * duration) / 10000) / 2; //계산식
Serial.println("D"+String(distance)+"E");
}
break;
default:
break;
}
}
delay(1000);
Serial.println("T"+String(temperature)+"E");
Serial.println("C"+String(val)+"E");
if(val > 800)
{
digitalWrite(LED, 1);
}
else
{
digitalWrite(LED, 0);
}
}
'임베디드 > 학습내용' 카테고리의 다른 글
[공통] 임베디드-학습내용 정리 (0) | 2023.01.06 |
---|---|
[공통] C# & MSSQL 데이터 조회 (0) | 2022.12.02 |
[공통] SSMS (0) | 2022.12.02 |
[공통] 임베디드 (0) | 2022.11.18 |
[공통] 초음파 센서로 거리 측정해보기 (0) | 2022.11.18 |