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;
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;
serialPort1.BaudRate = 9600;
serialPort1.DataBits = 8;
serialPort1.StopBits = StopBits.One;
serialPort1.Parity = Parity.None;
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();
string data = "";
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";
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;
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";
string strconn = "Data Source=127.0.0.1;Initial Catalog =Temp_DB_2;User ID=sa; Password=1234";
using(SqlConnection connection = new SqlConnection(strconn))
{
connection.Open();
using(SqlCommand command = new SqlCommand(selectSQL, connection))
{
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
listBox2.Items.Add(reader["DATE"]+ " " + reader["Temp_data"]);
}
}
connection.Close();
}
}
private void button2_CLS_Click(object sender, EventArgs e)
{
listBox2.Items.Clear();
}
private void button4_CDS_Click(object sender, EventArgs e)
{
string selectSQL = "SELECT DATE,CDS_data,status FROM CDS_table";
string strconn = "Data Source=127.0.0.1;Initial Catalog =CDS_DB;User ID=sa; Password=1234";
using (SqlConnection connection = new SqlConnection(strconn))
{
connection.Open();
using (SqlCommand command = new SqlCommand(selectSQL, connection))
{
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
listBox3.Items.Add(reader[0] + " " + reader[1] + " " + reader[2]);
}
}
connection.Close();
}
}
private void button3_CDS_CLS_Click(object sender, EventArgs e)
{
listBox3.Items.Clear();
}
}
}
#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() {
DDRB = 0b00000011;
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);
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);
break;
case '2':
PORTB |= 1<<PB0;
break;
case '3':
PORTB &= ~(1<<PB1);
break;
case '4':
PORTB |= 1<<PB1;
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);
}
}