diff --git a/Arduino/arduino.py b/Arduino/arduino.py index 58bc020..0213f17 100755 --- a/Arduino/arduino.py +++ b/Arduino/arduino.py @@ -24,7 +24,7 @@ def enumerate_serial_ports(): key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path) except WindowsError: raise Exception - + for i in itertools.count(): try: val = winreg.EnumValue(key, i) @@ -110,6 +110,7 @@ class Arduino(object): self.sr = sr self.SoftwareSerial = SoftwareSerial(self) self.Servos = Servos(self) + self.EEPROM = EEPROM(self) def version(self): return get_version(self.sr) @@ -556,3 +557,61 @@ class SoftwareSerial(object): return response else: return False + + +class EEPROM(object): + """ + Class for reading and writing to EEPROM. + """ + + def __init__(self, board): + self.board = board + self.sr = board.sr + + def size(self): + """ + Returns size of EEPROM memory. + """ + cmd_str = build_cmd_str("sz") + + try: + self.sr.write(cmd_str) + self.sr.flush() + response = self.sr.readline().replace("\r\n", "") + return int(response) + except: + return 0 + + def write(self, address, value=0): + """ Write a byte to the EEPROM. + + :address: the location to write to, starting from 0 (int) + :value: the value to write, from 0 to 255 (byte) + """ + + if value > 255: + value = 255 + elif value < 0: + value = 0 + cmd_str = build_cmd_str("eewr", (address, value)) + try: + self.sr.write(cmd_str) + self.sr.flush() + except: + pass + + def read(self, adrress): + """ Reads a byte from the EEPROM. + + :address: the location to write to, starting from 0 (int) + """ + cmd_str = build_cmd_str("eer", (adrress,)) + try: + self.sr.write(cmd_str) + self.sr.flush() + response = self.sr.readline().replace("\r\n", "") + if response: + return int(response) + except: + return 0 + \ No newline at end of file diff --git a/sketches/prototype/prototype.ino b/sketches/prototype/prototype.ino index 867c360..d02e98e 100644 --- a/sketches/prototype/prototype.ino +++ b/sketches/prototype/prototype.ino @@ -1,6 +1,7 @@ #include #include #include +#include SoftwareSerial *sserial = NULL; Servo servos[8]; @@ -136,6 +137,7 @@ void AnalogHandler(int mode, String data){ if(mode<=0){ //read int pin = Str2int(data); Serial.println(analogRead(pin)); + }else{ String sdata[2]; split(sdata,2,data,'%'); @@ -147,6 +149,7 @@ void AnalogHandler(int mode, String data){ void ConfigurePinHandler(String data){ int pin = Str2int(data); + if(pin <=0){ pinMode(-pin,INPUT); }else{ @@ -155,6 +158,7 @@ void ConfigurePinHandler(String data){ } void shiftOutHandler(String data) { + String sdata[4]; split(sdata, 4, data, '%'); int dataPin = sdata[0].toInt(); @@ -301,6 +305,19 @@ void SV_write_ms(String data) { servos[pos].writeMicroseconds(uS); } +void sizeEEPROM() { + Serial.println(E2END + 1); +} + +void EEPROMHandler(int mode, String data) { + String sdata[2]; + split(sdata, 2, data, '%'); + if (mode == 0) { + EEPROM.write(Str2int(sdata[0]), Str2int(sdata[1])); + } else { + Serial.println(EEPROM.read(Str2int(sdata[0]))); + } +} void SerialParser(void) { char readChar[64]; @@ -377,6 +394,15 @@ void SerialParser(void) { else if (cmd == "si") { shiftInHandler(data); } + else if (cmd == "eewr") { + EEPROMHandler(0, data); + } + else if (cmd == "eer") { + EEPROMHandler(1, data); + } + else if (cmd == "sz") { + sizeEEPROM(); + } }