(原创)基于ADI Blackfin STAMP的综合设计平台的设计与实现
0赞又有新活动哇,好像我不能参加最U博文,可以参加观摩助威奖,在这我写一个我使用blackfin Stamp做一个综合实例的程序,谢谢大家!!!
硬件:Blackfin STAMP平台,配套模块(温湿度传感器、热释红外传感器、光谱气体传感器、
光敏声响开关、直流电机模块、LED 蜂鸣器模块、点阵 LCD 模块、双数码管模块),PC 机 Pentium 500
以上, 硬盘 40G 以上,内存大于 256M
♦ 软件:Vmware Workstation +uClinux+ MiniCom/Xshell + ARM-uClinux交叉编译开发环境
程序流程图
♦ 关键代码分析
软件构造函数:
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);//构建 UI 工程界面
//设置界面背景
QPalette palette1=this->palette();
palette1.setBrush(QPalette::Window,QBrush(QPixmap("./images/bg.png")));
this->setPalette(palette1);
this->setAutoFillBackground(true);
QTimer *timer = new QTimer( this );
//进行定时器信号连接
connect( timer, SIGNAL(timeout()), this, SLOT(refreshStatus()) );
//加载模块硬件驱动脚本程序
Insmod_moudles();
sleep(1);
//开启刷新状态定时器
timer->start(1000); // 1 seconds single-shot timer
GetStatus();//显示模块初始状态
}
Insmod_moudles()函数使用 Qprocess 调用外部脚本程序,并获取模块设备文件句柄:
void Widget:: Insmod_moudles()
{
QProcess *process = new QProcess;
QStringList str;
str << "";
process->start(MODULES_DRIVER,str);
process->waitForStarted();
sleep(1);
fd_irda = open("/dev/irda", 0);
if (fd_irda < 0) {
printf("Can't open /dev/irda\n");
}
fd_smog = open("/dev/smog", 0);
if (fd_smog < 0) {
printf("Can't open /dev/smog\n");
}
fd_miph = open("/dev/miph", 0);
if (fd_miph < 0) {
printf("Can't open /dev/miph\n");
}
fd_sht11 = open("/dev/sht11", 0);
if (fd_sht11 < 0) {
printf("Can't open /dev/sht11\n");
}
} refreshStatus()槽函数调用模块状态子函数
void Widget::refreshStatus()
{
GetStatus();
}
void Widget::GetStatus() {
Show_sht11();//温湿度获取子函数
Show_irda(); //红外状态子函数
Show_smog(); //烟雾状态子函数
Show_miph(); //麦克声音状态子函数
}
按钮控制方式使用 QT 自带的信号与槽的命名规则方式进行信号和槽的连接:
// 启动电机槽函数
void Widget::on_pb_motor_on_clicked()
{
QProcess *process = new QProcess;
process->start("/root/motor/dcm_test");
process->waitForStarted();
}
// 关闭电机槽函数
void Widget::on_pb_motor_off_clicked()
{
QProcess *process = new QProcess;
process->start("/root/motor/motor_stop.sh");
process->waitForStarted();
}
// 开启双数码管槽函数
void Widget::on_pb_led_on_clicked()
{
QProcess *process = new QProcess;
process->start("/root/leds/magicleds_test");
qDebug()<<"Exec leds app...";
process->waitForStarted();
}
// 关闭双数码管槽函数
void Widget::on_pb_led_off_clicked()
{
QProcess *process = new QProcess;
process->start("/root/leds/leds_stop.sh");
process->waitForStarted();
}
// 开启蜂鸣器 LED 槽函数
void Widget::on_pb_buzzer_on_clicked()
{ QProcess *process = new QProcess;
QStringList str;
str.clear();
str << "1" << "1";
process->start("/root/buzzer/gpio_test",str);
process->waitForStarted();
}
// 关闭蜂鸣器 LED 槽函数
void Widget::on_pb_buzzer_off_clicked()
{
QProcess *process = new QProcess;
QStringList str;
str.clear();
str << "0" << "0";
process->start("/root/buzzer/gpio_test",str);
process->waitForStarted();
}
// 开启点阵 LCD 槽函数
void Widget::on_pb_matrix_on_clicked()
{
QProcess *process = new QProcess;
process->start("/root/lcd/s3c24xx_lcd_test");
process->waitForStarted();
}
// 关闭点阵 LCD 槽函数
void Widget::on_pb_matrix_off_clicked()
{
QProcess *process = new QProcess;
process->start("/root/lcd/lcd_stop.sh");
process->waitForStarted();
}
现在这个设计成了我们实验室的展示作品了,对传感器的很完善,我的得意作品之一。