/Designs/Fluxgate_magnetometer/SW/PC_side/logger/scope.cpp
0,0 → 1,119
#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 2
 
Scope::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 data
 
if (head != LEN-1)
head++;
else
head=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;
}