// Pin definitions
const uint8_t numDigitalPins = 12; // Digital pins 2 to 13 (exclude 0 and 1)
const uint8_t numAnalogPins = 8; // Analog pins A0 to A7
const uint8_t firstDigitalPin = 2; // Start from pin 2
void setup() {
// Initialize all digital pins 2 to 13 as inputs with pull-up resistors
for (int i = firstDigitalPin; i < 14; i++) {
pinMode(i, INPUT_PULLUP);
}
// Start serial communication
Serial.begin(115200);
}
void loop() {
// Read digital pin states using direct port manipulation
uint16_t digitalStates = 0;
// PORTD (pins 2-7)
uint8_t portDState = PIND >> 2; // Shift right to exclude pins 0 and 1
digitalStates |= portDState & 0x3F; // Keep only 6 bits (pins 2-7)
// PORTB (pins 8-13)
uint8_t portBState = PINB;
digitalStates |= (portBState & 0x3F) << 6; // Shift left by 6 bits to append pins 8-13
// Read analog pin values
int analogValues[numAnalogPins];
for (int i = 0; i < numAnalogPins; i++) {
analogValues[i] = analogRead(i);
}
// Send all values via serial
// Print digital states (bitfield)
for (int i = 0; i < numDigitalPins; i++) {
Serial.print((digitalStates & (1 << i)) ? "1 " : "0 "); // Print each digital input state (1 or 0)
}
// Print analog values
for (int i = 0; i < numAnalogPins; i++) {
Serial.print(analogValues[i]);
if (i < numAnalogPins - 1 || numDigitalPins > 0) {
Serial.print(" ");
}
}
Serial.println(); // End line after sending all values
}