User
Data registr.: 03-08-2009 Residenza: Borgosesia
Messaggi: 262
|
Grazie! ho capito la logica delle miscelazioni ed in effetti è geniale (io avrò tante altre buone qualità ma proprio mi mancano queste intuizioni)
Però qualcosa non mi funziona, da serial monitor leggo i comandi della radio in modo corretto, sia i valori che le conversioni in % ma ho sempre un motore che gira in un senso e l'altro all'inverso. Agendo sugli stick non ci sono cambiamenti.
Sicuro ho scritto qualcosa di sbagliato, ho un sacco di dubbi anche dovuti alla ma scarsa conoscrnza della sintassi corretta. Codice: int channel_1_us;
int channel_2_us;
int channel_3_us;
int channel_4_us;
int channel_5_us;
int channel_6_us;
int channel_1_perc;
int channel_2_perc;
int channel_3_perc;
int channel_4_perc;
int channel_5_perc;
int channel_6_perc;
void loop() {
//leggi la durata dell'impulso sui 6 pin
channel_1_us = pulseIn (4, HIGH);
channel_2_us = pulseIn (5, HIGH);
channel_3_us = pulseIn (6, HIGH);
//channel_4_us = pulseIn (5, HIGH);
//channel_5_us = pulseIn (6, HIGH);
//channel_6_us = pulseIn (7, HIGH);
//limita la durata dell'impulso tra 1000 e 2000us e poi scalalo tra 0 e 100
channel_1_perc = map(constrain(channel_1_us, 1000, 2000), 1000, 2000, 0, 100);
channel_2_perc = map(constrain(channel_2_us, 1000, 2000), 1000, 2000, 0, 100);
channel_3_perc = map(constrain(channel_3_us, 1000, 2000), 1000, 2000, 0, 100);
channel_4_perc = map(constrain(channel_4_us, 1000, 2000), 1000, 2000, 0, 100);
channel_5_perc = map(constrain(channel_5_us, 1000, 2000), 1000, 2000, 0, 100);
channel_6_perc = map(constrain(channel_6_us, 1000, 2000), 1000, 2000, 0, 100);
//stampa sul serial monitor i valori in microsecondi e in percentuale
Serial.print("canale 1 microsec: ");
Serial.println(channel_1_us);
Serial.print("canale 1 %: ");
Serial.println(channel_1_perc);
Serial.print("canale 2 microsec: ");
Serial.println(channel_2_us);
Serial.print("canale 2 %: ");
Serial.println(channel_2_perc);
Serial.print("canale 3 microsec: ");
Serial.println(channel_3_us);
Serial.print("canale 3 %: ");
Serial.println(channel_3_perc);
Serial.print("canale 4 microsec: ");
Serial.println(channel_4_us);
Serial.print("canale 4 %: ");
Serial.println(channel_4_perc);
Serial.print("canale 5 microsec: ");
Serial.println(channel_5_us);
Serial.print("canale 5 %: ");
Serial.println(channel_5_perc);
Serial.print("canale 6 microsec: ");
Serial.println(channel_6_us);
Serial.print("canale 6 %: ");
Serial.println(channel_6_perc);
Serial.println("");
delay (2000);
}
int pwm_a = 3; //PWM control for motor outputs 1 and 2
int pwm_b = 9; //PWM control for motor outputs 3 and 4
int dir_a = 2; //direction control for motor outputs 1 and 2
int dir_b = 8; //direction control for motor outputs 3 and 4
int DIR_SX;
int DIR_DX;
int PWM_SX;
int PWM_DX;
void setup() {
Serial.begin (9600);
pinMode (4, INPUT);
pinMode (5, INPUT);
pinMode (6, INPUT);
//pinMode (5, INPUT);
//pinMode (6, INPUT);
//pinMode (7, INPUT);
pinMode(pwm_a, OUTPUT); //Set control pins to be outputs
pinMode(pwm_b, OUTPUT);
pinMode(dir_a, OUTPUT);
pinMode(dir_b, OUTPUT);
digitalWrite(dir_a, LOW); //per andare avanti
digitalWrite(dir_a, HIGH); //per andare indietro
analogWrite(pwm_a, 127);
analogWrite(pwm_b, 127);
channel_1_perc = map(constrain(channel_1_us, 1000, 2000), 1000, 2000, -100, 100);
channel_2_perc = map(constrain(channel_2_us, 1000, 2000), 1000, 2000, -100, 100);
PWM_SX = channel_1_perc + channel_2_perc/1;
PWM_DX = channel_1_perc - channel_2_perc/1;
if (PWM_SX>=0){DIR_SX = 1;}else{DIR_SX = 0;};
PWM_SX = map(abs(constrain(PWM_SX, -100, 100)), 0, 100, 0, 255);
if (PWM_DX>=0){DIR_DX = 1;}else{DIR_DX = 0;};
PWM_DX = map(abs(constrain(PWM_SX, -100, 100)), 0, 100, 0, 255);
digitalWrite(dir_a, DIR_SX);
digitalWrite(dir_b, DIR_DX);
analogWrite(pwm_a, PWM_SX);
analogWrite(pwm_b, PWM_DX);
} ah p.s. non voglio approfittare troppo del tuo tempo, non sertiti obbligato
|