이번 프로젝트는 와이파이쉴드로 웹사이트 구동후 휴대폰 블루투스를 통해서 번호를 아두이노에 보내어서 그 값에 따라
웹사이트 상에 글자를 출력하고 모터를 돌려지는 프로그램을을 작성 중 에 있습니다.
1번은 그냥 글자이고, 2번은 음악과 글자가 뜨게 하고있습니다.(3번은 무시하시면 됩니다.)
그런데. 휴대폰 블루투수르 번호를 전송하면 20~30초 정도 시간 경과 후에 웹사이트에 나옵니다.
휴대폰으로 번호를 전송해서 바로 웹사이트로 글자를 뜨게 하는 방법은 욕심인건가요?? 소스 한 번 봐주시고 조언 좀 부탁드리겠습니다^^
=============================================================================
#include <avr/pgmspace.h>
#include <Servo.h>
#include <SoftwareSerial.h>
#include <SPI.h>
#include <WiFi.h>
char ssid[] = "SungSu"; // 연결하실 와이파이 SSID
char pass[] = "12345678"; // 네트워크 보안키
int status = WL_IDLE_STATUS;
WiFiServer server(80); // 80포트를 사용하는 웹서버 선언
Servo myservo;
SoftwareSerial BTSerial(2, 3); // SoftwareSerial
byte buffer[1024]; // 데이터를 수신 받을 버퍼
int bufferPosition; // 버퍼에 데이타를 저장할 때 기록할 위치
void setup()
{
myservo.attach(6); // servo motor 6번 핀 설정
myservo.write(10); // 초기각도
BTSerial.begin(9600);
Serial.begin(9600);
if (WiFi.status() == WL_NO_SHIELD) // 현재 아두이노에 연결된 실드를 확인
{
while (true){
;
} // 와이파이 실드가 아닐 경우 계속 대기
}
// 와이파이에 연결 시도
while ( status != WL_CONNECTED) // 연결될 때까지 반복
{
status = WiFi.begin(ssid, pass); // WPA/WPA2 연결
}
server.begin();
printWifiStatus(); // 연결 성공시 연결된 네트워크 정보를 출력
}
void loop()
{
WiFiClient client = server.available(); // 들어오는 클라이언트를 수신한다.
if (client) // 클라이언트를 수신 시
{
boolean currentLineIsBlank = true;
if (BTSerial.available()) // 블루투스로 데이터 수신
{
while (client.connected ())
{
if (client.available())
{
char c = client.read();
// 문자의 끝을 입력 받으면 http 요청이 종료되고, 답신을 보낼 수 있습니다.
if (c == '\n' && currentLineIsBlank)
{
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println(F("Connection: close"));
client.println(F("Refresh: 4")); // 3.5초당 페이지 refresh
client.println();
client.println(F("<!DOCTYPE HTML>"));
client.println(F("<meta charset=utf-8/>"));
client.print(F("<meta name=view content=width=device-width, "));
client.println(F("initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no />"));
client.println(F("<html><body style=background-color:white>"));
client.println(F("<div data-role=content>"));
client.println(F("<br>"));
client.print(F("<font color=\"Black\"> <h1>경남 경찰서<h1>"));
client.println(F("</div>"));
client.println(F("</body>"));
client.println(F("</html>"));
byte data = BTSerial.read();
buffer[bufferPosition++] = data;// 블루투스에서 받아온 값을 byte data에 저장
Serial.println(data);
if(data == '1') // 스위치가 닫혀있는 상태(누른 상태)
{
client.print(F("<font color=\"Black\"> <h1>EB전자은행 이상없음<h1>"));
myservo.write(10); // 10도, 초기각도
delay(10);
myservo.write(180); // 180도
delay(5000);
myservo.write(10);
}
if(data == '2') // 스위치가 닫혀있는 상태(누른 상태)
{
client.println(F("<embed src=\"http://blogattach.naver.com/cd58d162722b29f5db3c5c6f50bdc6be1643b25ced/20150519_254_blogfile/byh2674_1432025738008_B2YE7S_mp3/%B1%E4%B1%DE%BB%F3%C8%B2.mp3?type=attachment\">"));
client.print(F("<font color=\"Red\"> <h1>EB전자은행 긴급상황 발생<h1>" ));
myservo.write(10); // 10도, 초기각도
delay(10);
myservo.write(180); // 180도
delay(5000);
myservo.write(10);
}
if(data == '3') // 스위치가 닫혀있는 상태(누른 상태)
{
client.print(F("<font color=\"Black\"> <h1>EB전자은행 이상없음<h1>"));
}
break;
}
if (c == '\n')
{
currentLineIsBlank = true;
}
else if (c != '\r')
{
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
}
}
}
void printWifiStatus() // 연결된 네트워크 정보 출력
{
IPAddress ip = WiFi.localIP();
Serial.println(ip); // 네트워크 ip 출력
}
|