《嵌入式系统开发》课程设计
开始无线互联编译执行显示电压显示温度显示湿度显示“没有震动”否是是否有震动显示“有震动”否显示“没有人体感应”是否有人体感应是显示“有人体感应”结束 图6.2 ZigBee无线控制显示温湿度电压人体感应等
《嵌入式系统开发》课程设计
6.2.2 ZigBee无线控制显示点阵、数码、蜂鸣器
开始无线互联编译执行数码管显示显示流动的“心”蜂鸣器发声结束 图6.3 ZigBee无线控制显示点阵、数码、蜂鸣器
6.3 实现功能的部分代码(全部代码见附件1)
6.3.1 温湿度及人体感应器主要代码
void scan()
{
int source_addr,father_addr;
char byte4,byte5,byte6,byte7,byte8,byte9,byte10,byte11,byte12,byte13,byte14,byte15, char test,byteCheck; char PacketBuff[50]; int PacketLen;
struct wsn_comm_pkg *pkt = 0; if(sRecDataLen > 0) {
int sFirstPosition = 0;
while(sFirstPosition < sRecDataLen) {
if(Recbuff[sFirstPosition] == 0x2) {
byte16,byte17,byte18,byte19;
《嵌入式系统开发》课程设计
PacketLen = Recbuff[sFirstPosition + 1]+3; if(PacketLen <= sRecDataLen -sFirstPosition) {
printf(\); int i;
for(i = 0; i < PacketLen; i++){ }
printf(\);
if(PacketBuff[7]==0x1){
byte10 = PacketBuff[10]; byte11 = PacketBuff[11]; byte12 = PacketBuff[12]; byte13 = PacketBuff[13]; byte14 = PacketBuff[14]; byte15 = PacketBuff[15]; byte16 = PacketBuff[16]; byte17 = PacketBuff[17]; byte18 = PacketBuff[18]; if((byte10 & 0x7)==0x0) {
printf(\
PacketBuff[i] = Recbuff[sFirstPosition + i]; printf(\,PacketBuff[i]);
Celsius\\n board temperature: %d Celsius \\n temperature and humidity for temperature: %d Celsius\\n temperature and humidity forhumidity: %d %\\n strength of
illumination : %d\\n\,ScanADdata(byte11),byte12,byte13,byte14,byte15,byte16);
}
if((byte10 & 0x7)==0x1)
if(byte17 == 0x00) { }
if(byte17 == 0x01) { }
if(byte18 == 0x00) { }
if(byte18 == 0x01) { }
printf(\); printf(\); printf(\); printf(\);
《嵌入式系统开发》课程设计
{
printf(\A/Dvoltage: %.2f V\\n 2530temperature: %d Celsius\\n
fuel gas: %d\\n alcohol: %d\\n press: %d g\\n Barometric pressure: %d\\n \,ScanADdata(byte11),byte12,byte13,byte14,PressData(byte15),byte16);
}
if((byte10 & 0x7)==0x2) {
printf(\A/Dvoltage: %.2f V\\n 2530temperature: %d Celsius\\n
supersonic wave: %.4f m\\n X-axis acceleration: %d\\n Y-axis acceleration: %d\\n Z-axis acceleration: %d\\n
\,ScanADdata(byte11),byte12,ultrasonicData(byte13),byte14,byte15,byte16);
} else {
} return;
}
for(i = 0; i < sRecDataLen - sFirstPosition - PacketLen; i++) { }
sRecDataLen -= PacketLen + sFirstPosition;
Recbuff[i] = Recbuff[sFirstPosition + PacketLen+i]; }
if((byte10 & 0x7)==0x6) { } { }
save_byte4 = byte4; save_byte5 = byte5; buffer_has_item = 2; buffer_has_send = 0;
printf(\);
printf(\
save_byte4 = byte4; save_byte5 = byte5; buffer_has_item = 1; buffer_has_send = 0;
printf(\);
printf(\
Celsius\\n\,ScanADdata(byte11),byte12);
if((byte10 & 0x7)==0x7)
Celsius\\n\,ScanADdata(byte11),byte12);
printf(\);
《嵌入式系统开发》课程设计
}
}
}
}
sFirstPosition++;
sRecDataLen = 0;
实时检测结果如下:
图6.4 温湿度、振动及人体感应检测结果
6.3.2 LED、数码管及蜂鸣器控制代码
void writer_function(void) {
unsigned char SBuff[21]; int nwrite; int i = 0; int s=0;
pthread_mutex_lock(&mutex);
if(buffer_has_send == 0) {
if(LED) {
SendNum++; if(SendNum == 8)
//控制led矩阵 SBuff[0] = 0x02; SBuff[1] = 0x12;
SendNum = 0;
while(1) {