BASIC4MCU | 질문게시판 | 아두이노 코딩 관련 문의 드립니다.
페이지 정보
작성자 혼자 작성일2019-05-08 19:09 조회3,687회 댓글1건본문
안녕하세요 저번에 도와주신 덕분에 더 많이 배우고 알수있었습니다. 감사합니다.
가르쳐주신것 토대로 코딩을 짜봤는데 한가지가 해결이 안되어서 다시 질문 드려요.
전체 코딩 중 문제되는 부분을 빨간글씨로 칠하고 밑에 다시 질문내용 쓰겠습니다.
#include <SPI.h>
#include <WiFiNINA.h>
#include "arduino_secrets.h"
char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;
int keyIndex = 0;
int status = WL_IDLE_STATUS;
WiFiServer server(80);
int rainSensor = A0;
int sensorVal;
int sensortrigger = 200;
int IN1=11;
int IN2=12;
int flag=1;
void setup() {
Serial.begin(9600);
pinMode(rainSensor, INPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
while (true);
}
String fv = WiFi.firmwareVersion();
if (fv < "1.0.0") {
Serial.println("Please upgrade the firmware");
}
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to Network named: ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
delay(10000);
}
server.begin();
printWifiStatus();
}
void stop(){ digitalWrite(IN1,0); digitalWrite(IN2,0); }
void fwd() { digitalWrite(IN1,1); digitalWrite(IN2,0); }
void bwd() { digitalWrite(IN1,0); digitalWrite(IN2,1); }
void loop() {
WiFiClient client = server.available();
if (client) {
Serial.println("new client");
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n') {
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
client.print("Click <a href=\"/A\">here</a> AUTO MODE<br>");
client.print("Click <a href=\"/O\">here</a> OPEN<br>");
client.print("Click <a href=\"/C\">here</a> CLOSE<br>");
client.print("Click <a href=\"/V\">here</a> VOICEOPEN<br>");
client.print("Click <a href=\"/B\">here</a> VOICECLOSE<br>");
client.println();
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}
if (currentLine.endsWith("GET /A")) {
while (currentLine.endsWith("GET /A"))
{ int sensorVal = analogRead(rainSensor);
Serial.print(sensorVal);
if(sensorVal < sensortrigger){ Serial.println("빗물감지 CLOSE");
if(!flag){ flag=1; fwd(); delay(2500); stop(); }}
else if(sensorVal > sensortrigger){Serial.println("빗물없음");
if(flag){ flag=0; bwd(); delay(2500); stop(); }}
}
}
if (currentLine.endsWith("GET /O")) {
if(flag){ flag=0; bwd(); delay(2500); stop(); }}
if (currentLine.endsWith("GET /C")) {
if(!flag){ flag=1; fwd(); delay(2500); stop(); }}
if (currentLine.endsWith("GET /V")) {
if(flag){ flag=0; bwd(); delay(2500); stop(); }}
if (currentLine.endsWith("GET /B")) {
if(!flag){ flag=1; fwd(); delay(2500); stop(); }}
}
}
client.stop();
Serial.println("client disonnected");
}
}
void printWifiStatus() {
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
Serial.print("To see this page in action, open a browser to http://");
Serial.println(ip);
}
여기서 웹 페이지를 A,O,C,V,B이렇게 나누었는데
O,C,V,B는 눌렀을때 순서 관계 없이 잘 작동이 되고 O,C,V,B에서 A를 누르면
빗물 감지하는 파트로 넘어가서 작동이 잘 되는데
A를 누른 후 다시 O,C,V,B를 누르면 모터만 돌아가야하는데
계속 빗물 감지하는게 시리얼 모니터에 떠요.
어느부분을 수정해야 할까요?
항상 감사합니다
댓글 1
조회수 3,687master님의 댓글
master 작성일
while(currentLine.endsWith("GET /A")){
}
while 루프문을 벗어나지 못하는 것 아닌가요?