Torna indietro   BaroneRosso.it - Forum Modellismo > Categoria altre specialità modellistiche. > Mezzi Corazzati


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 28 marzo 20, 15:46   #11 (permalink)  Top
User
 
L'avatar di Mrk89
 
Data registr.: 29-05-2006
Residenza: Catania
Messaggi: 2.933
Citazione:
Originalmente inviato da Ch3ch2oh Visualizza messaggio
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
Nel programma che hai scritto devi avere due procedure, setup() e loop().
Il setup viene eseguito una sola volta, mentre il loop viene eseguito di continuo all'infinito.
I comandi per regolare la velocità e la direzione dei motori devono andare dentro il loop.
Prova questo. Dovrebbe funzionare, ma hai parecchie limitazioni e dovresti pulire parecchio il software. Fammi sapere

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;

signed int channel_1_perc;
signed int channel_2_perc;
int channel_3_perc;
int channel_4_perc;
int channel_5_perc;
int channel_6_perc;

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;
signed int PWM_SX;
signed 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);
}

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);

  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);

  //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);
}
__________________
Il filo attaccato all'antenna non mente mai....Troppo vento, si torna a casa....
I miei circuiti elettronici autocostruiti: Postbruciatore per ventole intubate ; Circuito luci per aeromodello-elimodello ; Rallenta servo con protezione da corto circuito
Mrk89 non è collegato   Rispondi citando
Vecchio 28 marzo 20, 18:36   #12 (permalink)  Top
User
 
Data registr.: 03-08-2009
Residenza: Borgosesia
Messaggi: 259
che pirla.... potevo arrivarci anche da solo, è logico. grazie.

l'ho provato al volo e sembra funzionare, anche se c'è molto ritardo dall'imput dei comandi alla risposta sui motori, inoltre devo capire se dando un comando verso un lato o l'altro i motori rallentano correttamente, così con il setup che ho ora (tutto su un tavolo) non capisco, devo costruire un piccolo accrocchio per fare dei test

ti tengo aggiornato!
Ch3ch2oh non è collegato   Rispondi citando
Vecchio 28 marzo 20, 18:45   #13 (permalink)  Top
User
 
L'avatar di Mrk89
 
Data registr.: 29-05-2006
Residenza: Catania
Messaggi: 2.933
Citazione:
Originalmente inviato da Ch3ch2oh Visualizza messaggio
che pirla.... potevo arrivarci anche da solo, è logico. grazie.

l'ho provato al volo e sembra funzionare, anche se c'è molto ritardo dall'imput dei comandi alla risposta sui motori, inoltre devo capire se dando un comando verso un lato o l'altro i motori rallentano correttamente, così con il setup che ho ora (tutto su un tavolo) non capisco, devo costruire un piccolo accrocchio per fare dei test

ti tengo aggiornato!
Uno dei primi problemi l'hai già riscontrato, rileggi tutto il codice e cerca di capire perché
__________________
Il filo attaccato all'antenna non mente mai....Troppo vento, si torna a casa....
I miei circuiti elettronici autocostruiti: Postbruciatore per ventole intubate ; Circuito luci per aeromodello-elimodello ; Rallenta servo con protezione da corto circuito
Mrk89 non è collegato   Rispondi citando
Vecchio 28 marzo 20, 19:04   #14 (permalink)  Top
User
 
Data registr.: 03-08-2009
Residenza: Borgosesia
Messaggi: 259
ummmh presumo che sia lo stop che da il delay di 2 secondi....

avevo già letto in passato della funzione millis o qualcosa del genere....

studio e modifico
Ch3ch2oh non è collegato   Rispondi citando
Rispondi

Bookmarks



Strumenti discussione
Visualizzazione

Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
Carro armato scala 1:12 ale2001 Mezzi Corazzati 25 17 aprile 20 20:11
Carro armato chetto1965 Compro 1 05 marzo 15 21:19
carro armato rc dadoelella Compro 4 12 febbraio 12 02:23
carro armato Bontempogiovanni Compro 3 05 settembre 11 14:13
carro armato simone maddy Modellismo 7 04 luglio 11 00:12



Tutti gli orari sono GMT +2. Adesso sono le 11:09.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002