Не могу отправить данные с одного пина на другой

Добавил кнопку со скриптом устранения дребезга в скетч SimpleDigitalFirmata. Таким образом, он должен был считывать данные с вывода, который передает сигнал с компьютера. Но не взлетело. При этом пины работают отдельно! Т.е. если подключить светодиод к цифровому выходу - светится, если управлять входом кнопкой с 5В, то тоже работает. Также после подключения 13 пина (OUTPUT) ко 2 пину (INPUT) встроенный светодиод теряет яркость

#include <Firmata.h>

byte previousPIN[TOTAL_PORTS];  // PIN means PORT for input
byte previousPORT[TOTAL_PORTS];


const int LED=8;             //The LED is connected to pin 9
const int BUTTON=2;          //The Button is connected to pin 2
boolean lastButton = LOW;    //Variable containing the previous button state
boolean currentButton = LOW; //Variable containing the current button state
boolean ledOn = false;       //The present state of the LED (on/off)


void outputPort(byte portNumber, byte portValue)
{
  // only send the data when it changes, otherwise you get too many messages!
  if (previousPIN[portNumber] != portValue) {
    Firmata.sendDigitalPort(portNumber, portValue);
    previousPIN[portNumber] = portValue;
  }
}

void setPinModeCallback(byte pin, int mode) {
  if (IS_PIN_DIGITAL(pin)) {
    pinMode(PIN_TO_DIGITAL(pin), mode);
  }
}

void digitalWriteCallback(byte port, int value)
{
  byte i;
  byte currentPinValue, previousPinValue;

  if (port < TOTAL_PORTS && value != previousPORT[port]) {
    for (i = 0; i < 8; i++) {
      currentPinValue = (byte) value & (1 << i);
      previousPinValue = previousPORT[port] & (1 << i);
      if (currentPinValue != previousPinValue) {
        digitalWrite(i + (port * 8), currentPinValue);
      }
    }
    previousPORT[port] = value;
  }
}

void setup()
{
  Firmata.setFirmwareVersion(FIRMATA_FIRMWARE_MAJOR_VERSION, FIRMATA_FIRMWARE_MINOR_VERSION);
  Firmata.attach(DIGITAL_MESSAGE, digitalWriteCallback);
  Firmata.attach(SET_PIN_MODE, setPinModeCallback);
  Firmata.begin(57600);
  pinMode(2, OUTPUT);
  pinMode (LED, OUTPUT);     //Set the LED pin as an output
  pinMode (BUTTON, INPUT);   //Set button as input (not required)
}


boolean debounce(boolean last)
{
  boolean current = digitalRead(BUTTON);       //Read the button state
  if (last != current)                         //if it's different…
  {
    delay(5);                                  //wait 5ms
    current = digitalRead(BUTTON);             //read it again
  }
  return current;                              //return the current value
}

void loop()
{
  byte i;

  for (i = 0; i < TOTAL_PORTS; i++) {
    outputPort(i, readPort(i, 0xff));
  }

  while (Firmata.available()) {
    Firmata.processInput();
  }


  currentButton = debounce(lastButton);              //read debounced state
  if (lastButton == LOW && currentButton == HIGH)    //if it was pressed…
  {
    ledOn = !ledOn;                                  //toggle the LED value
  }
  lastButton = currentButton;                        //reset button value

  digitalWrite(LED, ledOn); 


}

Ответы (1 шт):

Автор решения: DrMcSheen

Для начала вот с этим разберись

pinMode(2, OUTPUT);
pinMode (LED, OUTPUT);  
pinMode (BUTTON, INPUT); 

У тебя BUTTON на втором пине висит

→ Ссылка