#include "scope.h"#include <QPainter>#include <QString>#include <iostream>#include <stdio.h>using namespace std;#define LEN 256#define DEF_SCALE 64#define DEF_SHIFT 0#define LEFT 10#define WIDTH 512#define HEIGHT 600#define PIXPT 2Scope::Scope(QWidget *parent) {dataAquired=0;head=-1;data=new long[LEN*sizeof(long)]; ;int i;for(i=1;i<LEN;i++)data[i]=0;scale=DEF_SCALE;shift=DEF_SHIFT;scaleSlider = new QSlider(Qt::Horizontal);scaleSlider->setRange(1, 128);scaleSlider->setValue(DEF_SCALE);connect(scaleSlider, SIGNAL(valueChanged(int)), this, SLOT(setScale(int)));shiftSlider = new QSlider(Qt::Horizontal);shiftSlider->setRange(-60000, +60000);shiftSlider->setValue(DEF_SHIFT);connect(shiftSlider, SIGNAL(valueChanged(int)), this, SLOT(setShift(int)));updateTimer = new QTimer(this);updateTimer->start(1);connect(updateTimer, SIGNAL(timeout()), this, SLOT(getData()));scaleSlider->setGeometry(QRect(50,250,400,10));scaleSlider->show();shiftSlider->setGeometry(QRect(50,300,800,10));shiftSlider->show();}Scope::~Scope() {delete [] data;}void Scope::paintEvent(QPaintEvent* event) {QPainter painter(this);if (head>-1)painter.drawText(10,20,QString::number(data[head]));if (dataAquired) {painter.drawLine(LEFT-1,45,LEFT-1,HEIGHT);painter.drawLine(LEFT+WIDTH,45,LEFT+WIDTH,HEIGHT);painter.drawLine(LEFT-1,45,LEFT+WIDTH,45);painter.drawLine(LEFT-1,HEIGHT,LEFT+WIDTH,HEIGHT);painter.drawLine(LEFT-1,HEIGHT/2,LEFT+WIDTH,HEIGHT/2);int i;data[head] = (data[head] + shift)/scale;data[head] = data[head] + HEIGHT/2;for(i=head+1;i<LEN-1;i++)painter.drawLine(PIXPT*(i-head)+LEFT,HEIGHT-data[i],PIXPT*(i-head+1)+LEFT,HEIGHT-data[i+1]);painter.drawLine(PIXPT*(LEN-head-1)+LEFT,HEIGHT-data[LEN-1],PIXPT*(LEN-head+1)+LEFT,HEIGHT-data[0]);for(i=0;i<head;i++)painter.drawLine(PIXPT*(i+LEN-head)+LEFT,HEIGHT-data[i],PIXPT*(i+LEN-head+1)+10,HEIGHT-data[i+1]);}}void Scope::getData() {char c='v';FILE *serial=fopen("/dev/ttyUSB0","r+");fwrite(&c,sizeof(char),1,serial); // poprosime o dataif (head != LEN-1)head++;elsehead=0;fscanf(serial,"%ld",&data[head]);fclose(serial);cout << data[head] <<endl;if (head>0)dataAquired=1;update();}void Scope::setScale(int val) {scale=val;}void Scope::setShift(int val) {shift=val;}