void StepperFirmata::handleCapability(byte pin) { if (IS_PIN_DIGITAL(pin)) { Firmata.write(STEPPER); Firmata.write(21); //21 bits used for number of steps } }
uint8_t readPort(uint8_t port, uint8_t bitmask) { uint8_t out=0, pin=port*8; if ((IS_PIN_DIGITAL(pin+0)) && (bitmask & 0x01) && ( digitalRead(pin+0))) out |= 0x01; if ((IS_PIN_DIGITAL(pin+1)) && (bitmask & 0x02) && ( digitalRead(pin+1))) out |= 0x02; if ((IS_PIN_DIGITAL(pin+2)) && (bitmask & 0x04) && ( digitalRead(pin+2))) out |= 0x04; if ((IS_PIN_DIGITAL(pin+3)) && (bitmask & 0x08) && ( digitalRead(pin+3))) out |= 0x08; if ((IS_PIN_DIGITAL(pin+4)) && (bitmask & 0x10) && ( digitalRead(pin+4))) out |= 0x10; if ((IS_PIN_DIGITAL(pin+5)) && (bitmask & 0x20) && ( digitalRead(pin+5))) out |= 0x20; if ((IS_PIN_DIGITAL(pin+6)) && (bitmask & 0x40) && ( digitalRead(pin+6))) out |= 0x40; if ((IS_PIN_DIGITAL(pin+7)) && (bitmask & 0x80) && ( digitalRead(pin+7))) out |= 0x80; return out; }
boolean StepperFirmata::handlePinMode(byte pin, int mode) { if (mode == STEPPER) { if (IS_PIN_DIGITAL(pin)) { digitalWrite(PIN_TO_DIGITAL(pin), LOW); // disable PWM pinMode(PIN_TO_DIGITAL(pin), OUTPUT); return true; } } return false; }
boolean AnalogInputFirmata::handlePinMode(byte pin, int mode) { if (IS_PIN_ANALOG(pin)) { if (mode == PIN_MODE_ANALOG) { reportAnalog(PIN_TO_ANALOG(pin), 1); // turn on reporting if (IS_PIN_DIGITAL(pin)) { pinMode(PIN_TO_DIGITAL(pin), INPUT); // disable output driver } return true; } else { reportAnalog(PIN_TO_ANALOG(pin), 0); // turn off reporting } } return false; }