Его нет, есть отдельно библиотека grbl и библиотека irremote, а как их соединить я не знаю... надеялась найти помощь тут@Aika, Если ты выложишь свой скетч и объяснишь в каком месте он не работает, то да, возможно, помогут.
хорошо@Aika, Помощь это когда делаешь ты, а тебе помогают. В ином случае это называется "сделайте за меня" и тогда тебе в другой раздел. Посмотри канал "Заметки Ардуинщика", продумай алгоритм, посмотри примеры из библиотек, разберись как они работают и начни писать свой проект.
#include "Stepper.h" // подключаем библиотеку шагового двигател
#include "IRremote.h" // подключаем библиотеку ИК приемника
/*----- Variables, Pins -----*/
#define STEPS 32 // Количество шагов на один оборот вала двигателя !!! STEPS нигде больше указывать нельзя !!!!
int Steps2Take; // переменная для определения кол-ва шагов (2048 = 1 полный оборот вала двигателя)
int receiver = 2; // Пин на котором сидит ИК приемник
int poz = 0; // Логическая переменная позиции шторы 0 = поднята 1 = закрыта
int mode; // Переменная режима шторы 1 = авто 2 = опущена 3 = поднята
int photo; // Переменная значения фоторезистора
/*-----( Declare objects )-----*/
// Setup of proper sequencing for Motor Driver Pins
// In1, In2, In3, In4 in the sequence 1-3-2-4
Stepper small_stepper(STEPS, 12, 10, 11, 9); // Указать пины двигателя small_stepper
Stepper small_stepper1(STEPS, 8, 6, 7, 5); // Не забудь помениять пины как увидешь что к чему!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IRrecv irrecv(receiver); // Создаём 'irrecv' это ИК приемник
decode_results results; // Создаем экземпляр 'decode_results' Это тоже нужно для ИК приемника
void setup()
{
irrecv.enableIRIn(); // Инициализация приемника
Serial.begin(9600);
pinMode( A0, INPUT );
}
void loop()
{
photo = analogRead(A0); // Получаем значение с фоторезистора (изменить номер логического пина)
//Serial.println( photo );
if (photo < 350 && mode == 1) // Если значение с фоторезистора меньше *установить этлон* и выбран режим авто (1) то штора окускается
{
poz = curtaindown();
}
if (photo > 360 && mode == 1) // Если значение с фоторезистора меньше *установить этлон* и выбран режим авто (1) то штора поднимается
{
poz = curtainup();
}
if (irrecv.decode(&results)) // Если на ИК приемник пришел сигнал
{
Serial.println( results.value );
switch(results.value) // Значеник которое пришло на ИК приемник будет в results.value
{
/*-----(Клавиша опускания)-----*/
case 0xFFA857: // Тут не забыть заменить 0xE0E0A05F на то которое получаем с пульта при нажатии на нужную нам кнопку кнопки
poz = curtaindown(); // Вызываем функцию опускания шторы
mode = 2; // Режим работы штора опущена
break;
/*-----(Клавиша поднятия)-----*/
case 0xFF629D: // Тут не забыть заменить 0xFFA857 на то которое получаем с пульта при нажатии на нужную нам кнопку кнопки
poz = curtainup(); // Вызываем пункцию поднятия шторы
mode = 3; // Режим работы штора поднята
break;
/*-----(Клавиша автоматического определения)-----*/
case 0xFF02FD: // Тут не забыть заменить 0xFFA857 на то которое получаем с пульта при нажатии на нужную нам кнопку кнопки
mode = 1; // Режим работы автоматический
break;
}
irrecv.resume(); // Ждем следующего сигнала от ИК
}
}
int curtaindown() //Функция опускания
{
if (poz == 0) // Условие что штора поднята
{
for (int i=0; i <= 10188; i++) // Цикл для того чтоб припилить второй мотор. Число шагов задать согласно кол-ву оборот для шторы из условия что 2048 - один оборот
{
small_stepper.setSpeed(500); // Скорость вращения двигателя. Максимум 700
small_stepper1.setSpeed(500);
Steps2Take = -1; // Направление вращения CW 1 оборот
small_stepper.step(Steps2Take); // Команда на поварот small_stepper
small_stepper1.step(Steps2Take);
poz = 1; // Изменяемс статус на опущена
}
delay(2000); // Даем отдышаться
}
return poz;
}
int curtainup() //Функция поднятия
{
if (poz == 1) // Условие что штора опущена
{
for (int i=0; i <= 10188; i++) // Цикл для того чтоб припилить второй мотор. Число шагов задать согласно кол-ву оборот для шторы из условия что 2048 - один оборот
{
small_stepper.setSpeed(500); // Скорость вращения двигателя. Максимум 700
small_stepper1.setSpeed(500);
Steps2Take = 1; // Направление вращения CСW -1 = оборот в обратную сторону
small_stepper.step(Steps2Take); // Команда на поварот small_stepper
small_stepper1.step(Steps2Take);
poz = 0; // Изменяемс статус на поднята
}
delay(2000); // Даем отдышаться
}
return poz;
}