国内综合精彩aⅤ无码不卡_日本少妇做爰全过程_欧美性爱在线播放免费_午夜?V日韩一区二区_免费a级毛片无码免费播放_成在人线av无码喷水_亚洲精品网站色视频_国产婷婷精品成人_老师撩起裙子让我桶的视频_秋霞影院国产

求助!esp8266+重力傳感不能同時工作。

作者:往兮321 | 更新時間:2020-05-12 | 瀏覽量:1235

ESP8266+重力傳感HX711芯片 使用論壇的控制LED代碼合成后,可以看到設(shè)備在線狀態(tài),稱重也可以正常工作, 但設(shè)備對話時就沒有反應(yīng) 。  兩個代碼分開時都能運行, 合起來就不行了,小白一個,大神能說詳細點不。。

源代碼 如下:  

 

/*
 * 按鈕按下開始指紋檢測,成功發(fā)送信息,并LED閃爍,lock開啟;失敗發(fā)送信息報警;
 * lock開啟后檢測開關(guān),按下開關(guān),lock關(guān)閉; 
 * 發(fā)送open指紋檢測開鎖;發(fā)送new添加指紋;發(fā)送stop關(guān)閉lock;發(fā)送play打開lock;
 * 檢測到物品后,發(fā)送信息提示;
 * 壓力HX711:VCC接5V、SCK接A0,DT接A1、GND接地;模塊紅黑白綠接E+E-A-A+;
 * wifi8266:VCC接3.3V、GND接地、TXD接0、RXD接1;
 * 指紋AS608:VCC接3.3V 紅線、TX接2 黃線、RX接3 白線、GND接地 黑線;
 * lock接11,通電不能大于1秒;LED接9;門鎖按鈕接10;
*/
#include <Adafruit_Fingerprint.h>
#include <aJSON.h>
#include "HX711.h"
#include <SoftwareSerial.h>

// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
SoftwareSerial mySerial(2, 3);
//SoftwareSerial wifiSerial(0, 1);
HX711 scale(A5, A4);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);//mySerial = finger
uint8_t id;

String DEVICEID = "17388"; // 設(shè)備ID
String  APIKEY = "63fb07905"; //APIKEY


const int lock = 11;
const int LED = 9;//提示燈
unsigned long lastCheckStatusTime = 0; //記錄上次報到時間
const unsigned long postingInterval = 40000; // 每隔40秒向服務(wù)器報到一次
unsigned long checkoutTime = 0;//登出時間
int sta;

int button = 7;//門鎖按鈕

boolean buttonState = 1;

extern unsigned long HX711_Read(void);
extern long Get_Weight();
///變量定義
float Weight = 0;
int HX711_SCK =A4;   ///     作為輸出口
int HX711_DT= A5;    ///     作為輸入口
long HX711_Buffer = 0;
long Weight_Maopi = 0, Weight_Shiwu = 0;
#define GapValue 240       ///該值需校準(zhǔn) 每個傳感器都有所不同

void setup()
{  
 //初始化HX711的兩個io口   
pinMode(HX711_SCK, OUTPUT);  ///SCK 為輸出口 ---輸出脈沖
pinMode(HX711_DT, INPUT); ///  DT為輸入口  ---讀取數(shù)據(jù)
 Serial.begin(115200);
 Serial.print("Welcome to use!\n");
 delay(3000);    ///延時3秒  
 //獲取毛皮重量
 Weight_Maopi = HX711_Read(); 

  //WIFI
  pinMode(LED, OUTPUT);
  //Serial.begin(115200);//串口初始化(WIFI),硬件串口 rx=0,tx=1
  //Serial.begin(9600);
  finger.begin(9600);//指紋模塊初始化,軟件串口rx=2,tx=3
  //while (!Serial); 
  delay(5000);
  //Serial.println("\n\n指紋傳感器記錄");
  Serial.print("啟動成功!");
  //LOCK
  pinMode(lock, OUTPUT);
  pinMode(button, INPUT);
  
  


}
 void loop()    ///  一直循環(huán){}內(nèi)容  ----- 同while(1){xxx}
{
  //每一定時間查詢一次設(shè)備在線狀態(tài),同時替代心跳
 if (millis() - lastCheckStatusTime > postingInterval) {
    checkStatus();
  }
  //checkout 50ms 后 checkin
 if ( checkoutTime != 0 && millis() - checkoutTime > 50 ) {
    checkIn();
    checkoutTime = 0;
  }
  //讀取串口信息 ||buttonState == HIGH
 buttonState = digitalRead(button);
 while (Serial.available()||buttonState == HIGH) {


    buttonState = digitalRead(button);
    if (buttonState == HIGH){
      Weight = Get_Weight();  //計算放在傳感器上的重物重量
      float kuaidi=float(Weight/1000);
      Serial.print(kuaidi,3);  //串口顯示重量,3意為保留三位小數(shù)
      Serial.print(" kg\n"); //顯示單位
      Serial.print("\n");  //顯示單位
      scale.power_down();              // 將ADC置于休眠模式
      if (kuaidi>1){
        Serial.print("有快遞,請指紋解鎖!");
        FingerprintIdentification();
        buttonState=0;
        delay(3000);
        return;

  }
      else if (kuaidi<1){
        Serial.print("鎖已開啟,可以放入快遞。");
        digitalWrite(lock, HIGH);
        delay(500); 
        digitalWrite(lock, LOW);        
        digitalWrite(LED, HIGH);
        delay(500);
        digitalWrite(LED, LOW);
        delay(500);
        digitalWrite(LED, HIGH);
        delay(500);
        digitalWrite(LED, LOW);
        sta = 3;
        buttonState=0;
        return;
        
  }

  
  } 

    String inputString = Serial.readStringUntil('\n');
    //檢測json數(shù)據(jù)是否完整
    int jsonBeginAt = inputString.indexOf("{");
    int jsonEndAt = inputString.lastIndexOf("}");
    if (jsonBeginAt != -1 && jsonEndAt != -1) {
      //凈化json數(shù)據(jù)
      inputString = inputString.substring(jsonBeginAt, jsonEndAt + 1);
      int len = inputString.length() + 1;
      char jsonString[len];
      inputString.toCharArray(jsonString, len);
      aJsonObject *msg = aJson.parse(jsonString);
      processMessage(msg);
      aJson.deleteItem(msg);
    }

    //-

    

  
  }


  
//--
  
 

 scale.power_up(); 


 
}


 //稱重函數(shù)
long Get_Weight()
{
 HX711_Buffer = HX711_Read();    ///讀取此時的傳感器輸出值
 Weight_Shiwu = HX711_Buffer;     ///將傳感器的輸出值儲存
 Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //獲取實物的AD采樣數(shù)值。
 Weight_Shiwu = (long)((float)Weight_Shiwu/GapValue);    //AD值轉(zhuǎn)換為重量(g)
 return Weight_Shiwu; 
}
unsigned long HX711_Read(void) //選擇芯片工作方式并進行數(shù)據(jù)讀取
{
 unsigned long count;   ///儲存輸出值  
 unsigned char i;     
   ////high--高電平 1  low--低電平 0  
 digitalWrite(HX711_DT, HIGH);   ////  digitalWrite作用: DT=1;
 delayMicroseconds(1); ////延時 1微秒  
 digitalWrite(HX711_SCK, LOW);  ////  digitalWrite作用: SCK=0;
 delayMicroseconds(1);   ////延時 1微秒  
 count=0; 
  while(digitalRead(HX711_DT));    //當(dāng)DT的值為1時,開始ad轉(zhuǎn)換
  for(i=0;i<24;i++)   ///24個脈沖,對應(yīng)讀取24位數(shù)值
 { 
   digitalWrite(HX711_SCK, HIGH);  ////  digitalWrite作用: SCK=0;
                                /// 利用 SCK從0--1 ,發(fā)送一次脈沖,讀取數(shù)值
  delayMicroseconds(1);  ////延時 1微秒  
  count=count<<1;    ///用于移位存儲24位二進制數(shù)值
  digitalWrite(HX711_SCK, LOW);   //// digitalWrite作用: SCK=0;為下次脈沖做準(zhǔn)備
 delayMicroseconds(1);
   if(digitalRead(HX711_DT))    ///若DT值為1,對應(yīng)count輸出值也為1
   count++; 
 } 
  digitalWrite(HX711_SCK, HIGH);    ///再來一次上升沿 選擇工作方式  128增益
 count ^= 0x800000;   //按位異或  不同則為1   0^0=0; 1^0=1;
///對應(yīng)二進制  1000 0000 0000 0000 0000 0000  作用為將最高位取反,其他位保留原值
 delayMicroseconds(1);
 digitalWrite(HX711_SCK, LOW);      /// SCK=0;     
 delayMicroseconds(1);  ////延時 1微秒  
 return(count);     ///返回傳感器讀取值
}


//設(shè)備登錄
//{"M":"checkin","ID":"xx1","K":"xx2"}\n
void checkIn() {
  Serial.print("{\"M\":\"checkin\",\"ID\":\"");
  Serial.print(DEVICEID);
  Serial.print("\",\"K\":\"");
  Serial.print(APIKEY);
  Serial.print("\"}\r\n");
}
//處理網(wǎng)絡(luò)接收到到指令,執(zhí)行相關(guān)動作
void processMessage(aJsonObject *msg) {
  aJsonObject* method = aJson.getObjectItem(msg, "M");
  if (!method) {
    return;
  }
  String M = method->valuestring;
  if (M == "WELCOME TO BIGIOT") {
    checkOut();
    checkoutTime = millis();
    return;
  }
  if (M == "connected") {
    checkIn();
  }
  if (M == "say") {
    aJsonObject* content = aJson.getObjectItem(msg, "C");
    aJsonObject* client_id = aJson.getObjectItem(msg, "ID");
    String C = content->valuestring;
    String F_C_ID = client_id->valuestring;
    if (C == "play") {
          digitalWrite(LED, HIGH);
          delay(500);
          digitalWrite(LED, LOW);
          delay(500);
          digitalWrite(LED, HIGH);
          delay(500);
          digitalWrite(LED, LOW);
          say(F_C_ID, "lock on!");
    }
    if (C == "stop") {
      digitalWrite(lock, HIGH);
      delay(500); 
      digitalWrite(lock, LOW); 
      say(F_C_ID, "lock off!");
    }
    if (C == "new") {
      say(F_C_ID, "new finger");
      getFingerprintEnroll();
    }
    if (C == "open") {
      say(F_C_ID, "finger test ");
      FingerprintIdentification();   
    }
    if (sta == 1) {
      say(F_C_ID, "未知者嘗試開啟!");
  }
    if (sta == 3) {
      say(F_C_ID, "有你的快遞!");
  }
    if (sta == 2) {
      say(F_C_ID, "鎖已開啟!");
  }
}
}//

//發(fā)送say指令,用于設(shè)備與用戶、設(shè)備與設(shè)備間通訊
//{"M":"say","ID":"xx1","C":"xx2","SIGN":"xx3"}\n
void say(String ID, String c) {
  Serial.print("{\"M\":\"say\",\"ID\":\"");
  Serial.print(ID);
  Serial.print("\",\"C\":\"");
  Serial.print(c);
  Serial.print("\"}\r\n");
}
//強制設(shè)備下線,用消除設(shè)備掉線延時
void checkOut() {
  Serial.print("{\"M\":\"checkout\",\"ID\":\"");
  Serial.print(DEVICEID);
  Serial.print("\",\"K\":\"");
  Serial.print(APIKEY);
  Serial.print("\"}\n");
}
//查詢設(shè)備在線狀態(tài)
//{"M":"status"}\n
void checkStatus() {
  Serial.print("{\"M\":\"status\"}\n");
  lastCheckStatusTime = millis();
}


uint8_t readnumber(void) {
  uint8_t num = 0;
  
  while (num == 0) {
    while (! Serial.available());
    num = Serial.parseInt();
  }
  return num;
}

uint8_t getFingerprintEnroll() { //指紋注冊
  Serial.println("準(zhǔn)備注冊指紋!");
  int id =1;
  Serial.print("登記ID #");
  Serial.println(id);
  int p = -1;
  Serial.print("等待有效的指紋注冊為 #"); Serial.println(id);
  while (p != FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK:
      Serial.println("采集指紋");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println(".");
      break;
    default:
      Serial.println("未知的錯誤");
      break;
    }
  }

  // OK success!

  p = finger.image2Tz(1);
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("圖像修改");
      break;
    default:
      Serial.println("未知的錯誤");
      return p;
  }
  
  Serial.println("請移動手指");
  delay(2000);
  p = 0;
  while (p != FINGERPRINT_NOFINGER) {
    p = finger.getImage();
  }
  Serial.print("ID "); Serial.println(id);
  p = -1;
  Serial.println("再次放置手指");
  while (p != FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK:
      Serial.println("圖像已采集");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.print(".");
    default:
      Serial.println("未知的錯誤");
      break;
    }
  }

//第二次對比
  p = finger.image2Tz(2);
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("正在記錄");
      break;
    default:
      Serial.println("未知的錯誤");
      return p;
  }
  
  // 創(chuàng)建成功
  Serial.print("創(chuàng)建指紋為 #");  Serial.println(id);
  
  p = finger.createModel();
  if (p == FINGERPRINT_OK) {
    Serial.println("匹配!");
    id++;
    digitalWrite(LED, HIGH);
    delay(500);
    digitalWrite(LED, LOW);
    delay(500);
    digitalWrite(LED, HIGH);
    delay(500);
    digitalWrite(LED, LOW);
    


    
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("連接錯誤");
    return p;
  } else if (p == FINGERPRINT_ENROLLMISMATCH) {
    Serial.println("指紋不匹配");
    digitalWrite(LED, LOW);
    return p;
  } else {
    Serial.println("未知的錯誤");
    return p;
  }   
  
  Serial.print("ID "); Serial.println(id);
  p = finger.storeModel(id);
  if (p == FINGERPRINT_OK) {
    Serial.println("已儲存!");
  } else {
    Serial.println("未知的錯誤");
    return p;
  }   

}


uint8_t FingerprintIdentification()
{
  int p = -1;
  p=0;
  delay(2000);
  Serial.print("開始指紋測試:");
  p = finger.getImage();
  if (p == FINGERPRINT_OK) {
    Serial.print("開始指紋測試:");
    delay(2000);
    if (p != FINGERPRINT_OK)  return -1;
    delay(2000);
    p = finger.image2Tz();
    if (p != FINGERPRINT_OK)  return -1;
    delay(2000);
    p = 0;
    p = finger.fingerFastSearch();
    if (p != FINGERPRINT_OK)   Serial.print("沒有找到指紋");
    delay(2000);                         //驗證指紋
    if(finger.confidence>80){
      digitalWrite(LED, HIGH); 
      Serial.print("找到指紋ID為 #"); Serial.print(finger.fingerID);
      Serial.print("信心值: "); Serial.println(finger.confidence);
      sta=2;
      
      digitalWrite(lock, HIGH);
      delay(500); 
     // digitalWrite(lock, LOW);        
      digitalWrite(LED, HIGH);
      delay(500);
      digitalWrite(LED, LOW);
      delay(500);
      digitalWrite(LED, HIGH);
      delay(500);
      digitalWrite(LED, LOW);}
    else{
      Serial.print("指紋不匹配");
      sta=1;
      return p;
    }
  }
}


評論:共0條

返回頂部