#include "widget.h"
#include "ui_widget.h"
#include <QElapsedTimer>
//#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
#include <wiringPi.h>
//#include<unistd.h> //提供usleep()函数
//#include <sys/time.h>
//#include <math.h>
#include<iostream>
#include <QMouseEvent>
#include"QDir"
#include"QFileDialog"
#include <qfile.h>
#include <qtextstream.h>
#include <QStringListModel>
#include <QLabel>
using namespace std;
double Widget::a=0;
double Widget::b=0;
double Widget::x0 = 0;//激光起始位置
double Widget::y0 = 0;
int Widget::xflag = 1; //x轴步进电机拍数
int Widget::yflag = 1; //y轴步进电机拍数
int Widget::ext_x = 0;
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QImage *img =new QImage;
QImage *im =new QImage;
img->load("/home/pi/Desktop/untitled/shu1.png");
//ui->shu->resize(img->width(),img->height());
*im = img->scaled(
ui->picture->width(),
ui->picture->height(),
Qt::KeepAspectRatio
//Qt::FastTransformation
);
ui->picture->setPixmap(QPixmap::fromImage(*im));
//int motor::flag = 1; //节拍数
wiringPiSetup();
pinMode(xpins[0], OUTPUT);
pinMode(xpins[1], OUTPUT);
pinMode(xpins[2], OUTPUT);
pinMode(xpins[3], OUTPUT);
pinMode(ypins[0], OUTPUT);
pinMode(ypins[1], OUTPUT);
pinMode(ypins[2], OUTPUT);
pinMode(ypins[3], OUTPUT);
pinMode(29, OUTPUT);
digitalWrite(29,LOW);
usleep(50000);
//QObject::connect(ui->Mleft,SIGNAL(clicked()),this,SLOT(XLdriver(double , int )));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_Mleft_clicked()
{
XLdriver(1, xpins );
}
void Widget::on_Mright_clicked()
{
XRdriver(1, xpins );
}
void Widget::on_Mfwrod_clicked()
{
YRdriver(1, ypins );
}
void Widget::on_Mback_clicked()
{
YLdriver(1, ypins );
}
void Widget::on_toolButton_clicked()
{
ui->comboBox->clear();
QString path = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(this,tr("view file"),QDir::currentPath()));
Path=path;
ui->lable->setText(path);
QDir dir(path);
dir.setFilter(QDir::Files | QDir::NoDotAndDotDot | QDir::Dirs);
QFileInfoList list = dir.entryInfoList();
for(int i=0;i<list.length();i++){
QString file = list.at(i).fileName();
ui->comboBox->addItem(file);
}
}
void Widget::on_start_clicked()
{
Start=1;
char Gcode[1024];
QString string=ui->comboBox->currentText();
QString pt = Path + "/" + string;
//pt.replace("/","\\");
QFile file(pt);
file.open(QIODevice::ReadOnly);
QTextStream R(&file);
while(!R.atEnd()){
if(Start==1){
if(Stop==1){
QString text=R.readLine();
ui->TB->append("当前读取的数据: ");
ui->TB->append(text);
char* ptr;
QByteArray ba;
ba = text.toLatin1();
ptr = ba.data();
memcpy(Gcode,ptr,1024);
moveflag=0;
ui->TB->append("解释读取到数据的含义: ");
explain(Gcode);
execute(comand,x,y,i,j,xpins,ypins);
ui->XN->display(x);
ui->YN->display(y);
}
}
else{
return;
}
QApplication::processEvents();
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
file.close();
}
/*
void Widget::on_PT_clicked()
{
QColor Color;
//QString path1=ui->comboBox->currentText();
//QString pt1 = Path + "/" + path1;
QString pt1 = "/home/pi/Desktop/timg.jpg";
QImage image;
image.load(pt1);
cout<<image.width()<<image.height();
for(int i=0; i<image.height(); i++){
YRdriver(0.270,ypins);
for(int j=0;j<image.width(); j++){
Color = QColor(image.pixel(i,j));//获取图片的每一个像素点的值
if(Color.red()==255&&Color.blue()==255&&Color.green()==255){
digitalWrite(29,LOW);
XRdriver(0.270,xpins);
}
else{
digitalWrite(29,HIGH);
XRdriver(0.270,xpins);
}
}
if(i<image.height()){
i++;
}
//XLdriver(143.425,xpins);
for(int p=image.width();p>0; p--){
Color = QColor(image.pixel(i,p));//获取图片的每一个像素点的值
if(Color.red()==255&&Color.blue()==255&&Color.green()==255){
digitalWrite(29,LOW);
XRdriver(0.270,xpins);
}
else{
digitalWrite(29,HIGH);
XRdriver(0.270,xpins);
}
}
}
}
*/
void Widget::on_stop_clicked()
{
if(Stop==1){
Stop=0;
ui->stop->setText("CONTINUE");
}
else{
Stop=1;
ui->stop->setText("PAUSE");
}
}
void Widget::on_speed_textChanged(const QString &arg1)
{
A=arg1.toInt();
//ui->TB->append(QString::number(A,10,5));
}
void Widget::on_laser_clicked()
{
if(digitalRead(29)==HIGH){
ui->laser->setText("LASER ON");
digitalWrite(29,LOW);
}
else if(digitalRead(29)==LOW){
ui->laser->setText("LASER OFF");
digitalWrite(29,HIGH);
}
else{
ui->laser->setText("LASER");
}
}
//读取缓冲区里面的double数据并保存到figure里面
void Widget::readNum(char gcode[]) {
++ext_x;
//char tmp;
double x, sign, multiple;//x:小数点前的数,y:小数点后的数,sign:正负
double y = 0;
//tmp = gcode[ext_x];
if (isChar(gcode[ext_x]) != 1 && gcode[ext_x] != '\0') { //判断缓冲区里的值
sign = ((gcode[ext_x] == '-') ? -1 : 1); //判断正负
if (gcode[ext_x] == '-' || gcode[ext_x] == '+') {
++ext_x; //判断正负,后移一位
}
for (x = 0; isDigit(gcode[ext_x]) == 1; ext_x++) { //读取小数点前的数值
x = x * 10.0 + (gcode[ext_x] - '0');
}
if (gcode[ext_x] == '.') {
++ext_x;
}
for (multiple = 1.0; isDigit(gcode[ext_x]) == 1; ext_x++) { //读取小数点后的数值
y = y * 10.0 + (gcode[ext_x] - '0');
multiple = multiple * 10;
}
figure = sign * (x + y / multiple);
while (isChar(gcode[ext_x]) != 1 && gcode[ext_x] != '\0') {
++ext_x; //读取到空格后移一位
}
}
else {
return;
}
--ext_x;
}
//判断读取到的命令是(G,M,F,I,J)的哪一种
void Widget::explain(char gcode[]) {
for (ext_x = 0; gcode[ext_x] != '\0'; ext_x++) {
char tmp = gcode[ext_x];
if (isChar(tmp) != 1) {
return;
}
readNum(gcode);//读取字符后面的数值,保存到全局变量figuer中
//cout << figure << endl; //测试readnum函数是否正确
switch (tmp) {
case 'G': //G命令
{
//FG = (int)figure; //switch只能转换整形或define型
switch ((int)figure) {
case 0: //G00快速定位
comand = 0;
moveflag =1;
break;
case 1: //G01直线插补法
comand = 1;
moveflag =1;
break;
case 2: //G02顺时针方向圆弧插补
comand = 2;
moveflag =1;
break;
case 3: //G03�