我有这个完整的系统,使用超声波传感器和ESP8266 NodeMCU模块读取车辆或物体。该程序完全正常工作,如果book
数据库的状态,我不会显示book
状态。但每次我的arduino代码中的代码都没有检测到任何车辆,它说它可用。它似乎没有转到arduino代码中的if else条件,即status1等于book。
这是状态的条件,每次传感器检测到一个对象时,如果没有车辆,它将更新数据库的状态为occu
和avail
。我已经尝试过这个代码,如果else if(status1=="Book"
)this should update the
status1to book already. But why is it ending in the else condition where
status`等于可用吗?
if ((sensor < 10) && (sensor2 < 10))
{
sensor = 1;
status1 = "Occu";
digitalWrite(LEDRED,LOW);
digitalWrite(LEDGREEN,HIGH);
}
else if (status1 == "Book") {
sensor = 0;
status1 ="Book";
}
else
{
sensor = 0;
status1 ="Avail";
digitalWrite(LEDGREEN,LOW);
digitalWrite(LEDRED,HIGH);
}
我不知道为什么,数据库的状态总是更新到avail
,即使我在上面这个条件:
else if (status1 == "Book") {
sensor = 0;
status1 ="Book";
}
//我正在使用那个wifi接入连接NodeMCU并且它完全正常工作我唯一关心的是status1
没有更新到数据库,这是book
。
完整的ARDUINO代码
#include<ESP8266WiFi.h>
#define TRIGGER 5
#define ECHO 4
#define TRIGGER2 13
#define ECHO2 15
#define LEDRED 14
#define LEDGREEN 12
const char* ssid = "sample";
const char* password ="sample";
const char* host ="192.168.254.77";
String status1;
//String parking_lot;
long sensor;
long sensor2;
void setup(){
pinMode(LEDRED,OUTPUT);
pinMode(LEDGREEN,OUTPUT);
pinMode(sensor, INPUT);
pinMode(sensor2, INPUT);
delay(1000);
pinMode(TRIGGER, OUTPUT);
pinMode(ECHO, INPUT);
delay(1000);
Serial.begin(115200);
delay(10);
pinMode(TRIGGER2, OUTPUT);
pinMode(ECHO2, INPUT);
delay(1000);
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
Serial.print("connecting to ");
Serial.println(ssid);
WiFi.begin(ssid,password);
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("wifi connected");
Serial.println("ip address: ");
Serial.println(WiFi.localIP());
}
void loop() {
long duration;
long duration2;
delay(5000);
digitalWrite(TRIGGER, LOW);
delayMicroseconds(10);
digitalWrite(TRIGGER2, LOW);
delayMicroseconds(10);
digitalWrite(TRIGGER, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER2, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER, LOW);
duration = pulseIn(ECHO, HIGH);
digitalWrite(TRIGGER2, LOW);
duration2 = pulseIn(ECHO2, HIGH);
sensor = ((duration/2) / (29.1));
sensor2 = ((duration2/2) / (29.1));
if ((sensor < 10) && (sensor2 < 10))
{
sensor = 1;
status1 = "Occu";
digitalWrite(LEDRED,LOW);
digitalWrite(LEDGREEN,HIGH);
}
else if (status1 == "Book") {
sensor = 0;
status1 ="Book";
}
else
{
sensor = 0;
status1 ="Avail";
digitalWrite(LEDGREEN,LOW);
digitalWrite(LEDRED,HIGH);
}
Serial.println("connecting to");
Serial.println(host);
WiFiClient client;
const int httpPort = 80;
if(!client.connect(host,httpPort)){
Serial.println("connection failed");
return;
}
String url = "/sampleparking/sampleparking.php?parking_lot=S1&";
url += "status=";
url += status1;
Serial.println("Requesting URL");
Serial.println(url);
//-------------request send to server
client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available()== 0){
if(millis() - timeout > 5000){
Serial.println("CLIENT TIMEOUT");
client.stop();
return;
}
}
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println();
delay(10000);
}
示例停车php是查询开始的地方,用于更新和显示该区域的所有停车位。
这是我获得停车场状态的地方:
$status = (isset($_GET['status']) ? strip_tags($_GET['status']) : '');
sampleparking.php
<?php
session_start();
include "includes/connection.php";
// get the data from arduino uno and pass it to server
$status = (isset($_GET['status']) ? strip_tags($_GET['status']) : '');
$parking_lot = (isset($_GET['parking_lot']) ? strip_tags($_GET['parking_lot']) : '');
// update status once there is vehicle detected
$sql = $connection->prepare("UPDATE samplepark SET status = '$status' WHERE parkname ='$parking_lot'");
$sql-> execute();
$sql = $connection->prepare('SELECT parkid, parkname, status FROM samplepark');
$sql->execute(); // execute query
$result = $sql->get_result(); // fetch result
if ($result->num_rows > 0) {
echo "<tr><th>Parking Slots</th><th>Status</th><th>Action</th></tr>";
while($row = $result->fetch_assoc()) {
$bookparking = $row["status"] == 'Avail' ? "<a class='bookparking' href='bookparkingslot.php?did=".$row['parkid']."'>Book</a>" : "";
echo "<tr><td>" .$row["parkname"]. "</td><td>" .$row["status"]. "</td><td>" .$bookparking. "</td></tr>";
}
}
?>
使用ajax在id sampleparking.php
中加载displayparking
<div class="container">
<div class="usercontainer">
<div class="floors">
<div class="contentparkingslots">
<table class="viewparkingslots" id="displayparking">
</table>
</div>
</div>
</div>
</div>
AJAX LOader
ajax.js
// View Users
setInterval(function () {
$.ajax({
method: "post",
url: "sampleparking.php",
data: $('#displayparking').serialize(),
dataType: "html",
success: function (response) {
$("#displayparking").html(response);
}
});
}, 1000);
if (status1 == "Book") {
sensor = 0;
status1 ="Book";
}
逻辑上你的代码没有意义。
如果它已经等于"Book"
,你只将status1
分配给"Book"
。