Carrinho de controle remoto baseado no site https://acoptex.com/project/299/basics-project-040c-how-to-build-the-4wd-smart-robot-car-part-3-wieless-ps2-controller-l298n-h-at-lex-c/
lib necessária (link) | programa base (link)




/*ALTERADO DE: Project: 4WD robot car, L298N dual h-bridge motor driver module, 4 DC motors withor without speed control (constant maximum speed),wireless PS2 controller Function: 4WD robot car movements controlled with wireless PS2 controller Email: info@acoptex.com Website: http://acoptex.com*///************************************************************#include <PS2X_lib.h>//include library code//************************************************************const int PS2_CLK = 8;//clockconst int PS2_CMD = 12;//commandconst int PS2_ATT = 11;//attentionconst int PS2_DAT = 13;//data/* Select modes of PS2 controller: - pressures = analog reading of push-butttons - rumble = motor rumbling uncomment 1 of the lines for each mode selection*///const int rumble = false;//const int pressures = false;const int pressures = true;const int rumble = true;PS2X ps2x; //create PS2 Controller objectbyte PS2 = 0;int fspeed;//forward speed//DC motors 3 and 4:const int in1 = 4;//motor direction control portconst int in2 = 5;//motor direction control portconst int enA = 9;//motor speed control//DC motors 1 and 2:const int in3 = 6;//motor direction control portconst int in4 = 7;//motor direction control portconst int enB = 10;//motor speed control//************************************************************void setup() { PS2 = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_ATT, PS2_DAT, pressures, rumble); //sets all DC motors pins as OUTPUTs pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); //pinMode(8, OUTPUT); //Forward lights //pinMode(2, OUTPUT); //Back lights pinMode(15, OUTPUT); //Left turn pinMode(14, OUTPUT); //Right turn //pinMode(A2, OUTPUT); //Buzzer}void loop() { ps2x.read_gamepad(); if (ps2x.Analog(PSS_LY) == 128) analogWrite(enA, 0); if (ps2x.Analog(PSS_LY) == 128) analogWrite(enB, 0);//if(ps2x.ButtonPressed(PSB_L1)) digitalWrite(8, HIGH);//Turn on forward lights//if(ps2x.ButtonPressed(PSB_L2)) digitalWrite(8, LOW);//Turn off forward lights//if(ps2x.ButtonPressed(PSB_R1)) digitalWrite(A2, HIGH);//Turn on buzzer//if(ps2x.ButtonPressed(PSB_R2)) digitalWrite(A2, LOW);//Turn off buzzer if (ps2x.Analog(PSS_LY) > 128) { //MOVE BACK fspeed = map(ps2x.Analog(PSS_LY), 129, 255, 0, 255); digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); //digitalWrite(2, HIGH); digitalWrite(15, LOW); digitalWrite(14, LOW); analogWrite(enA, fspeed); analogWrite(enB, fspeed); } if (ps2x.Analog(PSS_LY) < 128) { //MOVE FWD fspeed = map(ps2x.Analog(PSS_LY), 0, 127, 255, 0); digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); //digitalWrite(2, LOW); digitalWrite(15, LOW); digitalWrite(14, LOW); analogWrite(enA, fspeed); analogWrite(enB, fspeed); } if (ps2x.Analog(PSS_LX) < 128) { //TURN LEFT fspeed = map(ps2x.Analog(PSS_LX), 0, 127, 255, 0); digitalWrite(15, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enA, 0); analogWrite(enB, fspeed); } if (ps2x.Analog(PSS_LX) > 128) { //TURN RIGHT fspeed = map(ps2x.Analog(PSS_LX), 129, 255, 0, 255); digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(14, HIGH); analogWrite(enA, fspeed); analogWrite(enB, 0); } if (ps2x.Analog(PSS_RX) > 128) { //TURN HARD RIGHT fspeed = map(ps2x.Analog(PSS_RX), 129, 255, 0, 255); digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); digitalWrite(14, HIGH); analogWrite(enA, fspeed); analogWrite(enB, fspeed); } if (ps2x.Analog(PSS_RX) < 128) { //TURN HARD LEFT fspeed = map(ps2x.Analog(PSS_RX), 0, 127, 255, 0); digitalWrite(15, HIGH); digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enA, fspeed); analogWrite(enB, fspeed); } if ((ps2x.Analog(PSS_RY) > 128) && (ps2x.Analog(PSS_RX) < 128)) { //TURN BACK LEFT fspeed = map(ps2x.Analog(PSS_RY), 129, 255, 0, 255); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); digitalWrite(15, HIGH); //digitalWrite(2, HIGH); analogWrite(enA, 0); analogWrite(enB, fspeed); } if ((ps2x.Analog(PSS_RY) > 128) && (ps2x.Analog(PSS_RX) > 128)) { //TURN BACK RIGHT fspeed = map(ps2x.Analog(PSS_RY), 129, 255, 0, 255); digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(14, HIGH); //digitalWrite(2, HIGH); analogWrite(enA, fspeed); analogWrite(enB, 0); } delay(50);}
