2026年1月13日 星期二

[OTTO Ninja]OTTO忍者機器人頭部按鈕控制

 範例:


Arduino程式:


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <Servo.h>


const uint8_t ServoLeftLegPin =15; // D8 or 15
const uint8_t ServoRightLegPin=2; // D4 or 2
const uint8_t ServoLeftFootPin  =13; // D7 or 13
const uint8_t ServoRightFootPin =0; // D3 or 0
const uint8_t ServoLeftArmPin =D0; // D0 or 16
const uint8_t ServoRightArmPin =3; // RX or 3
const uint8_t ServoHeadPin   =1; // TX or 1
Servo myservoLeftLeg;
Servo myservoLeftFoot;
Servo myservoRightFoot;
Servo myservoRightLeg;
Servo myservoLeftArm;
Servo myservoRightArm;
Servo myservoHead;

int LA0= 60 +0; // Left Leg standing Position; 0 = Full Tilt Right   180 = Full Tilt Left    Default = 60
int RA0= 120 +0;// Right Leg standing position; 0 = Full Tilt Right   180 = Full Tilt Left    Default = 120
int LA1= 180; // Left Leg roll Position; 0 = Full Tilt Right   180 = Full Tilt Left    Default = 170
int RA1= 0;  // Right Leg roll position,0 = Full Tilt Right   180 = Full Tilt Left     Default = 10
int LATL= LA0 +40;  // Left Leg tilt left walking position,0 = Full Tilt Right   180 = Full Tilt Left    Default = 90
int RATL= RA0 +60;  // Right Leg tilt left walking position,0 = Full Tilt Right   180 = Full Tilt Left    Default = 180
int LATR= LA0 -60;  // Left Leg tilt right walking position,0 = Full Tilt Right   180 = Full Tilt Left     Default = 0
int RATR= RA0 -40;  // Right Leg tilt right walking position,0 = Full Tilt Right   180 = Full Tilt Left     Default = 90

int LFFWRS=12; // Left foot forward walking rotation Speed; 0 = Slowest  90 = Fastest    Default = 20
int RFFWRS=12 ; // Right foot forward walking rotation Speed; 0 = Slowest  90 = Fastest    Default = 20
int LFBWRS= 12; // Left foot Backward walking rotation Speed; 0 = Slowest  90 = Fastest    Default = 20
int RFBWRS= 12; // Right foot Backward walking rotation Speed; 0 = Slowest  90 = Fastest    Default = 20

void NinjaHome()
{
myservoLeftFoot.attach(ServoLeftFootPin, 544, 2400);
myservoRightFoot.attach(ServoRightFootPin, 544, 2400);
myservoLeftLeg.attach(ServoLeftLegPin, 544, 2400);
myservoRightLeg.attach(ServoRightLegPin, 544, 2400);
myservoHead.attach(ServoHeadPin, 544, 2400);
myservoLeftArm.write(180);
myservoRightArm.write(0);
myservoHead.write(90);
delay(400);
myservoLeftFoot.write(90);
myservoRightFoot.write(90);
myservoLeftLeg.write(60);
myservoRightLeg.write(120);
delay(400);
myservoLeftLeg.detach();
myservoRightLeg.detach();
myservoLeftArm.detach();
myservoRightArm.detach();
myservoHead.detach();
}
void NinjaSetWalk()
 {
myservoLeftArm.attach(ServoLeftArmPin, 544, 2400);
  myservoRightArm.attach(ServoRightArmPin, 544, 2400);
  myservoLeftArm.write(90);
  myservoRightArm.write(90);
 delay(200);
 myservoLeftArm.detach();
 myservoRightArm.detach();
 myservoLeftLeg.attach(ServoLeftLegPin, 544, 2400);
myservoRightLeg.attach(ServoRightLegPin, 544, 2400);
myservoLeftLeg.write(LA0);
myservoRightLeg.write(RA0);
 delay(300);
 myservoLeftLeg.detach();
myservoRightLeg.detach();
 myservoLeftArm.attach(ServoLeftArmPin, 544, 2400);
myservoRightArm.attach(ServoRightArmPin, 544, 2400);
 myservoLeftArm.write(180);
myservoRightArm.write(0);
 delay(300);
 myservoLeftArm.detach();
myservoRightArm.detach();
}

void NinjaSetRoll()
 {myservoLeftArm.attach(ServoLeftArmPin, 544, 2400);
myservoRightArm.attach(ServoRightArmPin, 544, 2400);
myservoLeftArm.write(90);myservoRightArm.write(90);
 delay(200);
 myservoLeftArm.detach();myservoRightArm.detach();
myservoLeftLeg.attach(ServoLeftLegPin, 544, 2400);
myservoRightLeg.attach(ServoRightLegPin, 544, 2400);
myservoLeftLeg.write(LA1);
myservoRightLeg.write(RA1);
 delay(300);
 myservoLeftLeg.detach();myservoRightLeg.detach();
myservoLeftArm.attach(ServoLeftArmPin, 544, 2400);
myservoRightArm.attach(ServoRightArmPin, 544, 2400);
 myservoLeftArm.write(180);myservoRightArm.write(0);
 delay(300);
 myservoLeftArm.detach();myservoRightArm.detach();}


void setup() {
  pinMode(12,INPUT);
    NinjaHome();

}

void loop() {
    if (digitalRead(12)) {
      NinjaSetWalk();
    } else {
      NinjaSetRoll();
    }

}

沒有留言:

張貼留言