|
功能:
通过运行电脑上的代码,控制两个远程LED灯的开关。
硬件需求:
1、Arduino 控制板
2、ENC28J60 模块
3、220欧电阻2个
4、LED灯*2
5、连接线若干
电路:
1、ENC28J60模块与Arduino控制板接线
2、两个LED灯分别接在控件板7、8接口,各串联一个220欧电阻后接地。
Arduino服务端代码:
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network.
// gateway and subnet are optional:
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[]={192,168,2, 177};
// telnet defaults to port 23
Server server(23);
void setup() {
// initialize the ethernet device
Ethernet.begin(mac, ip);
// start listening for clients
server.begin();
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
Serial.begin(9600);
Serial.print("Chat server address:");
Serial.println("192.168.2.177");
}
void loop() {
// wait for a new client:
Client client = server.available();
if (client)
{
if (client.available() > 0)
{
// read the bytes incoming from the client:
char thisChar = client.read();
if(thisChar=='b')
{
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
}
else if(thisChar=='c')
{
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
}
else
{
digitalWrite(7, LOW);
digitalWrite(8, LOW);
}
Serial.println(thisChar);
client.flush(); //每次接收完数据后必须清除,不然会出错。
}
client.stop();
}
}
电脑控制端代码:
#include <winsock2.h>
#pragma comment(lib,"WS2_32")
#include <stdio.h>
//封装一个类,用于载入和释放Winsock库
class CInitSock
{
public:
CInitSock(BYTE minorVer=2,BYTE majorVer=2)
{
WSADATA wsaData;
WORD sockVersion=MAKEWORD(minorVer,majorVer);
if(::WSAStartup(sockVersion,&wsaData)!=0)
{
exit(0);
}
}
~CInitSock()
{
::WSACleanup();
}
};
CInitSock initSock;
int main()
{
char buff;
int chose;
printf("==================\n");
printf("||远程LED控制程序||\n");
printf("==================\n");
printf("输入1,一号灯亮。\n");
printf("输入2,二号灯亮。\n");
printf("输入3,两灯全灭。\n");
printf("输入其它,程序退出。\n");
printf("请输入一个字符:\n");
while(true)
{
SOCKET s=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s==INVALID_SOCKET)
{
printf("Failed socket()\n");
return 0;
}
sockaddr_in servAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_port=htons(23);
servAddr.sin_addr.S_un.S_addr=inet_addr("192.168.2.177");
if(::connect(s,(LPSOCKADDR)&servAddr,sizeof(servAddr))==-1)
{
printf("Failed connect()\n");
return 0;
}
chose=getchar();getchar();//接收选择字符和回车
if(chose=='1')
buff='b';
else if(chose=='2')
buff='c';
else if(chose=='3')
buff='a';
else
break;
int n_Send=::send(s,&buff,1,0);
::closesocket(s);
}
return 0;
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|