LusoRobótica - Robótica em Português

Sobre o LusoRobótica - antigo => Sugestões e Questões => Tópico iniciado por: gvirus em 04 de Abril de 2012, 16:25

Título: Erro no upload
Enviado por: gvirus em 04 de Abril de 2012, 16:25
Boa tarde, estou a fazer um projeto e gostaria de saber que tipo de erro é este quando faço upload para o arduino: avrdude: stk500_getsync(): not in sync: resp=0x00

Obrigado
Título: Re: Erro no upload
Enviado por: TigPT em 04 de Abril de 2012, 16:28
Este post pode ajudar-te: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1248528012/2#2 (http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1248528012/2#2)
Título: Re: Erro no upload
Enviado por: gvirus em 04 de Abril de 2012, 17:51
O problema mantem-se!  :(
Título: Re: Erro no upload
Enviado por: gvirus em 04 de Abril de 2012, 18:03
Posso mostrar lhe o meu projeto?
Título: Re: Erro no upload
Enviado por: CBX em 04 de Abril de 2012, 19:47
o problema não é do código, a porta que o arduino está ligada está errada, tens a board mal seleccionada ou drivers mal instaladas
Título: Re: Erro no upload
Enviado por: gvirus em 04 de Abril de 2012, 19:56
Vou instalar novamente o arduino.

Obrigado
Título: Re: Erro no upload
Enviado por: gvirus em 04 de Abril de 2012, 20:16
Já instalei as drivers já fui a tools -> board -> Arduino UNO e também já fui a tools -> Serial Port -> COM 1 e COM5 e o problema continua.
Título: Re: Erro no upload
Enviado por: gvirus em 04 de Abril de 2012, 20:29
Já fui ao gestor de dispositivos e encontrei Aduino UNO R3 (COM5) mas o problema mantem se.
Título: Re: Erro no upload
Enviado por: senso em 04 de Abril de 2012, 22:11
Instalas-te o ficheiro .inf quando ligas o Arduino no pc e ele é reconhecido como um dispositivo USB?
É que o Uno não usa os drivers FTDI.
Título: Re: Erro no upload
Enviado por: gvirus em 04 de Abril de 2012, 22:46
Irei consultar isso.
Título: Re: Erro no upload
Enviado por: gvirus em 04 de Abril de 2012, 23:17
O arduino reconhece e o problema de carregamento continua
Título: Re: Erro no upload
Enviado por: Ricardo Pedroso em 05 de Abril de 2012, 00:39
Experimente fazer uma coisa: clique no "up" quando aparecer a frase "Binary sketch size: ... bytes (of a ,.... byte maximum" imediatamente pressione (bem rápido)  o botão reset do arduino. Algumas versoes do Ard. Mini precisa disso por não ter reset automatico. pode ser que sua placa esteja com este defeito.
Título: Re: Erro no upload
Enviado por: gvirus em 05 de Abril de 2012, 00:54
ok vou tentar, ja lhe digo algo
Título: Re: Erro no upload
Enviado por: gvirus em 05 de Abril de 2012, 01:10
Ele agora deu para fazer o upload xD

Outra pergunta: No código, muda-se o primeiro parâmetro da função "register Function" para o ID atribuído ao sensor no Amarino, mas em existem várias linhas com "register Function" e o código foi enviado em txt.

Código: [Seleccione]
#include <MeetAndroid.h>

//Motor esquerdo
const int E_PWM = 6;
const int E_TRAS = 7;
const int E_FRENTE = 8;

//Motor direito
const int D_PWM = 3;
const int D_TRAS = 5;
const int D_FRENTE = 4;

const int PWM_MIN = 70;
const int PWM_MAX = 255;

//Amarino
MeetAndroid amarino;

const float MIN = 2;
const float MAX = 9;

const int X = 0;
const int Y = 1;
const int Z = 2;

long timestampUltimaLeitura;
float eixos[3];
//---

void setup() {
  //InicializaÁ„o do motor esquerdo
  pinMode(E_PWM, OUTPUT);
  pinMode(E_FRENTE, OUTPUT);
  pinMode(E_TRAS, OUTPUT);

  //InicializaÁ„o do motor direito
  pinMode(D_PWM, OUTPUT);
  pinMode(D_FRENTE, OUTPUT);
  pinMode(D_TRAS, OUTPUT);

  //InicializaÁ„o do Amarino
  Serial.begin(57600);
  amarino.registerFunction(acelerometro, 'A'); // a string
}

void loop() {
  amarino.receive(); // you need to keep this in your loop() to receive events
// distancia = readDistance();
  andar();
  delay(20);
}

void andar() {
  //Verifica se a ?ltima leitura foi h· mais de 2 segundos. Se sim, p·ra o carrinho.
  if(millis() - timestampUltimaLeitura > 2000) {
    parar();
  }
  //Se a leitura for recente, ent„o comanda o carrinho
  else {
    int intensidadeY = intensidade(Y);
    int intensidadeX = intensidade(X);
 
    //Est· indo pra frente?
    if(eixos[X] >= MIN) {
      //Est· indo para um dos lados tambÈm?
      if (eixos[Y] >= MIN) {
        amarino.send("frente-esquerda");
        frenteDireita(intensidadeX);
        frenteEsquerda(intensidadeXY());
      } else if(eixos[Y] < -MIN) {
        amarino.send("frente-direita");
        frenteDireita(intensidadeXY());
        frenteEsquerda(intensidadeX);
      } else {
        amarino.send("frente");
        frenteDireita(intensidadeX);
        frenteEsquerda(intensidadeX);
      }
    } else if(eixos[X] < -MIN) {
      amarino.send("tras");
      trasDireita(intensidadeX);
      trasEsquerda(intensidadeX);
    } else if (eixos[Y] < -MIN) {
      amarino.send("esquerda");
      frenteDireita(0);
      frenteEsquerda(intensidadeY);
    } else if(eixos[Y] >= MIN) {
      amarino.send("direita");
      frenteDireita(intensidadeY);
      frenteEsquerda(0);
    } else {
      parar();
    }
  }
}

int intensidade(int eixo) {
  int intensidade = map(abs(eixos[eixo]), MIN, MAX, PWM_MIN, PWM_MAX);
  if(intensidade > PWM_MAX) {
    intensidade = PWM_MAX;
  } else if(intensidade < PWM_MIN) {
    intensidade = 0;
  }
  return intensidade;
}

int intensidadeXY() {
  int intensidadeXY = intensidade(X) - intensidade(Y);
  if(intensidadeXY < 0) {
    intensidadeXY = 0;
  }
  return intensidadeXY;
}

void frenteEsquerda(int intensidade) {
  analogWrite(E_PWM, intensidade);
  digitalWrite(E_FRENTE, HIGH);
  digitalWrite(E_TRAS, LOW);
}

void frenteDireita(int intensidade) {
  analogWrite(D_PWM, intensidade);
  digitalWrite(D_FRENTE, HIGH);
  digitalWrite(D_TRAS, LOW);
}

void trasEsquerda(int intensidade) {
  analogWrite(E_PWM, intensidade);
  digitalWrite(E_FRENTE, LOW);
  digitalWrite(E_TRAS, HIGH);
}

void trasDireita(int intensidade) {
  analogWrite(D_PWM, intensidade);
  digitalWrite(D_FRENTE, LOW);
  digitalWrite(D_TRAS, HIGH);
}

void parar() {
  digitalWrite(E_PWM, LOW);
  digitalWrite(D_PWM, LOW);
}

/*
*/
void acelerometro(byte flag, byte numOfValues)
{
  timestampUltimaLeitura = millis();
 
  int length = amarino.stringLength();
  char data[length];
  amarino.getString(data);
  String leitura = data;

  //Separa a string recebida do Amarino em 3 strings
  //Ex: 1.42342;-3.43242;-1.34232
  int offset = 0;
  int count = 0;
  for(int i = 0; i < length; i++) {
    //Toda vez que encontrar um ';', le de 'offset' atÈ 'i'
    if(data[i] == ';') {
      eixos[count] = stringToFloat(leitura.substring(offset, i));
      offset = i + 1;
      count++;
     
      //Se o ?ltimo ';' na string tiver o mesmo Ìndice de 'i', ent„o pega
      //o restante da string no prÛximo elemento do array.
      if(leitura.lastIndexOf(';') == i) {
        eixos[count] = stringToFloat(leitura.substring(offset, length));
      }
    }
  }
 
// amarino.send("x");
// amarino.send(eixos[X]);
// amarino.send("y");
// amarino.send(eixos[Y]);
// amarino.send("z");
// amarino.send(eixos[Z]);
}

/**
* Converts a String to a float
*/
float stringToFloat(String str) {
  char arr[str.length()];
  str.toCharArray(arr, sizeof(arr));
  return atof(arr);
}