From a64aa908b812e0f3ae7f3e6fa1f859fba139f88e Mon Sep 17 00:00:00 2001 From: Morten Kals Date: Thu, 2 May 2019 16:14:19 -0700 Subject: [PATCH] misc --- pypi_commands.txt | 2 + setup.py | 2 +- .../prototype_extended/prototype_extended.ino | 463 ++++++++++++++++++ 3 files changed, 466 insertions(+), 1 deletion(-) create mode 100644 pypi_commands.txt create mode 100644 sketches/prototype_extended/prototype_extended.ino diff --git a/pypi_commands.txt b/pypi_commands.txt new file mode 100644 index 0000000..4b709a3 --- /dev/null +++ b/pypi_commands.txt @@ -0,0 +1,2 @@ +python3 setup.py sdist bdist_wheel +python3 -m twine upload dist/* diff --git a/setup.py b/setup.py index d4bbef4..6a52f2b 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open("README.md", "r") as fh: setuptools.setup( name="arduino-python3", - version="0.4", + version="0.4.1", install_requires=['pyserial'], author="Morten Kals", author_email="morten@kals.no", diff --git a/sketches/prototype_extended/prototype_extended.ino b/sketches/prototype_extended/prototype_extended.ino new file mode 100644 index 0000000..418c297 --- /dev/null +++ b/sketches/prototype_extended/prototype_extended.ino @@ -0,0 +1,463 @@ +#include +#include +#include +#include +#include + +void Version(){ + Serial.println(F("V0.4")); +} + + +SoftwareSerial *sserial = NULL; +Servo servos[8]; +int servo_pins[] = {0, 0, 0, 0, 0, 0, 0, 0}; +boolean connected = false; + +int Str2int (String Str_value) +{ + char buffer[10]; //max length is three units + Str_value.toCharArray(buffer, 10); + int int_value = atoi(buffer); + return int_value; +} + +void split(String results[], int len, String input, char spChar) { + String temp = input; + for (int i=0; ibegin(baud_); + Serial.println("ss OK"); +} + +void SS_write(String data) { + int len = data.length()+1; + char buffer[len]; + data.toCharArray(buffer,len); + Serial.println("ss OK"); + sserial->write(buffer); +} +void SS_read(String data) { + char c = sserial->read(); + Serial.println(c); +} + +void pulseInHandler(String data){ + int pin = Str2int(data); + long duration; + if(pin <=0){ + pinMode(-pin, INPUT); + duration = pulseIn(-pin, LOW); + }else{ + pinMode(pin, INPUT); + duration = pulseIn(pin, HIGH); + } + Serial.println(duration); +} + +void pulseInSHandler(String data){ + int pin = Str2int(data); + long duration; + if(pin <=0){ + pinMode(-pin, OUTPUT); + digitalWrite(-pin, HIGH); + delayMicroseconds(2); + digitalWrite(-pin, LOW); + delayMicroseconds(5); + digitalWrite(-pin, HIGH); + pinMode(-pin, INPUT); + duration = pulseIn(-pin, LOW); + }else{ + pinMode(pin, OUTPUT); + digitalWrite(pin, LOW); + delayMicroseconds(2); + digitalWrite(pin, HIGH); + delayMicroseconds(5); + digitalWrite(pin, LOW); + pinMode(pin, INPUT); + duration = pulseIn(pin, HIGH); + } + Serial.println(duration); +} + +void SV_add(String data) { + String sdata[3]; + split(sdata,3,data,'%'); + int pin = Str2int(sdata[0]); + int min = Str2int(sdata[1]); + int max = Str2int(sdata[2]); + int pos = -1; + for (int i = 0; i<8;i++) { + if (servo_pins[i] == pin) { //reset in place + servos[pos].detach(); + servos[pos].attach(pin, min, max); + servo_pins[pos] = pin; + Serial.println(pos); + return; + } + } + for (int i = 0; i<8;i++) { + if (servo_pins[i] == 0) {pos = i;break;} // find spot in servo array + } + if (pos == -1) {;} //no array position available! + else { + servos[pos].attach(pin, min, max); + servo_pins[pos] = pin; + Serial.println(pos); + } +} + +void SV_remove(String data) { + int pos = Str2int(data); + servos[pos].detach(); + servo_pins[pos] = 0; +} + +void SV_read(String data) { + int pos = Str2int(data); + int angle; + angle = servos[pos].read(); + Serial.println(angle); +} + +void SV_write(String data) { + String sdata[2]; + split(sdata,2,data,'%'); + int pos = Str2int(sdata[0]); + int angle = Str2int(sdata[1]); + servos[pos].write(angle); +} + +void SV_write_ms(String data) { + String sdata[2]; + split(sdata,2,data,'%'); + int pos = Str2int(sdata[0]); + int uS = Str2int(sdata[1]); + 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]))); + } +} + +int dhtSensorPin = -1; +DHT dhtSensor(dhtSensorPin, DHT11); + +void dht(String data) { + + String sdata[2]; + split(sdata, 2, data, '%'); + int dataPin = sdata[0].toInt(); + int sensorNumber = sdata[1].toInt(); + + int sensorType = DHT11; // assume DHT11 as default + if (sensorNumber == 1) { + sensorType = DHT12; + } else if (sensorNumber == 2) { + sensorType = DHT21; + } else if (sensorNumber == 2) { + sensorType = DHT22; + } else if (sensorNumber == 2) { + sensorType = AM2301; + } + + // do not initialize new sensor if we are reading repeatedly from same sensor + if (dataPin != dhtSensorPin) { + dhtSensorPin = dataPin; + dhtSensor = DHT(dataPin, sensorType); + dhtSensor.begin(); + } + + // Reading temperature or humidity takes about 250 milliseconds! + // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) + float h = dhtSensor.readHumidity(); + // Read temperature as Celsius (the default) + float t = dhtSensor.readTemperature(); + + if (isnan(h) || isnan(t)) { + Serial.println("0&0&0"); + return; + } + + float hic = dhtSensor.computeHeatIndex(t, h, false); + Serial.println(String(h) + "&" + String(t) + "&" + String(hic)); +} + +void SerialParser(void) { + char readChar[64]; + Serial.readBytesUntil(33,readChar,64); + String read_ = String(readChar); + //Serial.println(readChar); + int idx1 = read_.indexOf('%'); + int idx2 = read_.indexOf('$'); + // separate command from associated data + String cmd = read_.substring(1,idx1); + String data = read_.substring(idx1+1,idx2); + + // determine command sent + if (cmd == "dw") { + DigitalHandler(1, data); + } + else if (cmd == "dr") { + DigitalHandler(0, data); + } + else if (cmd == "aw") { + AnalogHandler(1, data); + } + else if (cmd == "ar") { + AnalogHandler(0, data); + } + else if (cmd == "pm") { + ConfigurePinHandler(data); + } + else if (cmd == "ps") { + pulseInSHandler(data); + } + else if (cmd == "pi") { + pulseInHandler(data); + } + else if (cmd == "ss") { + SS_set(data); + } + else if (cmd == "sw") { + SS_write(data); + } + else if (cmd == "sr") { + SS_read(data); + } + else if (cmd == "sva") { + SV_add(data); + } + else if (cmd == "svr") { + SV_read(data); + } + else if (cmd == "svw") { + SV_write(data); + } + else if (cmd == "svwm") { + SV_write_ms(data); + } + else if (cmd == "svd") { + SV_remove(data); + } + else if (cmd == "version") { + Version(); + } + else if (cmd == "to") { + Tone(data); + } + else if (cmd == "nto") { + ToneNo(data); + } + else if (cmd == "cap") { + readCapacitivePin(data); + } + else if (cmd == "so") { + shiftOutHandler(data); + } + 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(); + } + else if (cmd == "dht") { + dht(data); + } +} + +void setup() { + Serial.begin(115200); + while (!Serial) { + ; // wait for serial port to connect. Needed for Leonardo only + } + Serial.println("connected"); +} + +void loop() { + SerialParser(); +}