int servo1Pin=3; // 右肩膀控制的舵机
int servo2Pin=5; // 右胳膊控制的舵机
int servo3Pin=6; // 左手上下控制的舵机 Y
int servo4Pin=9; // 左手左右控制的舵机 X
int servo5Pin=10; // 左手抓握控制机械臂
int pulse1=1700;
int pulse2=1600;
int pulse3=1450;
int pulse4=1700;
int pulse5=500;
unsigned long previousMillis=0; //起始时间
long interval=20; //20ms
//初始位置
int angle[5]={190,190,190,190,280};
int temp[15];
/*
int angle1=190;
int angle2=190;
int angle3=190;
int angle4=190;
int angle5=190;
*/
char stroke; //Serial接收标志位
int i=0;
int flag=0;
void setup() {
// put your setup code here, to run once:
pinMode(servo1Pin,OUTPUT);
pinMode(servo2Pin,OUTPUT);
pinMode(servo3Pin,OUTPUT);
pinMode(servo4Pin,OUTPUT);
pinMode(servo5Pin,OUTPUT);
Serial.begin(9600); //开启Serial
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()>0)
{
stroke=Serial.read();
Serial.println(stroke);
delay(20);
if(stroke=='s') //起始标志为s
{
for(int i=0;i<5;i++)
{
temp[i]=Serial.read();
temp[i+1]=Serial.read();
temp[i+2]=Serial.read();
angle[i]= (temp[i]-48)*100+(temp[i+1]-48)*10+(temp[i+2]-48)*1;
Serial.println(angle[i]);
}
}
}
for(int j=0;j<4;j++)
{
if(angle[j]>280)
{
Serial.println("太大了");
angle[j]=280;
}
if(angle[j]<100)
{ angle[j]=100;}
}
if(angle[4]==280)
{
pulse5=1000;
}
if(angle[4]==100)
{
pulse5=500;
}
/*
for(int k=0;k<5;k++)
{
Serial.println(angle[k]);
}
*/
pulse1=(int)map(angle[0],100,280,850,2600);
pulse2=(int)map(angle[1],100,280,2400,800);
pulse3=(int)map(angle[2],100,280,400,2500);
pulse4=(int)map(angle[3],100,280,800,2600);
//pulse5=(int)map(angle[4],100,280,500,2500);
unsigned long currentMillis=millis();
if(currentMillis-previousMillis>interval)
{
previousMillis=currentMillis;
updateServo(servo1Pin,pulse1);
updateServo(servo2Pin,pulse2);
updateServo(servo3Pin,pulse3);
updateServo(servo4Pin,pulse4);
updateServo(servo5Pin,pulse5);
}
}
void updateServo(int pin,int pulse)
{
digitalWrite(pin,HIGH);
delayMicroseconds(pulse);
digitalWrite(pin,LOW);
}
我用C#做上位机与arduino做了一个机械臂系统 C#串行口发送数据 在刚运行的时候arduino运行十分流畅 但是过大概两三分钟 arduino就会卡死 且Rx Tx的灯都变成常亮而不是正常通信的时候的闪烁状态了 我是用arduino控制舵机 舵机单独供电 arduino USB供电 没有单独9V供电 通过commonitor监视当arduino死机的时候 C#发送数据正常 且降低发送频率运行时长会增加 但不会超过五分钟 具体该如何解决 arduino的代码是将C#数据转为int
并驱动舵机