тогда встречный вопрос, где можно найти нормальную, а лучше хорошую литературу, по программированию ардуино. например у меня с агинским проблемы. как и у большинства нас дураков)
Добавлено спустя 28 минут 31 секунду:ну поскольку я тоже новечек или тугой старичек, считайте как хотите)) пока есть возможность, по донимаю вас вопросами))
int time[5] = {0,0,0,0,0}; //массив значений задержек
(что сие значит, переведите на русский, задержки в ноль?)
unsigned long previousMillis [5]= {0,0,0,0,0}; //массив значений начала задержки
int led[5] = {0,0,0,0,0}; //массив значений состояния LED
(это я так понял начальное значение, то есть выключены)
int p; //переменная вызова функции pulseLength()
int l; //переменная вызова функции Led()
void setup() // инициализация портов
{
for (int x = 2; x < 7; x++)
{
pinMode(x, INPUT);
}
for (int x = 8; x < 13; x++)
{
pinMode(x, OUTPUT);
(вот тут совсем не понял, если значение от2 до 7 то х=ввод, а если от 8 до13 вывод, а откуда тогда значения? p или l?)
}
}
//********** процедура считывания длительности импульса*********
int pulseLength()
{
for (int x=0; x<5; x++) //задаем номер канала
(то есть каналы переключаются по очереди?)
{
int pulseWidth = pulseIn (x+2, HIGH, 20000); //измеряем длительность импульса, записываем в массив
(измеряем в чем? в килограммах? это герцы, или мили секунды или микро секунды? логичнее микросекунды тога 20000мкС=0.02с)
if (pulseWidth > 1200 || pulseWidth < 1700) time[x] = 0; //присваиваем значение задержки
(если задержка от 0.0012с до 0.0017с то время сигнала равно нулю, просто не горит. я правильно понял?)
if (pulseWidth < 1200) time[x] = 1000; // (если меньше 0.0012 то горим секунду)
if (pulseWidth > 1700) time[x] = 500;// (если больше 0.0017 то горим пол секунды)
}
return p;
}
//****************Процедура обработки LED***********
int Led()
{
for (int x=0; x<5; x++) // номер канала (тут опять опять зачем то задаем переключение каналов без задержки, вопрос тогда как успеет замерить длинну сигнала не известно.)
{
if (time[x] == 0) //если стик в цетральном положении Led включен
{
led[x] = 1;
digitalWrite(x + 8, led[x]); (вот тут совсем не понял, сначала проверяем соответствие равен ли х нулю, потом задаем ему единицу, потом к единице прибавляем ноль и сопоставляем опять с ледх которое равно единице....)
}
else
{
int Millis = millis() - previousMillis[x]; //если нет - находим значение задержки
if ((Millis) > time[x]) //если больше заданного (если милисекунды больше времени х то действия ниже)
{
led[x] = !led [x]; //инвертируем значение состояния Led (то есть лед х не равно лед х?)
digitalWrite(x+8,led[x]); // читаем х+8 и сопоставляем с лед х?)
previousMillis[x] = millis(); //обновляем значение начала задержки
}
}
}
}
//**************** Программа**************
void loop() // программа, применяющая поученные значения
{
p = pulseLength(); //вызываем функцию измерения длительности импульса
l = Led(); //вызываем функцию обработки Led
}
Добавлено спустя 1 минуту 33 секунды:если у кого то хватит терпения это объяснить, просьба просто скопировать скеч и написать пояснения.
Добавлено спустя 10 минут 37 секунд:взято отсюда
http://forum.amperka.ru/threads/rc-передатчик-и-arduino-uno.1244/ в конце как раз таки код что мне нужно. но с начало надо понять прицеп.
Добавлено спустя 9 минут 27 секунд:вот еще, извините что заceраю так тему.
то что в скобках это мои комментарии.
#define lmotPWM 10 //Присваеваем имена пинам управления
#define lmotCONT1 9
#define lmotCONT2 8
#define rmotPWM 5
#define rmotCONT1 6
#define rmotCONT2 7
//назначение глобальных переменных
long pulseWidth[3] = {
0,0,0};
void setup()
//настройка вх/вых
{
// Serial.begin(9600);
pinMode(11, INPUT);// (то есть три входа?)
pinMode(12, INPUT);
pinMode(13, INPUT);
for (int i = 5; i <= 10; i++) //(с пятого по десятый выход и переключаются по очереди без паузы.)
{
pinMode(i, OUTPUT);
digitalWrite(i, LOW);// (изначально выходы выключены)
}
}
void loop()
{
for (int x=2; x<=4; x++) //измеряем длину импульса (а где указываем что считываем х и с какого входа?)
{
unsigned long z = pulseIn(x, HIGH, 20000); // (поясните строчку)
pulseWidth[x-2] = z; //записываем значения в массив
}
if(pulseWidth[2] != 0 && pulseWidth[0] != 0)// (поясните строчку)
{
if(pulseWidth[0] < 1440 || pulseWidth[0] > 1470)
{
if(pulseWidth[0] < 1440)
{
//Serial.println("B");
digitalWrite(lmotCONT1, 1);
digitalWrite(lmotCONT2, 0);
digitalWrite(rmotCONT1, 1);
digitalWrite(rmotCONT2, 0);
digitalWrite(lmotPWM, 1);
digitalWrite(rmotPWM, 1);
}
if(pulseWidth[0] > 1470)
{
//Serial.println("F");
digitalWrite(lmotCONT1, 0);
digitalWrite(lmotCONT2, 1);
digitalWrite(rmotCONT1, 0);
digitalWrite(rmotCONT2, 1);
digitalWrite(lmotPWM, 1);
digitalWrite(rmotPWM, 1);
}
}
else
{
if(pulseWidth[2] < 1440)
{
//Serial.println("L");
digitalWrite(lmotCONT1, 0);
digitalWrite(lmotCONT2, 1);
digitalWrite(rmotCONT1, 1);
digitalWrite(rmotCONT2, 0);
digitalWrite(lmotPWM, 1);
digitalWrite(rmotPWM, 1);
}
if(pulseWidth[2] > 1470)
{
//Serial.println("R");
digitalWrite(lmotCONT1, 1);
digitalWrite(lmotCONT2, 0);
digitalWrite(rmotCONT1, 0);
digitalWrite(rmotCONT2, 1);
digitalWrite(lmotPWM, 1);
digitalWrite(rmotPWM, 1);
}
}
if(pulseWidth[0] > 1440 && pulseWidth[0] < 1470 && pulseWidth[2] > 1440 && pulseWidth[2] < 1470)
{
//Serial.println("STOP");
digitalWrite(lmotPWM, 0);
digitalWrite(rmotPWM, 0);
digitalWrite(lmotCONT1, 0);
digitalWrite(lmotCONT2, 0);
digitalWrite(rmotCONT1, 0);
digitalWrite(rmotCONT2, 0);
//Serial.println(" ");
/*Serial.print(pulseWidth[0]);
Serial.print(" ");
Serial.print(pulseWidth[1]);
Serial.print(" ");
Serial.print(pulseWidth[2]);
Serial.print(" ");
//Serial.print(pulseWidth[3]);
Serial.print(" ");
//Serial.print(pulseWidth[4]);
Serial.println(" ");*/
}
}
else
{
digitalWrite(lmotCONT1, 0);
digitalWrite(lmotCONT2, 1);
digitalWrite(rmotCONT1, 0);
digitalWrite(rmotCONT2, 1);
digitalWrite(lmotPWM, 0);
digitalWrite(rmotPWM, 0);
}
}