Re: Zpomalení serv s použitím driveru PCA9685
Napsal: 23 pro 2019, 17:03
Aha, no tak proto
Teď jsem ten program dostal do stejného stavu principielně, jako byl na začátku, akorát teď tam jsou jen ty dvě zmiňované fce, ještě budu muset nahradit globální proměnné atd., ale to už pořeším později. Takže toto je zkracený program, jenže když jsem to chtěl zpomalit, tak jsem se úplně zamotal v těch polích kterých tu je tedy požehnaně -_-
Zkoušel jsem to tímto stylem jak jste říkali((predchozi[x]*(100-rel_pos)/100) + (nove[x]*rel_pos/100)), jenže po zapnutí auto režimu ani obraz ani zvuk, něco jsem tam musel pokazil, buď jsem špatně vytvořil pole nebo jsem to do toho programu špatně dosadil, pak mě napadlo použit cyklus while a zpomalovací podmínku, tam mi to zpomalovalo, ale jen první servo.

Kód: Vybrat vše
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver driverPCA = Adafruit_PWMServoDriver(0x40);
#define tl1 11
#define tl2 12
const int CISEL=6;
const int POCET=20;
int m[CISEL][POCET];
int pos[CISEL], pulse[CISEL], predchozi[CISEL];
int pot[CISEL]={A0,A1,A2,A3,A6,A7};
int PWM_pin[CISEL]={0,1,2,3,4,5};
int posledniPoloha, p=0, i=0;
void setup() {
driverPCA.begin();
driverPCA.setPWMFreq(60);
pinMode(tl1,INPUT);
pinMode(tl2,INPUT);
}
void loop() {
if(digitalRead(tl1)==HIGH){
for (int i=0; i<CISEL; i++){
m[i][p]=pos[i];
}
p++;
delay(500);
}
if(digitalRead(tl2)==HIGH){
p=0;
while(p<posledniPoloha){
autoServo();
p++;
delay(500);
}
}
else{
manualServo();
posledniPoloha=p;
}
}
void manualServo(){
for(int i=0; i<CISEL; i++) {
pos[i] = analogRead(pot[i]);
pulse[i] = map(pos[i], 0, 1023, 100, 600);
driverPCA.setPWM(PWM_pin[i], 0, pulse[i]);
}
}
void autoServo(){
for (int i=0; i<CISEL; i++) {
pulse[i] = map(m[i][p], 0, 1023, 100, 600);
driverPCA.setPWM(PWM_pin[i], 0, pulse[i]);
}
}
Kód: Vybrat vše
...
manualServo();
spos[i]=pos[i];
...
while(spos[i]!=m[i][p]){
autoServo();
if(spos[i]<m[i][p]){
spos[i]++;
delay(10);
}
else if(spos1>m1[i]){
spos[i]--;
delay(10);
}
}