[Timer] [Ethenet]
- Timer ㄴ 타이머 구조 개선 ㄴ 타이머 인터럽트 내 로직 제거, 플래그 삽입 (시리얼통신 등 제거를 위해) - Ethernet ㄴ 이더넷 통신을 위한 독립 스케치 생성 - 기타 ㄴ 통신관련 모듈에서 CR LF (\r \n) 프로토콜 삽입main
parent
06967ceb60
commit
320d2cee1a
@ -0,0 +1,100 @@
|
|||||||
|
//
|
||||||
|
void Ethernet_setup(){
|
||||||
|
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x00 };
|
||||||
|
IPAddress ip(192, 168, 20, 177);
|
||||||
|
IPAddress gateway(192, 168, 20, 1);
|
||||||
|
IPAddress subnet(255, 255, 255, 0);
|
||||||
|
|
||||||
|
// Mac as unique value by change last byte from ip last value.
|
||||||
|
mac[5] = ip[3] & 0xFF;
|
||||||
|
// initialize the ethernet device
|
||||||
|
Ethernet.begin(mac, ip, gateway, subnet);
|
||||||
|
// start listening for clients
|
||||||
|
server.begin();
|
||||||
|
web.begin();
|
||||||
|
|
||||||
|
// Report address
|
||||||
|
Serial.print("MAC>>");
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
if (mac[i] < 16) {
|
||||||
|
Serial.print("0");
|
||||||
|
}
|
||||||
|
Serial.print(mac[i], HEX);
|
||||||
|
if (i < 5) {
|
||||||
|
Serial.print(":");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Serial.println();
|
||||||
|
Serial.print("IP >>");
|
||||||
|
Serial.println(Ethernet.localIP());
|
||||||
|
}
|
||||||
|
|
||||||
|
void webReponse(){
|
||||||
|
EthernetClient webClient = web.available();
|
||||||
|
if (webClient) {
|
||||||
|
Serial.println("Web client connected");
|
||||||
|
while (webClient.connected()) {
|
||||||
|
if (webClient.available()) {
|
||||||
|
// 웹 브라우저에서 요청이 도착한 경우
|
||||||
|
String request = webClient.readStringUntil('\r');
|
||||||
|
//Serial.println(request);
|
||||||
|
webClient.flush();
|
||||||
|
|
||||||
|
// 웹 브라우저에 출력할 문구 작성
|
||||||
|
String response = "HTTP/1.1 200 OK\r\n";
|
||||||
|
response += "Content-Type: text/html\r\n\r\n";
|
||||||
|
response += "<html><body>";
|
||||||
|
response += Prcss_AI();
|
||||||
|
//response += "<h1>Hello, World!</h1>";
|
||||||
|
response += "</body></html>";
|
||||||
|
|
||||||
|
// 문구를 웹 브라우저로 전송
|
||||||
|
webClient.print(response);
|
||||||
|
delay(1);
|
||||||
|
|
||||||
|
// 클라이언트 연결 종료
|
||||||
|
webClient.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
String demuxCMD(String command, String* rightPart) {
|
||||||
|
|
||||||
|
// "::"를 기준으로 문자열을 분리
|
||||||
|
int separatorIndex = command.indexOf("::");
|
||||||
|
String leftPart = command.substring(0, separatorIndex);
|
||||||
|
*rightPart = command.substring(separatorIndex + 2);
|
||||||
|
|
||||||
|
leftPart.replace(" ", "");
|
||||||
|
return leftPart;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int demuxNum(String rightPart, unsigned int data[]) {
|
||||||
|
|
||||||
|
// 우측의 16진수 배열을 분리하여 추출
|
||||||
|
const char* delimiter = ",";
|
||||||
|
int startIndex = 0;
|
||||||
|
int endIndex = rightPart.indexOf(delimiter);
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
|
while (endIndex >= 0) {
|
||||||
|
String hexValue = rightPart.substring(startIndex, endIndex);
|
||||||
|
// 16진수 문자열을 16진수 숫자로 변환하여 data 배열에 저장
|
||||||
|
data[index] = strtoul(hexValue.c_str(), NULL, 16);
|
||||||
|
index++;
|
||||||
|
|
||||||
|
startIndex = endIndex + 1;
|
||||||
|
endIndex = rightPart.indexOf(delimiter, startIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 남은 마지막 16진수 배열 원소 처리
|
||||||
|
String hexValue = rightPart.substring(startIndex);
|
||||||
|
data[index] = strtoul(hexValue.c_str(), NULL, 16);
|
||||||
|
index++;
|
||||||
|
|
||||||
|
// 왼쪽 부분인 "ABC"을 반환
|
||||||
|
return index;
|
||||||
|
}
|
Binary file not shown.
@ -1,38 +0,0 @@
|
|||||||
String demuxCMD(String command, String* rightPart) {
|
|
||||||
|
|
||||||
// "::"를 기준으로 문자열을 분리
|
|
||||||
int separatorIndex = command.indexOf("::");
|
|
||||||
String leftPart = command.substring(0, separatorIndex);
|
|
||||||
*rightPart = command.substring(separatorIndex + 2);
|
|
||||||
|
|
||||||
leftPart.replace(" ", "");
|
|
||||||
return leftPart;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int demuxNum(String rightPart, unsigned int data[]) {
|
|
||||||
|
|
||||||
// 우측의 16진수 배열을 분리하여 추출
|
|
||||||
const char* delimiter = ",";
|
|
||||||
int startIndex = 0;
|
|
||||||
int endIndex = rightPart.indexOf(delimiter);
|
|
||||||
int index = 0;
|
|
||||||
|
|
||||||
while (endIndex >= 0) {
|
|
||||||
String hexValue = rightPart.substring(startIndex, endIndex);
|
|
||||||
// 16진수 문자열을 16진수 숫자로 변환하여 data 배열에 저장
|
|
||||||
data[index] = strtoul(hexValue.c_str(), NULL, 16);
|
|
||||||
index++;
|
|
||||||
|
|
||||||
startIndex = endIndex + 1;
|
|
||||||
endIndex = rightPart.indexOf(delimiter, startIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 남은 마지막 16진수 배열 원소 처리
|
|
||||||
String hexValue = rightPart.substring(startIndex);
|
|
||||||
data[index] = strtoul(hexValue.c_str(), NULL, 16);
|
|
||||||
index++;
|
|
||||||
|
|
||||||
// 왼쪽 부분인 "ABC"을 반환
|
|
||||||
return index;
|
|
||||||
}
|
|
@ -1,34 +1,64 @@
|
|||||||
void periodic_10ms(){
|
//
|
||||||
msCnt += 10;
|
void Periodic_run(){
|
||||||
|
if(T_10ms){
|
||||||
if(!busy){
|
|
||||||
// Call a function every 10ms
|
|
||||||
read_analog(Values_AI, Size_AI);
|
read_analog(Values_AI, Size_AI);
|
||||||
read_mc9(Values_PV, Size_PV);
|
read_mc9(Values_PV, Size_PV);
|
||||||
|
T_10ms = false;
|
||||||
|
}
|
||||||
|
if(T_20ms){
|
||||||
|
|
||||||
// Call a function every 50ms
|
T_20ms = false;
|
||||||
if (msCnt % 20 == 0){
|
}
|
||||||
|
if(T_50ms){
|
||||||
}
|
|
||||||
|
|
||||||
// Call a function every 50ms
|
|
||||||
if (msCnt % 50 == 0){
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Call a function every 100ms
|
T_50ms = false;
|
||||||
if (msCnt % 100 == 0){
|
}
|
||||||
|
if(T_100ms){
|
||||||
|
|
||||||
}
|
T_100ms = false;
|
||||||
|
}
|
||||||
|
if(T_200ms){
|
||||||
|
|
||||||
// Call a function every 500ms
|
T_200ms = false;
|
||||||
if (msCnt % 500 == 0){
|
}
|
||||||
read_mc9_req();
|
if(T_500ms){
|
||||||
}
|
read_mc9_req("10");
|
||||||
|
T_500ms = false;
|
||||||
|
}
|
||||||
|
if(T_500ms_2){
|
||||||
|
read_mc9_req("11");
|
||||||
|
T_500ms_2 = false;
|
||||||
|
}
|
||||||
|
if(T_1000ms){
|
||||||
|
AnalogIn_Print();
|
||||||
|
T_1000ms = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void timer_10ms(){
|
||||||
|
msCnt += 10;
|
||||||
|
|
||||||
// Call a function every 1000ms
|
T_10ms = true;
|
||||||
if (msCnt > 1000){
|
if (msCnt % 20 == 0){
|
||||||
msCnt = 0;
|
T_20ms = true;
|
||||||
}
|
}
|
||||||
|
if (msCnt % 50 == 0){
|
||||||
|
T_50ms = true;
|
||||||
|
}
|
||||||
|
if (msCnt % 100 == 0){
|
||||||
|
T_100ms = true;
|
||||||
}
|
}
|
||||||
|
if (msCnt % 200 == 0){
|
||||||
|
T_200ms = true;
|
||||||
|
}
|
||||||
|
if (msCnt % 500 == 0){
|
||||||
|
T_500ms = true;
|
||||||
|
}
|
||||||
|
if ((msCnt+250) % 500 == 0){
|
||||||
|
T_500ms_2 = true;
|
||||||
|
}
|
||||||
|
if (msCnt > 1000){
|
||||||
|
T_1000ms = true;
|
||||||
|
msCnt = 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue