手機透過藍芽接收及控制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
}
1. 因為你的 LED 部份, 加了多餘的 while(1)
它會讓你的程式卡死在 led 部份
回不到溫溼度那部份
2. 要把兩個程式合在一起
記得一定要把相同的部份去掉
不過你沒貼出來, 不知道你是怎麼寫的
超新手 發表於 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
} 可以把你結合過的程式貼出來嗎?
記得
1. 拿掉 while(1)
2. 相同的部份, 像 I2CBT.read() 也要一起結合
超新手 發表於 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]