使用超声波传感器时如何更新数据库中的书籍状态

问题描述 投票:0回答:1

我有这个完整的系统,使用超声波传感器和ESP8266 NodeMCU模块读取车辆或物体。该程序完全正常工作,如果book数据库的状态,我不会显示book状态。但每次我的arduino代码中的代码都没有检测到任何车辆,它说它可用。它似乎没有转到arduino代码中的if else条件,即status1等于book。

这是状态的条件,每次传感器检测到一个对象时,如果没有车辆,它将更新数据库的状态为occuavail。我已经尝试过这个代码,如果else if(status1=="Book"this should update thestatus1to book already. But why is it ending in the else condition wherestatus`等于可用吗?

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);
php arduino esp8266 nodemcu
1个回答
0
投票
if (status1 == "Book") {
    sensor = 0;
    status1 ="Book";
}

逻辑上你的代码没有意义。

如果它已经等于"Book",你只将status1分配给"Book"

© www.soinside.com 2019 - 2024. All rights reserved.