通过Qt界面控制步进电机的启停

一、实验目的

了解Qt界面与开发板底层硬件之间的调用机制

 


二、实验方法

1,在QT程序中,新建一件,再添加一个用于操作硬件的新方法,如controlMachine,建立按钮与con个属于你自己的类,如Widget用于显示。
2,在你的类中添加按钮控trolMachine函数之间的信号与槽机制(使用connect函数)。
3,完善你的controlMachine函数,在函数中实现:读取Edit中变量的值,放在你的新变量中,使用Linux系统函数open打开设备文件,调用::ioctl函数(在QT中直接调用系统函数前边得加::两个冒号),使用ioctl传入参数,然后关闭文件。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "unistd.h"
static int dcm_fd = -1;
char *DCM_DEV="/dev/s3c2440-dc-motor0";

int k=0;

#define DCM_IOCTRL_SETPWM 			(0x10)
#define DCM_TCNTB0				(16384)



/*
void Delay(int t)
{
        int i;
        for(;t>0;t--)
                for(i=0;i<400;i++);
}*/

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{

    int i = 0;
    int status = 1;
    int setpwm = 0;
    int factor = DCM_TCNTB0;



    if(k==0){

        if((dcm_fd=open(DCM_DEV, O_WRONLY))<0){
                printf("Error opening %s device\n", DCM_DEV);
                //return 1;

        }

        for (i=-512; i<=512; i++) {
                if(status == 1)
                       setpwm = i;
                else
                        setpwm = -i;
                ioctl(dcm_fd, DCM_IOCTRL_SETPWM, (100 * factor));
                // Delay(500);
                //printf("setpwm = %d \n", setpwm);
         }
        k=1;
    }

    else
    {
        k=0;
        ::close(dcm_fd);
    }






    //close(dcm_fd);

}


你可能感兴趣的:(c/c++)