#include <Servo.h>
Servo servo1; //Servos
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
const int LED1 = 0; //LEDs
const int LED2 = 1;
const int LED3 = 2;
const int LED4 = 3;
const int LED5 = 4;
const int button1 = 5; //Buttons
const int button2 = 6;
int button1Presses = 0; //Button values
boolean button2Pressed = false;
const int pot1 = A0; //Potentimeters
const int pot2 = A1;
const int pot3 = A2;
const int pot4 = A3;
const int pot5 = A4;
const int pot6 = A5;
int pot1Val; //Potentimeter values
int pot2Val;
int pot3Val;
int pot4Val;
int pot5Val;
int pot6Val;
int pot1Angle;
int pot2Angle;
int pot3Angle;
int pot4Angle;
int pot5Angle;
int pot6Angle;
int servo1PosSaves[] = {1,1,1,1,1}; //บันทึกตำแหน่ง
int servo2PosSaves[] = {1,1,1,1,1};
int servo3PosSaves[] = {1,1,1,1,1};
int servo4PosSaves[] = {1,1,1,1,1};
int servo5PosSaves[] = {1,1,1,1,1};
int servo6PosSaves[] = {1,1,1,1,1};
void setup() {
servo1.attach(8); // Set up everything and will run once; attach servos and define the pin modes
servo2.attach(9);
servo3.attach(10);
servo4.attach(11); // Set up everything and will run once; attach servos and define the pin modes
servo5.attach(12);
servo6.attach(13);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
Serial.begin(9600);
}
void loop() {
pot1Val = analogRead(pot1); // อ่านค่าจากโพเทนทิมิเตอร์และเก็บไว้...
pot1Angle = map(pot1Val, 0, 1023, 0, 179); // ค่าจากโพเทนชิโอมิเตอร์กับค่าที่เซอร์โวสามารถใช้และเก็บไว้ใช้ในภายหลัง
pot2Val = analogRead(pot2);
pot2Angle = map(pot2Val, 0, 1023, 0, 179);
pot3Val = analogRead(pot3);
pot3Angle = map(pot3Val, 0, 1023, 0, 179);
pot4Val = analogRead(pot4);
pot4Angle = map(pot4Val, 0, 1023, 0, 179); //
pot5Val = analogRead(pot5);
pot5Angle = map(pot5Val, 0, 1023, 0, 179);
pot6Val = analogRead(pot6);
pot6Angle = map(pot6Val, 0, 1023, 0, 179);
servo1.write(pot1Angle); // จะทำให้เซอร์โวย้ายไปที่มุมที่แมปไว้
servo2.write(pot2Angle);
servo3.write(pot3Angle);
servo4.write(pot4Angle);
servo5.write(pot5Angle);
servo6.write(pot6Angle);
if(digitalRead(button1) == HIGH){ //นี่จะตรวจสอบว่ามีการกด button1 กี่ครั้งและบันทึกตำแหน่งลงในอาร์เรย์โดยขึ้นอยู่กับจำนวนครั้งที่กด switch / case ทำงานเหมือนคำสั่ง if
button1Presses++;
switch(button1Presses){
case 1:
servo1PosSaves[0] = pot1Angle;
servo2PosSaves[0] = pot2Angle;
servo3PosSaves[0] = pot3Angle;
servo4PosSaves[0] = pot4Angle;
servo5PosSaves[0] = pot5Angle;
servo6PosSaves[0] = pot6Angle;
digitalWrite(LED1, HIGH);
Serial.println("Pos 1 Saved");
break;
case 2:
servo1PosSaves[1] = pot1Angle;
servo2PosSaves[1] = pot2Angle;
servo3PosSaves[1] = pot3Angle;
servo4PosSaves[1] = pot4Angle;
servo5PosSaves[1] = pot5Angle;
servo6PosSaves[1] = pot6Angle;
digitalWrite(LED2, HIGH);
Serial.println("Pos 2 Saved");
break;
case 3:
servo1PosSaves[2] = pot1Angle;
servo2PosSaves[2] = pot2Angle;
servo3PosSaves[2] = pot3Angle;
servo4PosSaves[2] = pot4Angle;
servo5PosSaves[2] = pot5Angle;
servo6PosSaves[2] = pot6Angle;
digitalWrite(LED3, HIGH);
Serial.println("Pos 3 Saved");
break;
case 4:
servo1PosSaves[3] = pot1Angle;
servo2PosSaves[3] = pot2Angle;
servo3PosSaves[3] = pot3Angle;
servo4PosSaves[3] = pot4Angle;
servo5PosSaves[3] = pot5Angle;
servo6PosSaves[3] = pot6Angle;
digitalWrite(LED4, HIGH);
Serial.println("Pos 4 Saved");
break;
case 5:
servo1PosSaves[4] = pot1Angle;
servo2PosSaves[4] = pot2Angle;
servo3PosSaves[4] = pot3Angle;
servo4PosSaves[4] = pot4Angle;
servo5PosSaves[4] = pot5Angle;
servo6PosSaves[4] = pot6Angle;
digitalWrite(LED5, HIGH);
Serial.println("Pos 5 Saved");
break;
}
}
if(digitalRead(button2) == HIGH){ // Pretty self-explnatory here
button2Pressed = true;
}
if(button2Pressed){ // หาก 2 กดเป็นจริงเซอร์โวจะทำงานแม้ว่าตำแหน่งที่บันทึกไว้ทั้งหมด
for(int i = 0; i < 5; i++){
servo1.write(servo1PosSaves[i]);
servo2.write(servo2PosSaves[i]);
servo3.write(servo3PosSaves[i]);
servo4.write(servo4PosSaves[i]);
servo5.write(servo5PosSaves[i]);
servo6.write(servo6PosSaves[i]);
Serial.println(" potentimeter Angles: ");
Serial.println(servo1PosSaves[i]);
Serial.println(servo2PosSaves[i]);
Serial.println(servo3PosSaves[i]);
Serial.println(servo4PosSaves[i]);
Serial.println(servo5PosSaves[i]);
Serial.println(servo6PosSaves[i]);
delay(1050);
}
}
delay(300);
}
ใส่รายละเอียดหน่อยครับ
- จะทำอะไร
- ติดปัญหาอะไร
ต้อนนี้ทำได้แค่ 7 สเต็ปครับ อยากให้ ได้ประมาณ 9 - 10 สเต็ป ครับ และแขนมีอาการ เหมือนไฟไม่พอเวลาก้มหยิบของจะลงไปกระแทกแรงมากพอสมควรเลยครับ
#include <Servo.h>
Servo servo1; //Servos
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
const int LED1 = 2; //LEDs
const int LED2 = 3;
const int LED3 = 4;
const int LED4 = 5;
const int button1 = 6; //Buttons
const int button2 = 7;
int button1Presses = 0; //Button values
boolean button2Pressed = false;
const int pot1 = A0; //Potentimeters
const int pot2 = A1;
const int pot3 = A2;
const int pot4 = A3;
const int pot5 = A4;
const int pot6 = A5;
int pot1Val; //Potentimeter values
int pot2Val;
int pot3Val;
int pot4Val;
int pot5Val;
int pot6Val;
int pot1Angle;
int pot2Angle;
int pot3Angle;
int pot4Angle;
int pot5Angle;
int pot6Angle;
int servo1PosSaves[] = {1,1,1,1,1,1,1}; //บันทึกตำแหน่ง
int servo2PosSaves[] = {1,1,1,1,1,1,1};
int servo3PosSaves[] = {1,1,1,1,1,1,1};
int servo4PosSaves[] = {1,1,1,1,1,1,1};
int servo5PosSaves[] = {1,1,1,1,1,1,1};
int servo6PosSaves[] = {1,1,1,1,1,1,1};
void setup() {
servo1.attach(8); // Set up everything and will run once; attach servos and define the pin modes
servo2.attach(9);
servo3.attach(10);
servo4.attach(11); // Set up everything and will run once; attach servos and define the pin modes
servo5.attach(12);
servo6.attach(13);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
Serial.begin(9600);
}
void loop() {
pot1Val = analogRead(pot1); // อ่านค่าจากโพเทนทิมิเตอร์และเก็บไว้...
pot1Angle = map(pot1Val, 0, 1023, 30, 150); // ค่าจากโพเทนชิโอมิเตอร์กับค่าที่เซอร์โวสามารถใช้และเก็บไว้ใช้ในภายหลัง
pot2Val = analogRead(pot2);
pot2Angle = map(pot2Val, 0, 1023, 60, 110);
pot3Val = analogRead(pot3);
pot3Angle = map(pot3Val, 0, 1023, 20, 100);
pot4Val = analogRead(pot4);
pot4Angle = map(pot4Val, 0, 1023, 30, 95); //
pot5Val = analogRead(pot5);
pot5Angle = map(pot5Val, 0, 1023, 40, 130);
pot6Val = analogRead(pot6);
pot6Angle = map(pot6Val, 0, 1023, 90, 160);
servo1.write(pot1Angle); // จะทำให้เซอร์โวย้ายไปที่มุมที่แมปไว้
servo2.write(pot2Angle);
servo3.write(pot3Angle);
servo4.write(pot4Angle);
servo5.write(pot5Angle);
servo6.write(pot6Angle);
if(digitalRead(button1) == HIGH){ //นี่จะตรวจสอบว่ามีการกด button1 กี่ครั้งและบันทึกตำแหน่งลงในอาร์เรย์โดยขึ้นอยู่กับจำนวนครั้งที่กด switch / case ทำงานเหมือนคำสั่ง if
button1Presses++;
switch(button1Presses){
case 1:
servo1PosSaves[0] = pot1Angle;
servo2PosSaves[0] = pot2Angle;
servo3PosSaves[0] = pot3Angle;
servo4PosSaves[0] = pot4Angle;
servo5PosSaves[0] = pot5Angle;
servo6PosSaves[0] = pot6Angle;
digitalWrite(LED1, HIGH);
Serial.println("Pos 1 Saved");
break;
case 2:
servo1PosSaves[1] = pot1Angle;
servo2PosSaves[1] = pot2Angle;
servo3PosSaves[1] = pot3Angle;
servo4PosSaves[1] = pot4Angle;
servo5PosSaves[1] = pot5Angle;
servo6PosSaves[1] = pot6Angle;
digitalWrite(LED2, HIGH);
Serial.println("Pos 2 Saved");
break;
case 3:
servo1PosSaves[2] = pot1Angle;
servo2PosSaves[2] = pot2Angle;
servo3PosSaves[2] = pot3Angle;
servo4PosSaves[2] = pot4Angle;
servo5PosSaves[2] = pot5Angle;
servo6PosSaves[2] = pot6Angle;
digitalWrite(LED3, HIGH);
Serial.println("Pos 3 Saved");
break;
case 4:
servo1PosSaves[3] = pot1Angle;
servo2PosSaves[3] = pot2Angle;
servo3PosSaves[3] = pot3Angle;
servo4PosSaves[3] = pot4Angle;
servo5PosSaves[3] = pot5Angle;
servo6PosSaves[3] = pot6Angle;
digitalWrite(LED4, HIGH);
Serial.println("Pos 4 Saved");
break;
case 5:
servo1PosSaves[4] = pot1Angle;
servo2PosSaves[4] = pot2Angle;
servo3PosSaves[4] = pot3Angle;
servo4PosSaves[4] = pot4Angle;
servo5PosSaves[4] = pot5Angle;
servo6PosSaves[4] = pot6Angle;
digitalWrite(LED4, LOW);
Serial.println("Pos 5 Saved");
break;
case 6:
servo1PosSaves[5] = pot1Angle;
servo2PosSaves[5] = pot2Angle;
servo3PosSaves[5] = pot3Angle;
servo4PosSaves[5] = pot4Angle;
servo5PosSaves[5] = pot5Angle;
servo6PosSaves[5] = pot6Angle;
digitalWrite(LED3, LOW);
Serial.println("Pos 6 Saved");
break;
case 7:
servo1PosSaves[6] = pot1Angle;
servo2PosSaves[6] = pot2Angle;
servo3PosSaves[6] = pot3Angle;
servo4PosSaves[6] = pot4Angle;
servo5PosSaves[6] = pot5Angle;
servo6PosSaves[6] = pot6Angle;
digitalWrite(LED2, LOW);
Serial.println("Pos 7 Saved");
break;
}
}
if(digitalRead(button2) == HIGH){ // Pretty self-explnatory here
button2Pressed = true;
}
if(button2Pressed){ // หาก 2 กดเป็นจริงเซอร์โวจะทำงานแม้ว่าตำแหน่งที่บันทึกไว้ทั้งหมด
for(int i = 0; i < 7; i++){
servo1.write(servo1PosSaves[i]);
servo2.write(servo2PosSaves[i]);
servo3.write(servo3PosSaves[i]);
servo4.write(servo4PosSaves[i]);
servo5.write(servo5PosSaves[i]);
servo6.write(servo6PosSaves[i]);
Serial.println(" potentimeter Angles: ");
Serial.println(servo1PosSaves[i]);
Serial.println(servo2PosSaves[i]);
Serial.println(servo3PosSaves[i]);
Serial.println(servo4PosSaves[i]);
Serial.println(servo5PosSaves[i]);
Serial.println(servo6PosSaves[i]);
delay(1500);
}
}
delay(500);
}
ถ่ายวีดีโอ มาดูหน่อยครับ
ขอดูตอนมันทำงานตอนนี้หน่อยมันทำงานแบบไหน มีตัง ฮาร์ดแวร์รึยังครับ