ดาวน์โหลดและติตตั้งโปรแกรม sixaxispairtoolsetup-0.3.1
ค้นหา ชื่อบลูทูธ และ MacAddress
#include <Ps3Controller.h>
void setup()
{
Serial.begin(115200);
Ps3.begin();
String address = Ps3.getAddress();
Serial.print("The ESP32's Bluetooth MAC address is: ");
Serial.println(address);
}
void loop()
{
}
#include <Ps3Controller.h>
#include <ESP32Servo.h>
#define DR1 16 //2
#define DR2 17 //15
#define PWMR 4 //13
/////////////////////////////////
#define DL1 2 //16
#define DL2 15 //17
#define PWML 13 //4
int ss1 = 5; // เปิดใช้งาน s2 ที่พอร์ต 3
int ss2 = 18; // เปิดใช้งาน s3 ที่พอร์ต
Servo sv1; // ประกาศการใช้งาน sv1
Servo sv2;
#define pos1min 0 //ค่าตำแหน่งน้อยสุดที่ยอมให้เซอโว 1 ทำงาน (ตัวยก)
#define pos1max 130 //ค่าตำแหน่งมากสุดที่ยอมให้เซอโว 1 ทำงาน (ตัวยก)
#define pos2min 0 //ค่าตำแหน่งน้อยสุดที่ยอมให้เซอโว 2 ทำงาน (ตัวหนีบ)
#define pos2max 100 //ค่าตำแหน่งมากสุดที่ยอมให้เซอโว 2 ทำงาน (ตัวหนีบ)
int pos1 = 0;
int pos2 = 0;
void onConnect() {
Serial.println("Connected!.");
}
void onDisConnect() {
run(0, 0);
}
void setup() {
pinMode(DL1, OUTPUT);
pinMode(DL2, OUTPUT);
pinMode(PWML, OUTPUT);
pinMode(DR1, OUTPUT);
pinMode(DR2, OUTPUT);
pinMode(PWMR, OUTPUT);
Serial.begin(115200);
Ps3.attachOnConnect(onConnect);
Ps3.attachOnDisconnect(onDisConnect);
Ps3.begin("08:3a:f2:ac:52:da"); //ใส่ MacAddress
Serial.println("Ready.");
sv1.attach(ss1); // เรียกใช้งานเตรียมตอบสนองเซอร์โว sv1
sv2.attach(ss2); // เรียกใช้งานเตรียมตอบสนองเซอร์โว sv2
sv1.write(pos1);
sv2.write(pos2);
}
void loop() {
int lyAxisValue = (Ps3.data.analog.stick.ly); //Left stick - y axis - forward/backward car movement
int lxAxisValue = (Ps3.data.analog.stick.lx); //Left stick - y axis - forward/backward car movement
int ryAxisValue = (Ps3.data.analog.stick.ry); //Right stick - x axis - left/right car movement
int rxAxisValue = (Ps3.data.analog.stick.rx); //Right stick - x axis - left/right car movement
///////////////////////////////// analog ซ้าย ///////////////////////////////
if (lyAxisValue <= -50) //ถอยหลัง
{
run(-200, -200);
}
else if (lyAxisValue >= 50)
{
run(200, 200);
}
else if (lxAxisValue >= 50)
{
run(200, -200);
}
else if (lxAxisValue <= -50)
{
run(-200, 200);
}
///////////////////////////////// analog ขวา ///////////////////////////////
if (ryAxisValue <= -50) //ถอยหลัง
{
run(-150, -150);
}
else if (ryAxisValue >= 50)
{
run(150, 150);
}
else if (rxAxisValue >= 50)
{
run(150, -150);
}
else if (rxAxisValue <= -50)
{
run(-150, 150);
}
//////////////////////////////////////////////////////////////////////////////////
else if (Ps3.data.button.left)
{
run(-230, 230);
}
else if (Ps3.data.button.right)
{
run(230, -230);
}
else if (Ps3.data.button.up) //เดินหน้า
{
run(235, 230);
}
else if (Ps3.data.button.down) //ถอยหลัง
{
run(-230, -230);
}
else if (Ps3.data.button.triangle) {
run(250, 250);
}
else if (Ps3.data.button.cross) {
run(-250, -250);
}
else if (Ps3.data.button.square) {
run(-250, 250);
}
else if (Ps3.data.button.circle)
{
run(250, -250);
}
else if (Ps3.data.button.l2) {
if (pos1 > pos1max) {
sv1.write(pos1max);
}
else {
pos1 = pos1 + 5;
sv1.write(pos1);
}
}
else if (Ps3.data.button.l1) {
if (pos1 < pos1min) {
sv1.write(pos1min);
}
else {
pos1 = pos1 - 5;
sv1.write(pos1);
}
}
else if (Ps3.data.button.r1) {
if (pos2 > pos2max) {
sv2.write(pos2max);
}
else {
pos2 = pos2 + 4;
sv2.write(pos2);
}
}
else if (Ps3.data.button.r2) {
if (pos2 < pos2min) {
sv2.write(pos2min);
}
else {
pos2 = pos2 - 4;
sv2.write(pos2);
}
}
else {
run(0, 0);
}
delay(200);
}
void run(int spl, int spr) // ประกาศฟังก์ชัน run(กำลังมอเตอร์ซ้าาย,กำลังมอเตอร์ขวา);
{
if (spl > 0) {
digitalWrite(DL1, LOW);
digitalWrite(DL2, HIGH);
analogWrite(PWML, spl);
} else if (spl < 0) {
digitalWrite(DL1, HIGH);
digitalWrite(DL2, LOW);
analogWrite(PWML, -spl);
} else {
digitalWrite(DL1, HIGH);
digitalWrite(DL2, HIGH);
}
//////////////////////////////////////
if (spr > 0) {
digitalWrite(DR1, LOW);
digitalWrite(DR2, HIGH);
analogWrite(PWMR, spr);
} else if (spr < 0) {
digitalWrite(DR1, HIGH);
digitalWrite(DR2, LOW);
analogWrite(PWMR, -spr);
} else {
digitalWrite(DR1, HIGH);
digitalWrite(DR2, HIGH);
}
}
#include <Ps3Controller.h>
#include <ESP32Servo.h>
#define DR1 16 //2
#define DR2 17 //15
#define PWMR 4 //13
/////////////////////////////////
#define DL1 15 //16
#define DL2 2 //17
#define PWML 13 //4
int ss1 = 5; // เปิดใช้งาน s2 ที่พอร์ต 3
int ss2 = 18; // เปิดใช้งาน s3 ที่พอร์ต
int ss3 = 19;
int ss4 = 23;
int ss5 = 32;
int ss6 = 27;
int ss7 = 26;
int ss8 = 25;
Servo sv1; // ประกาศการใช้งาน sv1
Servo sv2;
Servo sv3; // ประกาศการใช้งาน sv1
Servo sv4;
Servo sv5; // ประกาศการใช้งาน sv1
Servo sv6;
Servo sv7; // ประกาศการใช้งาน sv1
Servo sv8;
#define pos1min 0 //ค่าตำแหน่งน้อยสุดที่ยอมให้เซอโว 1 ทำงาน (ตัวยก)
#define pos1max 130 //ค่าตำแหน่งมากสุดที่ยอมให้เซอโว 1 ทำงาน (ตัวยก)
#define pos2min 0 //ค่าตำแหน่งน้อยสุดที่ยอมให้เซอโว 2 ทำงาน (ตัวหนีบ)
#define pos2max 100 //ค่าตำแหน่งมากสุดที่ยอมให้เซอโว 2 ทำงาน (ตัวหนีบ)
int pos1 = 0;
int pos2 = 0;
void onConnect() {
Serial.println("Connected!.");
}
void onDisConnect() {
run(0, 0);
}
void setup() {
pinMode(DL1, OUTPUT);
pinMode(DL2, OUTPUT);
pinMode(PWML, OUTPUT);
pinMode(DR1, OUTPUT);
pinMode(DR2, OUTPUT);
pinMode(PWMR, OUTPUT);
Serial.begin(115200);
Ps3.attachOnConnect(onConnect);
Ps3.attachOnDisconnect(onDisConnect);
Ps3.begin("f4:65:0b:eb:07:c6"); //ใส่ MacAddress 1==3c:8a:1f:a7:de:f6 3==80:7d:3a:f3:a2:de
Serial.println("Ready.");
sv1.attach(ss1); // เรียกใช้งานเตรียมตอบสนองเซอร์โว sv1
sv2.attach(ss2); // เรียกใช้งานเตรียมตอบสนองเซอร์โว sv2
sv3.attach(ss3); // เรียกใช้งานเตรียมตอบสนองเซอร์โว sv1
sv4.attach(ss4);
sv5.attach(ss5); // เรียกใช้งานเตรียมตอบสนองเซอร์โว sv1
sv6.attach(ss6);
sv7.attach(ss7); // เรียกใช้งานเตรียมตอบสนองเซอร์โว sv1
sv8.attach(ss8);
}
void loop() {
int yAxisValue = (Ps3.data.analog.stick.ly); //Left stick - y axis - forward/backward car movement
int xAxisValue = (Ps3.data.analog.stick.rx); //Right stick - x axis - left/right car movement
if (yAxisValue <= -50) //ถอยหลัง
{
run(-200, -200);
}
else if (yAxisValue >= 50)
{
run(200, 200);
}
else if (xAxisValue >= 50)
{
run(200, -200);
}
else if (xAxisValue <= -50)
{
run(-200, 200);
}
else if (Ps3.data.button.left)
{
run(-230, 230);
}
else if (Ps3.data.button.right)
{
run(230, -230);
}
else if (Ps3.data.button.up) //เดินหน้า
{
run(235, 230);
}
else if (Ps3.data.button.down) //ถอยหลัง
{
run(-230, -230);
}
else if (Ps3.data.button.triangle) {
run(250, 250);
}
else if (Ps3.data.button.cross) {
run(-250, -250);
}
else if (Ps3.data.button.square) {
run(-250, 250);
}
else if (Ps3.data.button.circle)
{
run(250, -250);
}
else if (Ps3.data.button.l2) {
if (pos1 > pos1max) {
sv1.write(pos1max);
sv3.write(pos1max);
sv5.write(pos1max);
sv7.write(pos1max);
} else {
pos1 = pos1 + 5;
sv1.write(pos1);
pos1 = pos1 + 15;
sv3.write(pos1);
pos1 = pos1 +25;
sv5.write(pos1);
pos1 = pos1 +35;
sv7.write(pos1);
}
} else if (Ps3.data.button.l1) {
if (pos1 < pos1min) {
sv1.write(pos1min);
sv3.write(pos1min);
sv5.write(pos1min);
sv7.write(pos1min);
} else {
pos1 = pos1 - 5;
sv1.write(pos1);
pos1 = pos1 - 15;
sv3.write(pos1);
pos1 = pos1 -25;
sv5.write(pos1);
sv7.write(pos1max);
}
} else if (Ps3.data.button.r1) {
if (pos2 > pos2max) {
sv2.write(pos2max);
sv4.write(pos2max);
sv6.write(pos2max);
sv8.write(pos2max);
} else {
pos2 = pos2 + 5;
sv2.write(pos2);
pos2 = pos2 + 15;
sv4.write(pos2);
pos2 = pos2 + 25;
sv6.write(pos2);
sv8.write(pos2);
}
} else if (Ps3.data.button.r2) {
if (pos2 < pos2min) {
sv2.write(pos2min);
sv4.write(pos2min);
sv6.write(pos2min);
sv8.write(pos2min);
} else {
pos2 = pos2 - 5;
sv2.write(pos2);
pos2 = pos2 - 15;
sv4.write(pos2);
pos2 = pos2 - 25;
sv6.write(pos2);
sv8.write(pos2max);
}
} else {
run(0, 0);
}
}
void run(int spl, int spr) // ประกาศฟังก์ชัน run(กำลังมอเตอร์ซ้าาย,กำลังมอเตอร์ขวา);
{
if (spl > 0) {
digitalWrite(DL1, LOW);
digitalWrite(DL2, HIGH);
analogWrite(PWML, spl);
} else if (spl < 0) {
digitalWrite(DL1, HIGH);
digitalWrite(DL2, LOW);
analogWrite(PWML, -spl);
} else {
digitalWrite(DL1, HIGH);
digitalWrite(DL2, HIGH);
}
//////////////////////////////////////
if (spr > 0) {
digitalWrite(DR1, LOW);
digitalWrite(DR2, HIGH);
analogWrite(PWMR, spr);
} else if (spr < 0) {
digitalWrite(DR1, HIGH);
digitalWrite(DR2, LOW);
analogWrite(PWMR, -spr);
} else {
digitalWrite(DR1, HIGH);
digitalWrite(DR2, HIGH);
}
}