qzec0910266 發表於 2018-4-12 09:58:58

手機透過藍芽接收及控制arduino相關問題

請問一下各位
這段程式碼是我利用藍芽把溫溼度上傳至app 迴圈裡的程式碼
下一段程式碼是app利用藍芽控制led迴圈裡的程式碼
我想把他們做結合,可是控制led不管放在最前或最後,都會導致溫溼度上傳app中止
請問有辦法讓他既可以上傳又可以控制嗎
謝謝!!
void loop (){

//溫溼度
    serialA=I2CBT.read();
    int temp = myHumidity.readTemperature();
    int humd = myHumidity.readHumidity();
   
    Serial.print("Temperature:");
    Serial.print(temp, 1);
    Serial.print("C");
    Serial.print(" Humidity:");
    Serial.print(humd, 1);
    Serial.println("%");

//溫溼度數值透過藍芽傳送到app
    byte Data;
    byte Data1;
   
    byte cmmd;
    int insize;
   
   
    Data='a';
    Data=temp/256;
    Data=temp%256;
    Data1='b';
    Data1=humd/256;
    Data1=humd%256;
   
   Serial.print(temp);
   Serial.print(" , ");
   Serial.println(humd);

       delay(1000);

   if (serialA == 1){
         for(int j=0;j<3;j++)
         I2CBT.write(Data);
         serialA=0;
      }
   if (serialA == 2){
         for(int j=0;j<3;j++)
         I2CBT.write(Data1);
         serialA=0;
      }
}

=============================================================
void loop() {

byte cmmd;
int insize;

while(1){
/*
read message from bluetooth
*/
    if ((insize=(I2CBT.available()))>0){
      
       for (int i=0; i<insize; i++){
         Serial.print(cmmd=char(I2CBT.read()));
         Serial.print("\n");
       }
      
    }
      switch (cmmd) {
      case 97: //"a"   
         
          digitalWrite(raley,HIGH);
         
          break;
      case 98://"b"
         
          digitalWrite(raley,LOW);
         
          break;
   
      } //Switch
      
} //while

}

超新手 發表於 2018-4-12 10:08:12

1. 因為你的 LED 部份, 加了多餘的 while(1)
    它會讓你的程式卡死在 led 部份
   回不到溫溼度那部份
2. 要把兩個程式合在一起
    記得一定要把相同的部份去掉
    不過你沒貼出來, 不知道你是怎麼寫的

qzec0910266 發表於 2018-4-12 10:12:37

超新手 發表於 2018-4-12 10:08
1. 因為你的 LED 部份, 加了多餘的 while(1)
    它會讓你的程式卡死在 led 部份
   回不到溫溼度那部份 ...

這是我兩段完整的程式碼
能請超新手大大幫我看一下麻
我是把led改成繼電器
謝謝!!
#include <SoftwareSerial.h>
#include <Wire.h>
#include "SparkFunHTU21D.h"

SoftwareSerial I2CBT(10,11); // TX:10, RX:11
byte serialA;
HTU21D myHumidity;
intraley =8;

void setup(){
pinMode(raley,OUTPUT);
      
Serial.begin(9600);
I2CBT.begin(9600);
myHumidity.begin();

}

void loop (){

//溫溼度
    serialA=I2CBT.read();
    int temp = myHumidity.readTemperature();
    int humd = myHumidity.readHumidity();
   
    Serial.print("Temperature:");
    Serial.print(temp, 1);
    Serial.print("C");
    Serial.print(" Humidity:");
    Serial.print(humd, 1);
    Serial.println("%");

//溫溼度數值透過藍芽傳送到app
    byte Data;
    byte Data1;
   
    byte cmmd;
    int insize;
   
   
    Data='a';
    Data=temp/256;
    Data=temp%256;
    Data1='b';
    Data1=humd/256;
    Data1=humd%256;
   
   Serial.print(temp);
   Serial.print(" , ");
   Serial.println(humd);

       delay(1000);

   if (serialA == 1){
         for(int j=0;j<3;j++)
         I2CBT.write(Data);
         serialA=0;
      }
   if (serialA == 2){
         for(int j=0;j<3;j++)
         I2CBT.write(Data1);
         serialA=0;
      }

//空氣
    while(Serial.available()){
    CopeSerialData(Serial.read());
}

}

char CopeSerialData(unsigned char ucData){
static unsigned char ucRxBuffer;
static unsigned char ucRxCnt = 0;

longpmat25=0,pmat100=0;
longpmcount03=0,pmcount05=0,pmcount10=0;
longpmcount25=0,pmcount50=0,pmcount100=0;

ucRxBuffer=ucData;

if(ucRxBuffer!=0x42&&ucRxBuffer!=0x4D){
    ucRxCnt=0;
    return ucRxCnt;
}
if (ucRxCnt<24){
    return ucRxCnt;
}
else{
    // G3
   
   
    pmat25=(int)ucRxBuffer*256+(int)ucRxBuffer;    Serial.print("PM2.5:");Serial.print(pmat25);    Serial.print("   ");
    pmat100=(int)ucRxBuffer*256+(int)ucRxBuffer;   Serial.print("PM10:");   Serial.print(pmat100);   Serial.println("   ");
   
   
   
    ucRxCnt=0;
   
}

//空氣數值透過藍芽傳送到app
    byte Data2;
    byte Data3;
   

   
    Data2='c';
    Data2=pmat25/256;
    Data2=pmat25%256;
    Data3='d';
    Data3=pmat100/256;
    Data3=pmat100%256;
   
   Serial.print(pmat25);
   Serial.print(" , ");
   Serial.println(pmat100);

   if (serialA == 3){
         for(int j=0;j<3;j++)
         I2CBT.write(Data2);
         serialA=0;
      }
   if (serialA == 4){
         for(int j=0;j<3;j++)
         I2CBT.write(Data3);
         serialA=0;
      }
   

   return ucRxCnt;


    delay(10000);

   
}
==========================================================
#include <SoftwareSerial.h>
#include <Wire.h>

intraley =8;

SoftwareSerial I2CBT(10,11);

void setup() {
Serial.begin(9600);
I2CBT.begin(9600);//bluetooth baud rate
pinMode(raley,OUTPUT);
   
}

///////////////////main///////////////////////////

void loop() {

byte cmmd;
int insize;

while(1){
/*
read message from bluetooth
*/
    if ((insize=(I2CBT.available()))>0){
      
       for (int i=0; i<insize; i++){
         Serial.print(cmmd=char(I2CBT.read()));
         Serial.print("\n");
       }
      
    }
      switch (cmmd) {
      case 97: //"a"   
         
          digitalWrite(raley,HIGH);
         
          break;
      case 98://"b"
         
          digitalWrite(raley,LOW);
         
          break;
   
      } //Switch
      
} //while

}

超新手 發表於 2018-4-12 10:20:13

可以把你結合過的程式貼出來嗎?
記得
1. 拿掉 while(1)
2. 相同的部份, 像 I2CBT.read() 也要一起結合


qzec0910266 發表於 2018-4-12 10:31:26

超新手 發表於 2018-4-12 10:20
可以把你結合過的程式貼出來嗎?
記得
1. 拿掉 while(1)


超新手大大你好
以下是我結合的程式碼
他只會跑溫度跟上傳值就停住了
請問哪裡需要修改??
謝謝


#include <SoftwareSerial.h>
#include <Wire.h>
#include "SparkFunHTU21D.h"

SoftwareSerial I2CBT(10,11); // TX:10, RX:11
byte serialA;
HTU21D myHumidity;
intraley =8;

void setup(){
pinMode(raley,OUTPUT);
      
Serial.begin(9600);
I2CBT.begin(9600);
myHumidity.begin();

}

void loop (){

//溫溼度
    serialA=I2CBT.read();
    int temp = myHumidity.readTemperature();
    int humd = myHumidity.readHumidity();
   
    Serial.print("Temperature:");
    Serial.print(temp, 1);
    Serial.print("C");
    Serial.print(" Humidity:");
    Serial.print(humd, 1);
    Serial.println("%");

//溫溼度數值透過藍芽傳送到app
    byte Data;
    byte Data1;
   
    byte cmmd;
    int insize;

   
   
    Data='a';
    Data=temp/256;
    Data=temp%256;
    Data1='b';
    Data1=humd/256;
    Data1=humd%256;
   
   Serial.print(temp);
   Serial.print(" , ");
   Serial.println(humd);

       delay(1000);

   if (serialA == 1){
         for(int j=0;j<3;j++)
         I2CBT.write(Data);
         serialA=0;
      }
   if (serialA == 2){
         for(int j=0;j<3;j++)
         I2CBT.write(Data1);
         serialA=0;
      }
while(1){
/*
read message from bluetooth
*/
    if ((insize=(I2CBT.available()))>0){
      
       for (int i=0; i<insize; i++){
         Serial.print(cmmd=char(I2CBT.read()));
         Serial.print("\n");
       }
      
    }
      switch (cmmd) {
      case 97: //"a"   
         
          digitalWrite(raley,HIGH);
         
          break;
      case 98://"b"
         
          digitalWrite(raley,LOW);
         
          break;
   
      } //Switch
      
} //while
//空氣
    while(Serial.available()){
    CopeSerialData(Serial.read());
}

}

char CopeSerialData(unsigned char ucData){
static unsigned char ucRxBuffer;
static unsigned char ucRxCnt = 0;

longpmat25=0,pmat100=0;
longpmcount03=0,pmcount05=0,pmcount10=0;
longpmcount25=0,pmcount50=0,pmcount100=0;

ucRxBuffer=ucData;

if(ucRxBuffer!=0x42&&ucRxBuffer!=0x4D){
    ucRxCnt=0;
    return ucRxCnt;
}
if (ucRxCnt<24){
    return ucRxCnt;
}
else{
    // G3
   
   
    pmat25=(int)ucRxBuffer*256+(int)ucRxBuffer;    Serial.print("PM2.5:");Serial.print(pmat25);    Serial.print("   ");
    pmat100=(int)ucRxBuffer*256+(int)ucRxBuffer;   Serial.print("PM10:");   Serial.print(pmat100);   Serial.println("   ");
   
   
   
    ucRxCnt=0;
   
}

//空氣數值透過藍芽傳送到app
    byte Data2;
    byte Data3;
   

   
    Data2='c';
    Data2=pmat25/256;
    Data2=pmat25%256;
    Data3='d';
    Data3=pmat100/256;
    Data3=pmat100%256;
   
   Serial.print(pmat25);
   Serial.print(" , ");
   Serial.println(pmat100);

   if (serialA == 3){
         for(int j=0;j<3;j++)
         I2CBT.write(Data2);
         serialA=0;
      }
   if (serialA == 4){
         for(int j=0;j<3;j++)
         I2CBT.write(Data3);
         serialA=0;
      }
   

   return ucRxCnt;


    delay(10000);

   
}
頁: [1]
查看完整版本: 手機透過藍芽接收及控制arduino相關問題