{
case 'I':
Serial.println(F("LivingScreen"));
- //Serial.flush();
break;
//relative translation
case 'T':
- //Serial.print("Translate ");
- //Serial.println(value);
translate(value);
break;
//absolute movement
translate(value - pos);
break;
case 'R':
- //Serial.print("Rotate ");
- //Serial.println(value);
rotate(value);
break;
case 'A':
Serial.println(a);
break;
case 'C':
- //Serial.println("Calibration");
calibrate();
break;
case 'S':
Serial.println(rackwidth);
break;
default:
- Serial.print("Unknown command ");
- Serial.write(command);
- Serial.write('\n');
+ //Serial.print("Unknown command ");
+ //Serial.write(command);
+ //Serial.write('\n');
+ break;
}
}
{
c = Serial.read();
- if (c == '\n' || c == '\r')
+ if (c == '\n')// || c == '\r')
{
//if we have a command => evaluate it
- if (command)
+ if (command >= 'A' && command <= 'Z')
{
if (sign == NEGATIVE)
value = -value;
eval(command, value);
- //reset command
- command = 0;
- value = 0;
- sign = POSITIVE;
}
+ //reset command
+ command = 0;
+ value = 0;
+ sign = POSITIVE;
}
- else if (!command)
+ else if (!command && c >= 'A' && c <= 'Z')
command = c;
else if (c == '-')
sign = NEGATIVE;
value = value * 10 + (c - '0');
}
else
- delayMicroseconds(100);
+ delayMicroseconds(200);
}
buffer[nb] = '\0';
while(buffer[strlen(buffer)-1] == '\n' || buffer[strlen(buffer)-1] == '\r')
buffer[strlen(buffer)-1] = '\0';
- qDebug() << "Read" << buffer;
return QString(buffer);
}
return "";
#include <Force.h>
#include <GestureOutput.h>
#include <Peephole.h>
+#include <QTimer>
MenuPrincipal::MenuPrincipal(QWidget *parent) :
QMainWindow(parent),
{
Peephole * p= new Peephole(this);
p->show();
+ QTimer::singleShot(Peephole::updatedelay, p, SLOT(updatescreenpos()));
}
#include <MenuPrincipal.h>
#include <QScrollBar>
#include <QThread>
+#include <QTimer>
+
+const int Peephole::updatedelay = 100;
Peephole::Peephole(QWidget *parent) :
QMainWindow(parent),
screenpos(330),
+ previousscreenpos(330),
viewpos(0),
ui(new Ui::Fullscreen)
{
delete ui;
}
-void Peephole::scroll(int pos)
+// allows asynchronous udate
+// prevents flooding the device
+void Peephole::updatescreenpos()
{
- qDebug() << "Pos: " << pos;
- MenuPrincipal * menu = dynamic_cast<MenuPrincipal *>(this->parent());
- if (menu->getScreen())
+ if (screenpos != previousscreenpos)
{
- unsigned int min = ui->image->horizontalScrollBar()->minimum();
- unsigned int range = ui->image->horizontalScrollBar()->maximum() - min;
- if (range == 0)
- return;
- unsigned int dest = rackwidth * pos / range - min;
- qDebug() << "Move to" << dest;
- menu->getScreen()->moveto(dest);
- //We should make something better to prevent from flooding the screen
- QThread::msleep(20);
+ MenuPrincipal * menu = dynamic_cast<MenuPrincipal *>(this->parent());
+ if (menu->getScreen())
+ {
+ menu->getScreen()->moveto(screenpos);
+ previousscreenpos = screenpos;
+ }
}
+ QTimer::singleShot(updatedelay, this, SLOT(updatescreenpos()));
+}
+
+void Peephole::scroll(int pos)
+{
+ unsigned int min = ui->image->horizontalScrollBar()->minimum();
+ unsigned int range = ui->image->horizontalScrollBar()->maximum() - min;
+ if (range == 0)
+ return;
+ unsigned int dest = rackwidth * pos / range - min;
+ screenpos = dest;
}
public:
explicit Peephole(QWidget *parent = 0);
~Peephole();
+ static const int updatedelay;
public slots:
+ void updatescreenpos();
void scroll(int pos);
private:
- int screenpos, viewpos;
+ int screenpos, previousscreenpos, viewpos;
unsigned int rackwidth, bgwidth;
Ui::Fullscreen *ui;
QGraphicsScene _background;