For this week assignment I decided to use my trusted hello board. My plan was to build a simple interface for toggling the led and keeping track of how button presses.
            First of all I wrote the code for my board, for my idea was to make several interfaces, using different programming languages, sharing the same functionalities.
            Here is my board code:
          
            
#include < SoftwareSerial.h >
#define TX 1
#define RX 0
#define LED 8
#define BTN 7
int leddino = 1;
int btnState = 0;
int btnStateOld = 0;
int presses = 0;
SoftwareSerial mySerial(RX, TX);
void setup() {
  mySerial.begin(9600);
  pinMode(LED, OUTPUT);
  pinMode(BTN, INPUT_PULLUP);
  digitalWrite(LED, HIGH);
}
void loop() {
  while (mySerial.available() > 0) {
    leddino = mySerial.parseInt();
    if (leddino == 1) {
      digitalWrite(LED, HIGH);
    }
    else {
      digitalWrite(LED, LOW);
    }
  }
  delay(10);
  btnState = digitalRead(BTN);
  if (btnState != btnStateOld) {
    if (btnState == 0) {
      presses++;
      mySerial.println(presses);
    } 
    delay(50);
  }
  btnStateOld = btnState;
}
            
          
          Nothing to see here, just your run-of-the-mill edge detection. The only thing worth nothing is in line 17, where I set my pin as output, enabling the internal pullup in order to prevent my pin to fluctuate randomly
I decided to use the QT framework and its python bindings. First of all I designed the interface using QT composer, a WYSIWYG editor
 
          I then set up the proper virtual environment for my code (virtual environments in python3) and installed the PySerial and PyQT5 modules from the Python Package Index using pip ("source venv/bin/activate && pip install PyQT5 && pip install pyserial"). Here is the output of a "pip freeze":
            
(venv) sgrc@t420:~/fabacademy2017/doc/week16-interfaces/code/qt$ pip freeze
pkg-resources==0.0.0
PyQt5==5.8.2
pyserial==3.3
sip==4.19.2
            
          
          And here is the code for the interface
            
#!/usr/bin/env python3
import serial
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QWidget, QDialog
serial_port = '/dev/ttyUSB0'
baudrate = 9600
ser = serial.Serial(serial_port, baudrate, write_timeout=1.0, timeout=1)
class hello_win(QDialog):
    def __init__(self, parent=None):
        super(hello_win, self).__init__(parent)
        self.initUI()
    def initUI(self):
        uic.loadUi('ui.ui', self)
        self.setWindowTitle('Hello board control panel')
        self.pushButton.clicked.connect(self.led_on)
        self.pushButton_2.clicked.connect(self.led_off)
        self.pushButton_3.clicked.connect(self.check_button)
        self.show()
    def led_on(self):
        ser.write(b'1')
        return ser.flush()
    def led_off(self):
        ser.write(b'0')
        return ser.flush()
    def check_button(self, check=0):
        try:
            check = int(ser.readline().decode("utf-8"))
        except ValueError:
            pass
        return self.lcdNumber.display(check)
################
##  Start it  ##
################
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = hello_win()
    sys.exit(app.exec_())
            
          
          
            Quite self explantory. I could have used a QTimer class (with 0 delay) or a separate thread in order to check the button presses in (semi) real time, but I decided to keep it as simple as possible for the time being.
            Here is a video of the finished product:
          
            I haven't been able to test all the things I had in mind this week, and the lack of a js attempt is a disappointment; I hope I'll make amend as soon as possible.
This being said, I really liked using the python bindings for the QT: it's a powerful framework that gets things done quickly with a very good portability am