这里使用非接触式红外温度传感器进行人体温度的测量,然后在嵌入式控制器的显示器上显示结果,那么就有两个方面的程序需要编写。一个为底层驱动程序,其驱动非接触式红外温度传感器得到温度值,然后传递给嵌入式控制器,嵌入式控制器驱动显示屏显示距离值,如图6.4.4所示;另一个为嵌入式控制板程序。
图6.4.4 通过嵌入式控制显示屏显示温度测量的GUI界面
底层控制板(Arduino)的范例程序如下:
#include 〈Wire.h〉
#define SLAVE_ADDRESS 0x04
int number = 0;
int state = 0;
#define Clock Pin 17 // clock in
#define Data Pin 18 //data in
#define Test Pin 19//driver pin set pin low to start deliver data
void data_read(int *p)
{
int i,j,Pin State,temp Data;
digital Write(Test Pin, LOW);
for(i=0;i〈5;i++)
{
for(j=0;j〈8;j++)
{
do{
Pin State = digital Read(Clock Pin);
}while(Pin State);
delay Microseconds(100);
Pin State = digital Read(Data Pin);
if(1 == Pin State)
temp Data = (temp Data〈〈1 & 0xfe)+1;
else
temp Data = (temp Data〈〈1 & 0xfe);
do{
Pin State = digital Read(Clock Pin);
}while(Pin State != 1);
}
*p++ = temp Data;
}
digital Write(Test Pin, HIGH);
}
void setup() {
pin Mode(Data Pin,INPUT);
pin Mode(Clock Pin,INPUT);
pin Mode(Test Pin,OUTPUT);
digital Write(Test Pin, HIGH);
Serial.begin(9600); // start serial for output
// initialize i2c as slave
Wire.begin(SLAVE_ADDRESS);
// define callbacks for i2c communication
Wire.on Receive(receive Data);
Wire.on Request(send Data);
delay(100);
Serial.println("Ready!");
}
void loop()
{
int data_buf[5] = {0};
int temp Data = 0;
while(1)
{
data_read(data_buf);
temp Data = data_buf[1]*256 + data_buf[2];
float real Temp = (float)temp Data/16-273.15;
Serial.print("Temp[C]=");
Serial.println(real Temp);
delay(500);
}
}
// callback for received data
void receive Data(int byte Count){
}
// callback for sending data
void send Data(){
Wire.write(real Temp);
}
嵌入式控制板的范例程序如下:
import smbus
import time
# for RPI version 1, use "bus = smbus.SMBus(0)"
bus = smbus.SMBus(1)
# This is the address we setup in the Arduino Program
address = 0x04
def write Number(value):
bus.write_byte(address, value)
# bus.write_byte_data(address, 0, value)
return -1
def read Number():
number = bus.read_byte(address)
# number = bus.read_byte_data(address, 1)
return number
while True:
number = read Number()
if number == 0
return
message = ‘当前温度值:’+str(number)+’°’
text_surface = font.render(message,True,(127,127,127))
screen.fill(255,255,255)
screen.blit(text_surface,(100,100))
w = screen.get_width()-20
proximity = ((100 - dist)/100.0)*w
if proximity 〈 0:
proximity = 0
pygame.draw.rect(screen,(0,255,0),Rect(10,10),(w,50)))
pygame.draw.rect(screen,(255,0,0))
Rect((10,10),(proximity,50))
Pygame.display.update()
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。