snifer

(原创)基于ADI Blackfin STAMP的综合设计平台的设计与实现

0
阅读(4972)

又有新活动哇,好像我不能参加最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();
}

现在这个设计成了我们实验室的展示作品了,对传感器的很完善,我的得意作品之一。