작품활동을 위해 블루투스와 Wifi를 혼용하여 사용하고 있는데.
동적메모리가 99%라서 IP출력할 때 글자가 깨져서나옵니다.
아두이노 와이파이쉴드가 있는데 여기에 그냥 SD카드만 넣고 컴파일 돌려도 거기에 자동저장되는지 궁금합니다.
혹은 소스를 가지고 용량을 줄이는 다른 조언 좀 부탁드릴게요...
소스는 다음과 같습니다.
=====================================================
#include <Servo.h>
#include <SoftwareSerial.h>
#include <SPI.h>
#include <WiFi.h>
char ssid[] = "kimsu"; // 연결하실 와이파이 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("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 3.5"); // 3.5초당 페이지 refresh
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<meta charset=utf-8/>");
client.print("<meta name=view content=width=device-width, ");
client.println("initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no />");
client.println("<html><body style=background-color:white>");
client.println("<div data-role=content>");
client.println("<br>");
client.print("<font color=\"Black\"> <h1>경남 경찰서<h1>");
client.println("</div>");
client.println("</body>");
client.println("</html>");
byte data = BTSerial.read();
buffer[bufferPosition++] = data;
if(data == '1') // 스위치가 닫혀있는 상태(누른 상태)
{
myservo.write(10); // 10도, 초기각도
delay(10);
client.print("<font color=\"Black\"> <h1>EB전자은행 이상없음<h1>");
myservo.write(180); // 180도
delay(5000);
myservo.write(10);
}
if(data == '2') // 스위치가 닫혀있는 상태(누른 상태)
{
myservo.write(10); // 10도, 초기각도
delay(10);
client.print("<font color=\"Red\"> <h1>EB전자은행 긴급상황 발생<h1>" );
myservo.write(180); // 180도
delay(5000);
myservo.write(10);
}
if(data == '3') // 스위치가 닫혀있는 상태(누른 상태)
{
client.print("<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 출력
}
===========================================================
전역 변수는 (99%)의 동적 메모리중 2,034바이트를 사용, 14바이트의 지역변수가 남은. 최대는 2,048 바이트.
|