Ошибка при компиляции

Привет! Пытаюсь впервые собрать комплект UNO + 28j60 + blynk
Скачал библиотеки, скопировал их в папку libraries. По адресу …/arduino/libraries/blynk/examples/boardandshields/enc28j60 открыл скетч и при попытки скомпилировать ошибка об отсутствии библиотеки UPIEthernet.h По указанному адресу

Hello. What version of IDE do you use?

Вообщем я нашёл эту библиотеку отдельно и вроде как все вышло! Ура)
Но! У меня подключены реле к пинам ардуино и они работают наоборот (инверсия) - когда включаю то реле отключается и наоборот при выключении реле включается. Конечно и с этим жить можно, т.к. На реле два варианта подключения но все же хочется, чтоб было так как надо. Как исправить?

Что такое IDE?
Arduino 1.6.7
Библиотеки 0.3.1
И теперь плюс библиотека UPIEthernet.h

На фото видно что включены реле с 5 по 8, хотя в приложении они все в статусе off

You need to use virtual pins for that.

А по подробнее, где узнать как это реализовать?

BLYNK_WRITE(V0) {
   int invertedButtonValue = param.asInt() ? LOW : HIGH;
}

А в какую часть скетча вставить? Это только для виртуального пина v0 ? Для всех остальных по аналогии расписывать?

Please have a look in examples. This one for example.

Yes.

Вставил я эту строку в скетч, указав v9…
В приложении поменял значение кнопки на v9 и ничего не происходит при её нажатии. Наверное я что то делаю не так

Please post your code here.

#define BLYNK_PRINT Serial
#include <UIPEthernet.h>
#include <BlynkSimpleUIPEthernet.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = “xxx”;

void setup()
{
Serial.begin(9600);
Blynk.begin(auth);

}
BLYNK_WRITE(V9) {
int invertedButtonValue = param.asInt() ? LOW : HIGH;
}
void loop()
{
Blynk.run();
}

All is ok. Now you need to pass this value to your relay.

Не понимаю, что я должен сделать…
Заметил следующее:
Когда я добавляю в приложении кнопку и присваиваю ее Digital pin, то после того как запускаю этот проект у меня соответствующее реле встает в положение ON, а мне нужно чтоб было OFF. К реле подключены лампочки и выходит, что если вдруг отключили электричество и после возобновили питания все реле и соответственно лампочки включаются, а это не хорошо)

Приложение может напрямую управлять цифровыми и аналоговыми пинами. Но если нужна минимальная логика, как в вашем случае, то нужно искользовать виртуальные пины. Виртульные пины это просто функции которые вы вызываете из телефона. А что они уже делают решать вам. Если хотите писать инвертированное значение по нажатию :

BLYNK_WRITE(V9) {
   int invertedButtonValue = param.asInt() ? LOW : HIGH;
   digitalWrite(relayPin, invertedButtonValue);
}

Не забудьте пин мод выставить для relayPin.

Вот например как можно серво управлять через виртуальный пин.

А что за пин мод для relayPin?

https://www.arduino.cc/en/Reference/PinMode

И так, стало что-то получаться)
Захотел к кнопкам добавить LED виджеты, но не знаю как корректно прописать условие

define BLYNK_PRINT Serial
include <UIPEthernet.h>
include <BlynkSimpleUIPEthernet.h>
char auth[] = “xxx”;
int relayPin9 = 9;
WidgetLED led9(V17);
int relayPin8 = 8;
WidgetLED led8(V16);
void setup()
{
Serial.begin(9600);
Blynk.begin(auth);
pinMode(relayPin9, OUTPUT);
digitalWrite(relayPin9, HIGH);
led9.off();
pinMode(relayPin8, OUTPUT);
digitalWrite(relayPin8, HIGH);
led8.off();
}
BLYNK_WRITE(V9) {
int invertedButtonValue9 = param.asInt() ? LOW : HIGH;
digitalWrite(relayPin9, invertedButtonValue9);
if (led9.getValue()) { //не нравится мне это условие
//нужно проверить фактическое состояние DigitalPin9
//а как задать такое условие не знаю
//в данном примере если этот пин ON и пропало питание
//то после восстановления питания в приложение происходит
//рассинхронизация кнопки и соответствущего LED WIDGET
led9.off();
} else {
led9.on();
}
}
BLYNK_WRITE(V8) {
int invertedButtonValue8 = param.asInt() ? LOW : HIGH;
digitalWrite(relayPin8, invertedButtonValue8);
if (led8.getValue()) {
led8.off();
} else {
led8.on();
}
}
void loop()
{
Blynk.run();
}