collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: comado RC  (Lida 8235 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline dvdt

  • Mini Robot
  • *
  • Mensagens: 1.248
  • David Teles
    • Site Pessoal
Re: comado RC
« Responder #15 em: 19 de Maio de 2011, 17:00 »
obrigado
Engenharia Electrotécnica e Computadores (IST)
Analyst in a Big 4

Offline dvdt

  • Mini Robot
  • *
  • Mensagens: 1.248
  • David Teles
    • Site Pessoal
Re: comado RC
« Responder #16 em: 19 de Maio de 2011, 22:14 »
no fim de ver o site com atençao verifiquei que nao tinha grande informaçao  mas eu queria saber em que pinos e que ligaria os cabos do sinal
Engenharia Electrotécnica e Computadores (IST)
Analyst in a Big 4

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: comado RC
« Responder #17 em: 19 de Maio de 2011, 22:19 »
Tendo em conta que até lá tens código fonte pronto a meter no IDE do Arduino e comentado tudo certinho, mais que isso não sei...
Avr fanboy

Offline dvdt

  • Mini Robot
  • *
  • Mensagens: 1.248
  • David Teles
    • Site Pessoal
Re: comado RC
« Responder #18 em: 04 de Junho de 2011, 10:12 »
no fim de procurar muito encontrei o codigo so que apenas liga um motor quando eu movo um (nao sei nome verdadeiro ) joystick. Entao eu estive a tentar  alterar o codigo de maneira que quando eu movo o joystick para a frente ele ligue os dois motores para a frente, quando eu puxo para tras ele liga os dois motores em reverse e quando puxo para a esquerda ele ligue o motor da direita para a frente e o da esquerda em reverse e vice versa.
Eu penso que mesmo assim mal explicado da para perceber mas pronto fica aqui tambem o codigo caso queira ver as alterações feitas e que so esta a responder um motor mas o arduino esta a receber sinal pois ele liga e desliga um led quando se move os joyticks .
Código: [Seleccione]
int motor1Pin1 = 5;    // Ponte H
int motor1Pin2 = 6;    // Ponte H
int motor2Pin1 = 10;   // Ponte H
int motor2Pin2 = 11;   // Ponte H

int ledPin1 = 13; // led indicator lights
int ledPin2 = 12;
int ledPin3 = 14;

int servo1 = 2;  // r/c channel 1
int servo2 = 3;  // r/c channel 2
//int servo3 = 7;

int power = 4; // power for R/C receiver, stays HIGH (5v).

//int relay_Pin = 8;

unsigned int relay_val;

volatile unsigned long servo1_startPulse;  //values for channel 1 signal capture
volatile unsigned servo1_val;
volatile int adj_val1; 
volatile int servo1_Ready;

volatile unsigned long servo2_startPulse; //values for channel 2 signal capture
volatile unsigned servo2_val;
volatile int adj_val2; 
volatile int servo2_Ready;

int deadband_high = 275;
int deadband_low = 235; 

int pwm_ceiling = 256;
int pwm_floor = 255; 

int low1 = 1100;  // adjust these values if your R/C readings are above or below these for channels 1 and 2.
int high1 = 1900;
int low2 = 1100;
int high2 = 1900;

int n = 0;

void setup() {
 
  //TCCR0B = TCCR0B & 0b11111000 | 0x03;
  //TCCR1B = TCCR1B & 0b11111000 | 0x01;
 
  Serial.begin(9600);
 
  //motor1 pins
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);

  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);

  //pinMode(relay_Pin, OUTPUT);
 
  pinMode(power, OUTPUT);

  //led's
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  //pinMode(ledPin3, OUTPUT);

  //PPM inputs from RC receiver
  pinMode(servo1, INPUT); //Pin 2 as input
  pinMode(servo2, INPUT); //Pin 3 as input
  //pinMode(servo3, INPUT); //Pin 3 as input

  digitalWrite(power, HIGH);
  //digitalWrite(relay_Pin, LOW);
 
  delay(1200);

  attachInterrupt(0, rc1_begin, RISING);    // catch interrupt 0 (digital pin 2) going HIGH and send to rc1()
  attachInterrupt(1, rc2_begin, RISING);    // catch interrupt 1 (digital pin 3) going HIGH and send to rc2()

}

////////// attach servo signal interrupts to catch signals as they go HIGH then again as they go LOW, then calculate the pulse length.

void rc1_begin() {           // enter rc1_begin when interrupt pin goes HIGH.

  servo1_startPulse = micros();     // record microseconds() value as servo1_startPulse
 
  detachInterrupt(0);  // after recording the value, detach the interrupt from rc1_begin
 
  attachInterrupt(0, rc1_end, FALLING); // re-attach the interrupt as rc1_end, so we can record the value when it goes low
 
}

void rc1_end() {
 
 servo1_val = micros() - servo1_startPulse;  // when interrupt pin goes LOW, record the total pulse length by subtracting previous start value from current micros() vlaue.
 
 detachInterrupt(0);  // detach and get ready to go HIGH again
 
 attachInterrupt(0, rc1_begin, RISING);
 
}

void rc2_begin() {

  servo2_startPulse = micros();

  detachInterrupt(1);
 
  attachInterrupt(1, rc2_end, FALLING);
 


}

void rc2_end() {
 
 servo2_val = micros() - servo2_startPulse;
 
 detachInterrupt(1);
 
 attachInterrupt(1, rc2_begin, RISING);
 
}
/////// servo interrupts end

/////// MAIN LOOP

void loop() {

///// channel 1 bom sinal confirmado
 if (servo1_val < 600 || servo1_val > 2400) {  // only set the servo1_Ready flag if the value is a valid Servo pulse between 600-2400 microseconds.
  servo1_Ready = false;
  servo1_val = 1500;
 }
 else {
  servo1_Ready = true; // se nao for os valor nao sao processados
 }
 
///// channel 1 bom sinal confirmado

 if (servo2_val < 600 || servo2_val > 2400) {
  servo2_Ready = false;
  servo2_val = 1500;
 }
 else {
  servo2_Ready = true;
 }

////////// channel 1          


    if (servo1_Ready) {
     
      servo1_Ready = false; 
      adj_val1 = map(constrain(servo1_val, 600, 2400), low1, high1, 0, 511);
      constrain(adj_val1, 0, 511);

      if (adj_val1 < 0) {
        adj_val1 = 0;
      }     
      if (adj_val1 > 511) {
        adj_val1 = 511;
      }

      if (adj_val1 > deadband_high) {
        //Frente
        digitalWrite(motor1Pin2,LOW);
        digitalWrite(motor2Pin2, LOW);
        analogWrite(motor1Pin1, adj_val1 - pwm_ceiling);
        analogWrite(motor2Pin1, adj_val1 - pwm_ceiling);
        digitalWrite(ledPin1, LOW);
      }
      else if (adj_val1 < deadband_low) {
        //Marcha Atras
        digitalWrite(motor1Pin1, LOW);
        digitalWrite(motor2Pin1, LOW);
        analogWrite(motor1Pin2, pwm_floor - adj_val1);
        analogWrite(motor2Pin2, pwm_floor - adj_val1);
        digitalWrite(ledPin1, LOW);
      }
      else {
        //parar
        digitalWrite(motor1Pin1, LOW);
        digitalWrite(motor2Pin1, LOW);
        digitalWrite(motor1Pin2, LOW);
        digitalWrite(motor2Pin2, LOW);
        digitalWrite(ledPin1, HIGH); // liga o led neutro e para o carro
      }
     
    }
   
///////////// channel 2

   if (servo2_Ready) {
     
      servo2_Ready = false; 
      adj_val2 = map(constrain(servo2_val, 600, 2400), low1, high1, 0, 511);
      constrain(adj_val2, 0, 511);

      if (adj_val2 < 0) {
        adj_val2 = 0;
      }     
      if (adj_val2 > 511) {
        adj_val2 = 511;
      }

      if (adj_val2 > deadband_high) {
        //curva
        digitalWrite(motor1Pin2, LOW);
        digitalWrite(motor2Pin1, LOW);
        analogWrite(motor1Pin1, adj_val2 - pwm_ceiling);
        analogWrite(motor2Pin2, adj_val2 - pwm_ceiling);
        digitalWrite(ledPin2, LOW);
      }
      else if (adj_val2 < deadband_low) {
        //curva
        digitalWrite(motor1Pin1, LOW);
        digitalWrite(motor2Pin2, LOW);
        analogWrite(motor1Pin2, pwm_floor - adj_val2);
        analogWrite(motor2Pin1, pwm_floor - adj_val2);
        digitalWrite(ledPin2, LOW);
      }
      else {
        //parar
        digitalWrite(motor1Pin1, LOW);
        digitalWrite(motor1Pin2, LOW);
        digitalWrite(motor2Pin1,LOW);
        digitalWrite(motor2Pin2, LOW);
        digitalWrite(ledPin2, HIGH); // liga o led de neutro e para o carro
      }
     
    }

    //mostras as acçoes no Serial monitor do Arduino IDE
    Serial.print("ch1:  ");
    Serial.print(adj_val1);
    Serial.print("  ");
    Serial.print("rc1:  ");
    Serial.print(servo1_val);
    Serial.print("  ");
    Serial.print("ch2:  ");
    Serial.print(adj_val2);
    Serial.print("  ");
    Serial.print("rc2:  ");
    Serial.print(servo2_val);
    Serial.print("  ");
    Serial.print("loop counter:  ");
    Serial.print(n);
    Serial.println("  ");   

    //n++;

 
}
Engenharia Electrotécnica e Computadores (IST)
Analyst in a Big 4

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: comado RC
« Responder #19 em: 04 de Junho de 2011, 12:46 »
Primeiro, fazer isso do Rising e Falling separado é um enorme erro, usa interrupções que detectam o rising e o fall, ou seja CHANGE, assim só tens uma ISR e é muito mais bem feito assim.
Avr fanboy

Offline dvdt

  • Mini Robot
  • *
  • Mensagens: 1.248
  • David Teles
    • Site Pessoal
Re: comado RC
« Responder #20 em: 04 de Junho de 2011, 13:55 »
eu nao percebi maior parte do codigo pois nao fui eu que o escrevi na totalidade sera que podias mostrar como e que se faz?
Engenharia Electrotécnica e Computadores (IST)
Analyst in a Big 4

Offline dvdt

  • Mini Robot
  • *
  • Mensagens: 1.248
  • David Teles
    • Site Pessoal
Re: comado RC
« Responder #21 em: 04 de Junho de 2011, 18:49 »
o meu problema e que so o codigo que fica no fim e que funciona ou seja neste caso o da direcção se eu meto o da direcçao em primeiro começa a funcionar o de avançar e o de marcha atras.
Qual sera o problema no codigo
Eu precisava de uma soluçao para poder prosseguir com o projecto
Engenharia Electrotécnica e Computadores (IST)
Analyst in a Big 4

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: comado RC
« Responder #22 em: 04 de Junho de 2011, 22:51 »
Provavelmente estás a usar as variaveis erradas, copy paste de funções e if's costuma dar nisso.
Avr fanboy

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: comado RC
« Responder #23 em: 04 de Junho de 2011, 23:14 »
        digitalWrite(motor1Pin1, LOW);
        digitalWrite(motor2Pin2, LOW);

Isto é sempre sempre low, logo qual o sentido de estar dentro dos if's quase todos, depois para que serve isso, não seria para controlar o sentido de rotação dos motores e tal?
Avr fanboy

Offline dvdt

  • Mini Robot
  • *
  • Mensagens: 1.248
  • David Teles
    • Site Pessoal
Re: comado RC
« Responder #24 em: 04 de Junho de 2011, 23:17 »
o LOW e para manter o sinal desligado penso eu sera quae nao faz diferença se eu os apagar?
Engenharia Electrotécnica e Computadores (IST)
Analyst in a Big 4

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: comado RC
« Responder #25 em: 04 de Junho de 2011, 23:21 »
Eia, então tu fazes low's e logo a seguir pwm's?
E controlo de direção, é que só a dar pwm nos motores não os fazes andar para trás, ou são servos modificados, se forem é melhor usares a biblioteca servo.
Avr fanboy

Offline dvdt

  • Mini Robot
  • *
  • Mensagens: 1.248
  • David Teles
    • Site Pessoal
Re: comado RC
« Responder #26 em: 04 de Junho de 2011, 23:26 »
nao eu quero usar motores de cadeira de rodas ligadas e uma ponte H daquelas que o xico desenhou
e eu faço LOW num pino e PWM noutroou seja ao mudar de pinos ou ando para tras ou para a frente
mas o meu problema e que apenas a codigo que fica em ultimo e que funciona ou seja o que fica escrito por cima desse e esquecido pelo arduino isto os led's respondem mas o PWM nao o que e que estara mal e que se eu movo um codigo de cima para o fim ele começa a funcionar mas o que estava a funcionar antes deixa de funcionar :o ???
Engenharia Electrotécnica e Computadores (IST)
Analyst in a Big 4

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: comado RC
« Responder #27 em: 04 de Junho de 2011, 23:31 »
Isso é por teres if's dentro de if's e provavelmente mau condicionamento das variaveis, agora estou meio cansado para ver isso com atenção.
Avr fanboy

Offline dvdt

  • Mini Robot
  • *
  • Mensagens: 1.248
  • David Teles
    • Site Pessoal
Re: comado RC
« Responder #28 em: 04 de Junho de 2011, 23:36 »
ok hoje tambem nao vou fazer mais nada mas se amanha podes-ses dar uma vista de olho e descobrisses o problema ficava te muito grato
Engenharia Electrotécnica e Computadores (IST)
Analyst in a Big 4

Offline dvdt

  • Mini Robot
  • *
  • Mensagens: 1.248
  • David Teles
    • Site Pessoal
Re: comado RC
« Responder #29 em: 07 de Junho de 2011, 18:16 »
boas tardes pessoal eu ando aqui ainda com o problema do codigo sera que alguém me podia ajudar a ver o que e que esta mal?
eu perciso de ajuda rapido
Engenharia Electrotécnica e Computadores (IST)
Analyst in a Big 4