diff --git a/arduino/arduino.py b/arduino/arduino.py index ae8ec42..17f1eeb 100644 --- a/arduino/arduino.py +++ b/arduino/arduino.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +# -*- coding: utf-8 -*- import serial @@ -8,6 +9,7 @@ class Arduino(object): def __init__(self, port, baudrate=115200): self.serial = serial.Serial(port, baudrate) + self.serial.write(b'99') def __str__(self): return "Arduino is on port %s at %d baudrate" %(self.serial.port, self.serial.baudrate) @@ -55,10 +57,13 @@ def turnOff(self): def __sendData(self, serial_data): while(self.__getData()[0] != "w"): pass - self.serial.write(str(serial_data)) + serial_data = str(serial_data).encode('utf-8') + self.serial.write(serial_data) def __getData(self): - return self.serial.readline().rstrip('\n') + input_string = self.serial.readline() + input_string = input_string.decode('utf-8') + return input_string.rstrip('\n') def __formatPinState(self, pinValue): if pinValue == '1': diff --git a/prototype.pde b/prototype.pde index 11bc7f0..524d5ae 100644 --- a/prototype.pde +++ b/prototype.pde @@ -1,6 +1,15 @@ + +#ifndef SERIAL_RATE +#define SERIAL_RATE 115200 +#endif + +#ifndef SERIAL_TIMEOUT +#define SERIAL_TIMEOUT 5 +#endif + void setup() { - Serial.begin(115200); - Serial.setTimeout(5); + Serial.begin(SERIAL_RATE); + Serial.setTimeout(SERIAL_TIMEOUT); int cmd = readData(); for (int i = 0; i < cmd; i++) { @@ -24,7 +33,11 @@ void loop() { analogWrite(readData(), readData()); break; case 4 : //read analog value - Serial.println(analogRead(readData())); + Serial.println(analogRead(readData())); break; + case 99: + //just dummy to cancel the current read, needed to prevent lock + //when the PC side dropped the "w" that we sent + break; } } @@ -35,4 +48,4 @@ char readData() { return Serial.parseInt(); } } -} \ No newline at end of file +}