gpt4 book ai didi

C++ 如何在客户端中将 ledstatus 显示为打开或关闭?

转载 作者:行者123 更新时间:2023-11-30 05:42:12 25 4
gpt4 key购买 nike

代码是 Arduino C++ 如何在 HTTP 客户端中将 ledstatus 显示为“开”或“关”?if语句中的Led/status不像Ledstatus = off;或 Ledstatus = on;为什么?但如果我用数字代替,我做错了什么?

请帮忙?

/*
Web Server

A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)

created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe

*/

#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(10,0, 0, 210);
char linebuffer[20];
int linenumber = 0;

boolean IsLed = false;

// (Spa Variables):
int LedOn;
int Ledstatus;






// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);


void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

// Set Digital Pin 12 to output:
pinMode(12,OUTPUT);

// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
digitalWrite (12,LOW);
}


void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");

// an http request ends with a blank line
boolean currentLineIsBlank = true;

while (client.connected()) {
if (client.available()) {
char c = client.read();

Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank){
// send a standard http response header
parseRequest();
//sendHTTPResponse(client);
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("OK ");
client.print(IsLed);
client.print(Ledstatus);



char linebuffer[20]; //Clear the line buffer
linenumber = 0;

break;

}
if (c == '\n'){
// you're starting a new line
currentLineIsBlank = true;
}else if (c != '\r') {
if(linenumber <20){ //If there is room in the buffer
linebuffer[linenumber] = c; //Add char to the buffer
linenumber++; //Increment the counter
}
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(10);
// close the connection:
client.stop();
Serial.println("client disconnected");
}
}

void parseRequest(){
if(linebuffer[5] == 'O' && linebuffer[6] == 'N'){ //if the request was for ON
//Turn on the LED
IsLed = true;
digitalWrite (12,LOW);
Serial.println("isLed ON");
Ledstatus= on;

}else{(linebuffer[5] == 'O' && linebuffer [6] == 'F' && linebuffer [7] == 'F'); //if the request was for OFF
//Turn OFF the LED
IsLed = false;
digitalWrite(12,HIGH);
Serial.println("isLed OFF");
Serial.println();
Ledstatus = off;
}
}


最佳答案

我想我终于找到你了,因为你的代码有些困惑!正如您在评论中所写,您会得到一个 OK10OKOO 因为您正在代码中打印它:

...
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("OK "); //Prints OK of course
client.print(IsLed); //Prints an int!!
client.print(Ledstatus); //Also prints an int!!
...

你需要把它改成这样:

...
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("OK "); //Prints OK of course
if(Ledstatus == on)
client.println("ON");
else
client.println("OFF");
...

还有我在评论中提到的,您没有从客户端读取行缓冲区,但您正在解析它。它将是空的!我不知道API,但必须有类似于

的功能
client.read(linubuffer, 20);

关于C++ 如何在客户端中将 ledstatus 显示为打开或关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30755994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com