//********************************************************************* // // Данный код предназначен для WheelXBot // Автор: ZSeregaA // Описание и инструкция: http://robocontroller.ru/news/wheelxbot_ne_standartnaja_mashina_upravljaemaja_tv_pultom/2013-09-06-29 // // Версия кода 10s. // Дата создания 18.08.2013 // Дата последнего редактирования 09.09.2013 // // http://robocontroller.ru/ // //********************************************************************* #include IRrecv irrecv(40); //Пин фотоприемника TSOP decode_results results; int ir_code = 0; boolean goForward = false; // Едет вперед boolean goBackward = false; // Едет назад boolean goRight = false; // Едет влево boolean goLeft = false; // Едет вправо boolean goStop = false; // СТОП boolean headlight = false; // Фары boolean speed1Led = true; // LED индикатор 1-й скорости boolean speed2Led = false; // LED индикатор 2-й скорости boolean speed3Led = false; // LED индикатор 3-й скорости boolean noStop = false; // режим блокировки моторов при остановке boolean turns = false; // режимы поворотов int moveSpeed = 80; // скорость движения int turningSpeed = 255; // скорость поворотов //Пины светодиодов int powerLED = 47; // LED индикатор питания int headlightLED = 46; // LED индикация фар int headlightLeft1 = 22; // Левая фара 1 int headlightLeft2 = 24; // Левая фара 2 int headlightLeft3 = 26; // Левая фара 3 int headlightRight1 = 23; // Правая фара 1 int headlightRight2 = 25; // Правая фара 2 int headlightRight3 = 27; // Правая фара 3 int speed_1_LED = 52; // LED индикатор 1-й корости int speed_2_LED = 50; // LED индикатор 2-й корости int speed_3_LED = 49; // LED индикатор 3-й корости int stop_left_LED = 28; // LED левый стоп int stop_right_LED = 29; // LED правый стоп int back_left_LED = 30; // LED левый задний ход int back_right_LED = 31; // LED правый задний ход //int noStop_LED = 53; // LED режим блокировки моторов при остановке int turns_LED = 53; // LED режима поворотов void setup(){ Serial.begin(57600); // скорость порта irrecv.enableIRIn(); // старт TSOP //Моторы pinMode(12, OUTPUT); // моторы канала А (движение) pinMode(9, OUTPUT); // моторы канал А (тормоз) pinMode(13, OUTPUT); // моторы канал Б (движение) pinMode(8, OUTPUT); // моторы канал Б (тормоз) //Светодиоды pinMode(powerLED, OUTPUT); // LED индикатор питания digitalWrite(powerLED, HIGH); // LED индикатор питания ВКЛ pinMode(speed_1_LED, OUTPUT); // LED индикатор 1-й корости pinMode(speed_2_LED, OUTPUT); // LED индикатор 2-й корости pinMode(speed_3_LED, OUTPUT); // LED индикатор 3-й корости pinMode(headlightLED, OUTPUT); // LED индикация фар pinMode(headlightLeft1, OUTPUT); // Левая фара 1 pinMode(headlightLeft2, OUTPUT); // Левая фара 2 pinMode(headlightLeft3, OUTPUT); // Левая фара 3 pinMode(headlightRight1, OUTPUT); // Правая фара 1 pinMode(headlightRight2, OUTPUT); // Правая фара 2 pinMode(headlightRight3, OUTPUT); // Правая фара 3 pinMode(stop_left_LED, OUTPUT); // LED левый стоп pinMode(stop_right_LED, OUTPUT); // LED правый стоп pinMode(back_left_LED, OUTPUT); // LED левый задний ход pinMode(back_right_LED, OUTPUT); // LED правый задний ход //pinMode(noStop_LED, OUTPUT); // LED режим блокировки моторов при остановке pinMode(turns_LED, OUTPUT); // LED режима поворотов } void loop(){ //Проверяем наличие команд с пульта if (irrecv.decode(&results)) { ir_code = results.value; //если команда ВПЕРЕД if (ir_code == 1785){ goForward = true; goBackward = false; goRight = false; goLeft = false; goStop = false; } //если команда НАЗАД if (ir_code == -31111){ goBackward = true; goForward = false; goRight = false; goLeft = false; goStop = false; } //если команда ВПРАВО if (ir_code == 18105){ goBackward = false; goForward = false; goRight = true; goLeft = false; goStop = false; } //если команда ВЛЕВО if (ir_code == -22951){ goBackward = false; goForward = false; goRight = false; goLeft = true; goStop = false; } //Фары Вкл / Выкл if (ir_code == -8161 && !headlight){ headlight = true; //Фары Вкл } if (ir_code == -12241 && headlight){ headlight = false; //Фары Выкл } //Скорость 1 if (ir_code == 8415){ speed1Led = true; speed2Led = false; speed3Led = false; moveSpeed = 80; } //Скорость 2 if (ir_code == -24481){ speed1Led = false; speed2Led = true; speed3Led = false; moveSpeed = 155; } //Скорость 3 if (ir_code == 24735){ speed1Led = false; speed2Led = false; speed3Led = true; moveSpeed = 255; } //Режим поворотов if (ir_code == 18615 && !turns){ turns = true; //Режим поворотов Вкл. } if (ir_code == 2295 && turns){ turns = false; //Режим поворотов Откл. } irrecv.resume(); } //LED индикация скорости if (speed1Led){ digitalWrite(speed_1_LED, HIGH); //LED индикатор 1-й корости ВКЛ } else{ digitalWrite(speed_1_LED, LOW); //LED индикатор 1-й корости Откл } if (speed2Led){ digitalWrite(speed_2_LED, HIGH); //LED индикатор 2-й корости ВКЛ } else{ digitalWrite(speed_2_LED, LOW); //LED индикатор 2-й корости Откл } if (speed3Led){ digitalWrite(speed_3_LED, HIGH); //LED индикатор 3-й корости ВКЛ } else{ digitalWrite(speed_3_LED, LOW); //LED индикатор 3-й корости Откл } //LED задний ход if (goBackward){ digitalWrite(back_left_LED, HIGH); // LED левый задний ход Вкл. digitalWrite(back_right_LED, HIGH); // LED правый задний ход Вкл. } else{ digitalWrite(back_left_LED, LOW); // LED левый задний ход Откл. digitalWrite(back_right_LED, LOW); // LED правый задний ход Откл. } //LED индикация режима поворотов if (turns){ digitalWrite(turns_LED, HIGH); // LED режима поворотов Вкл. } else{ digitalWrite(turns_LED, LOW); // LED режима поворотов Откл. } //если ВПЕРЕД true - едет вперед if (goForward){ // Serial.println(ir_code); //Вперед digitalWrite(12, LOW); digitalWrite(9, LOW); digitalWrite(13, HIGH); digitalWrite(8, LOW); analogWrite(3, moveSpeed); analogWrite(11, moveSpeed); goForward = false; } else{ //если НАЗАД true - едет назад if (goBackward){ digitalWrite(12, HIGH); digitalWrite(9, LOW); digitalWrite(13, LOW); digitalWrite(8, LOW); analogWrite(3, moveSpeed); analogWrite(11, moveSpeed); goBackward = false; } else{ //если поворот ВПРАВО true - поворачивает вправо if (goRight){ if (turns){ digitalWrite(12, LOW); digitalWrite(9, LOW); digitalWrite(13, HIGH); digitalWrite(8, LOW); analogWrite(3, 30); analogWrite(11, turningSpeed); } else{ digitalWrite(12, HIGH); digitalWrite(9, LOW); digitalWrite(13, HIGH); digitalWrite(8, LOW); analogWrite(3, turningSpeed); analogWrite(11, turningSpeed); } goRight = false; } else{ //если поворот ВЛЕВО true - поворачивает влево if (goLeft){ if (turns){ digitalWrite(12, LOW); digitalWrite(9, LOW); digitalWrite(13, HIGH); digitalWrite(8, LOW); analogWrite(3, turningSpeed); analogWrite(11, 30); } else{ digitalWrite(12, LOW); digitalWrite(9, LOW); digitalWrite(13, LOW); digitalWrite(8, LOW); analogWrite(3, turningSpeed); analogWrite(11, turningSpeed); } goLeft = false; } else{ //если что то иное или ВПЕРЕД и НАЗАД false // включаеться тормоз digitalWrite(9, HIGH); digitalWrite(8, HIGH); goForward = false; goBackward = false; goRight = false; goLeft = false; goStop = true; } } } } //LED стопы if (goStop){ digitalWrite(stop_left_LED, HIGH); // LED левый стоп Вкл. digitalWrite(stop_right_LED, HIGH); // LED правый стоп Вкл. } else{ digitalWrite(stop_left_LED, LOW); // LED левый стоп Откл. digitalWrite(stop_right_LED, LOW); // LED правый стоп Откл. } //Фары Вкл / Выкл if (headlight){ digitalWrite(headlightLED, HIGH); // LED индикация фар ВКЛ digitalWrite(headlightLeft1, HIGH); // Левая фара 1 ВКЛ digitalWrite(headlightLeft2, HIGH); // Левая фара 2 ВКЛ digitalWrite(headlightLeft3, HIGH); // Левая фара 3 ВКЛ digitalWrite(headlightRight1, HIGH); // Правая фара 1 ВКЛ digitalWrite(headlightRight2, HIGH); // Правая фара 2 ВКЛ digitalWrite(headlightRight3, HIGH); // Правая фара 3 ВКЛ delay(100); } if (!headlight){ digitalWrite(headlightLED, LOW); // LED индикация фар Выкл digitalWrite(headlightLeft1, LOW); // Левая фара 1 Выкл digitalWrite(headlightLeft2, LOW); // Левая фара 2 Выкл digitalWrite(headlightLeft3, LOW); // Левая фара 3 Выкл digitalWrite(headlightRight1, LOW); // Правая фара 1 Выкл digitalWrite(headlightRight2, LOW); // Правая фара 2 Выкл digitalWrite(headlightRight3, LOW); // Правая фара 3 Выкл delay(100); } delay (150); }