Arduino 串行口通信死机 160C
 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
并驱动舵机

weixin_45688847
weixin_45688847 请问这个问题解决了吗,求同
12 个月之前 回复

2个回答

weixin_45688847
weixin_45688847 有新的链接吗,同样的问题,请指教
12 个月之前 回复

我觉得你要解决系统跑死的故障,
1,拆下所有舵机,减少电机对系统的干扰,单独跑程序看能跑几分钟,
2,确定系统有没有开启看门狗,是否正常喂狗,
3,上面两个都做了并且没有问题了,就和c#通信,再找通信的问题

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问