欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
Arduino flash記憶(隨動機械手)不能實現隨動的問題
[打印本頁]
作者:
熱心市民王先生2
時間:
2020-2-16 18:21
標題:
Arduino flash記憶(隨動機械手)不能實現隨動的問題
碼源轉載自:
http://www.raoushi.com/bbs/dpj-156513-1.html
,只是用于學習,若有侵犯原作者權益請告知,我會及時刪除的
附:代碼
#include <Servo.h>
Servo servo_0; //定義4個舵機
Servo servo_1;
Servo servo_2;
Servo servo_3;
int sensorPin0 = A0; //電位器阻值輸入口
int sensorPin1 = A1;
int sensorPin2 = A2;
int sensorPin3 = A3;
int SensVal_0;
int SensVal_1;
int SensVal_2;
int SensVal_3;
int led1 = 1;
int led2 = 2;
boolean playmode = false; //設置運行模式,初始化為學習
float angle0[30];// 存儲底座舵機動作的數組,最多存30個
float angle1[30];//手臂舵機角度數組
float angle2[30];//手掌舵機角度數組
float angle3[30];//夾子舵機角度數組
float dif[4],temp[4];// 差分值與中間數組
int i,j,k,stepsMax,num=0,key_value,num1=0,del;
void setup() {
// put your setup code here, to run once:
pinMode(4, INPUT); // 鍵盤輸入口
pinMode(sensorPin0, INPUT);
pinMode(sensorPin1, INPUT);
pinMode(sensorPin2, INPUT);
pinMode(sensorPin3, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
servo_0.attach(6); // 連接舵機
servo_1.attach(9);
servo_2.attach(10);
servo_3.attach(11);
Serial.begin(9600);
}
void loop()
{
// 主函數,loop循環
if(playmode == false) //學習模式
{
SensVal_1 = analogRead(sensorPin1); //讀取電位器阻值
Serial.println(SensVal_1);
SensVal_1 = map(SensVal_1, 0, 1024, 500, 2500);//將電位器阻值與舵機角度映射,實現兩個機械臂的同步
SensVal_0 = analogRead(sensorPin0);
Serial.println(SensVal_0);
SensVal_0 = map(SensVal_0, 0, 1024, 500, 2500);
SensVal_2 = analogRead(sensorPin2);
Serial.println(SensVal_2);
SensVal_2 = map(SensVal_2, 0, 1024, 500, 2500);
SensVal_3 = analogRead(sensorPin3);
Serial.println(SensVal_3);
SensVal_3 = map(SensVal_3, 0, 1024, 500, 2500);
servo_0.writeMicroseconds(SensVal_0); //控制主機械臂跟隨從機械臂運行
servo_1.writeMicroseconds(SensVal_1);
servo_2.writeMicroseconds(SensVal_2);
servo_3.writeMicroseconds(SensVal_3);
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
}
else //運行模式
{
for(i=0;i<num;i++)
{
temp[0]=angle0[i]; //暫存當前動作角度值
temp[1]=angle1[i];
temp[2]=angle2[i];
temp[3]=angle3[i];
j=i+1; //指向下一個動作
if(j==num) j=0;
dif[0] = abs(angle0[j]-angle0[i]); //下一動作與當前動作做差分
dif[1] = abs(angle1[j]-angle1[i]);
dif[2] = abs(angle2[j]-angle2[i]);
dif[3] = abs(angle3[j]-angle3[i]);
stepsMax = max(dif[0],dif[1]); //找出最大差分值
stepsMax = max(stepsMax,dif[2]);
stepsMax = max(stepsMax,dif[3]);
//將兩個動作分為最大差分值個小動作,即用每個舵機的差分值除以最大差分值
if (angle0[j] < angle0[i]) dif[0] = 0-dif[0]/stepsMax; else dif[0] = dif[0]/stepsMax;
if (angle1[j] < angle1[i]) dif[1] = 0-dif[1]/stepsMax; else dif[1] = dif[1]/stepsMax;
if (angle2[j] < angle2[i]) dif[2] = 0-dif[2]/stepsMax; else dif[2] = dif[2]/stepsMax;
if (angle3[j] < angle3[i]) dif[3] = 0-dif[3]/stepsMax; else dif[3] = dif[3]/stepsMax;
for(k=0;k<stepsMax;k++) // 運行至下一大動作
{
Serial.println("stepin");
angle0[i] += dif[0]; //運行到下一小動作
angle1[i] += dif[1];
angle2[i] += dif[2];
angle3[i] += dif[3];
servo_0.writeMicroseconds(angle0);
servo_1.writeMicroseconds(angle1);
servo_2.writeMicroseconds(angle2);
servo_3.writeMicroseconds(angle3);
delay(1);
}
Serial.println("stepout");
angle0[i] = temp[0]; //返回暫存的動作值
angle1[i] = temp[1];
angle2[i] = temp[2];
angle3[i] = temp[3];
}
}
Serial.println(digitalRead(4));
Button(); //按鍵檢測
}
void Button() //按鍵檢測
{
if (digitalRead(4) == true)
{
delay(20); //消抖
if (digitalRead(4) == true)
{
key_value = 1;
delay(1000);
if(digitalRead(4) == true) key_value = 2; //長按進入運行模式
}
}
if ((key_value == 1)) // 記錄舵機當前位置
{
angle0[num1]=SensVal_0;
angle1[num1]=SensVal_1;
angle2[num1]=SensVal_2;
angle3[num1]=SensVal_3;
num1++; //指針加1
key_value = 0;
playmode = false;
}
else if (key_value == 2)
{
num = num1; //取出動作的總數
num1=0; //為下一次學習做準備
playmode = true; //運行模式
key_value = 0;
digitalWrite(led2,HIGH);
digitalWrite(led1,LOW);
}
}
復制代碼
作者:
666cww
時間:
2020-2-20 14:39
怎么還是按下按鍵才能隨動,而且怎么操作啊
作者:
熱心市民王先生2
時間:
2020-2-20 19:53
666cww 發表于 2020-2-20 14:39
怎么還是按下按鍵才能隨動,而且怎么操作啊
我現在也是出現了這樣的問題才發帖求助的
作者:
qq519512215
時間:
2020-5-2 19:23
熱心市民王先生2 發表于 2020-2-20 19:53
我現在也是出現了這樣的問題才發帖求助的
按鍵接的沒對,Serial.println(key_value);在讀取按鍵里面加這個,軟按鍵對,串口通訊會返回1、2。作者用的是微動按鍵。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1