เชื่อมต่อบลิ๊งค์ได้ แต่ค่าไม่ไปออก


ตอนแรกยังไม่สั่งให้รีเลย์ทำงานค่ามันยังแสดงอยู่ แต่พอเพิ่มคำสั่งให้รีเลย์ทำงานด้วยก็ไม่แสดงค่าอีกเลยค่ะ

วางโค้ตก่อนใส่กับหลังใส่มาดูหน่อย





อันนี้เป็นโค้ดที่รันได้ ค่าแสดงผลระยะทางผ่านมอนิเตอร์และบลิ้งค์ได้แต่ไม่ครบทุกค่าค่ะ





อันนี้เป็นโค้ดที่รันแล้วค่าไม่ออก ที่บลิ้งค์แต่เชื่อมต่อบลิ้งค์ได้ ตัวรีเลย์ทำงานตลอดเวลา ไม่ทำตามคำสั่ง

ไม่เชิงว่าเกี่ยวกับรีเลย์ค่ะ ตัวโค้ดที่มีปัญหาจะเป็นตัว Brynk.vitualWriteกับWidgetLCD ต้องเลือกใส่ตัวใดตัวนึง ถ้าใส่พร้อมกันค่าจไม่ออกค่ะ ไม่รู้เป็นเพราะอะไร

S1[3] คือค่าหรือตัวดำเนินการ อะไร ครับ

เป็นค่าที่ได้รับจาก myserial ค่ะ ค่าจากการทำงานรับส่งของตัวมอเตอร์ ถ้าตามที่เข้าใจนะคะ ไม่ค่อยเข้าใจการทำงานของตัวเซ็นเซอร์เท่าไหร่เหมือนกัน

วางโค้ตนั้น เต็มๆ หน่อยครับ ผมอ่านยากมาก ดูภาพรวมไม่ได้

#define BLYNK_PRINT Serial

#define BLYNK_TEMPLATE_ID "TMPLuJkZnfoS"
#define BLYNK_DEVICE_NAME "Autometic pump"
#define BLYNK_AUTH_TOKEN "UPG49bfoFyJP7R35B6mJAdrtnEkV6O9u"

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(D5,D6);
 
unsigned char S1[4]={};
int i,SensorMM,sum,SensorCM,Inch,Approx,Distance;
const int relay = D7;

char auth[] = "UPG49bfoFyJP7R35B6mJAdrtnEkV6O9u";
char ssid[] = "EEE";
char pass[] = "ern12112542";

WidgetLCD LCD(V0);
WidgetLED PUMP(V1);

void setup()
{
 pinMode(relay, OUTPUT);
 Serial.begin(57600);
 mySerial.begin(9600);
 Blynk.begin(auth, ssid, pass);
} 

void sendsensor()
{
do
 {
  for(i=0;i<4;i++)
  {
   S1[i]= mySerial.read();
  }
 }
 while(mySerial.read()==0xff);
 
  mySerial.flush();
 
if(S1[0]==0xff)
 {
  sum=(S1[0]+S1[1]+S1[2])&0x00FF;
 
  if(sum==S1[3])
   {
    SensorMM=(S1[1]<<8)+S1[2];
 
     if(SensorMM>280)
      {
       SensorCM=SensorMM/10;
       Inch=SensorCM/2.54;
       Approx = (int)(Inch+0.5);
       ///Distance = Approx*2.54; 
       Serial.print("Distance ");
       Serial.print( Approx*2.54);
       Serial.println(" CM");
       //delay(100);
      }
     else
      {
       Serial.println("Too Close");
      }
   }
   else Serial.println("ERROR");
 }
  Blynk.virtualWrite(V2, Distance);
delay(100);
}

void Pump()
{
  sendsensor();
if( Approx*2.54 >100)
 {
  digitalWrite(relay, LOW);
  LCD.print(0,0,"Water pump OFF");
  PUMP.off();
  }
 
else if( Approx*2.54 <=50)
 {
  digitalWrite(relay, HIGH);
  LCD.print(0,0,"Water pump ON");
  PUMP.on();
 } 
}
void loop()
 {
  Pump();
  Blynk.run();
 }

แสดงว่าการต่อมีปัญหาหรือไม่ มันขึ้น ERROR ตลอด มันเชื่อมรับส่งข้อมูลไม่ได้

image

แถมใช้ while ด้วยมันอ่านไม่ได้มันก็วนอยู่แบบนั้น ไม่ทำอย่างอื่นเลย

while(mySerial.read()==0xff);

ค่าERROR บางทีก็ไม่ขึ้นเลยค่ะ

เบื้องต้นลองตั้งเวลาแยกส่วนการทำงานดูก่อนครับตามตัวอย่างนี้ เนื่องจากเวลาโค้ตยาวและนานเกิน ถ้าเรียงการทำงานไปเรื่อยๆ แต่การทำแบบนี้มันทำให้ไม่ต้องรอกัน

ขอบคุณค่ะ เดี๋ยวจะลองดูค่ะ