Show Posts
Pages: [1] 2 3 ... 26
1  International / Portugues / Classificar Array. on: August 05, 2014, 06:52:36 pm
Preciso classificar o conteudo de um Array com 120 posicoes em ordem crescente.
Alguem, por favor poderia dar uma pista ?

Obrigado!
2  International / Portugues / Re: Ajuda de Arduino e GSM on: March 10, 2013, 02:24:44 pm
Eu uso este, funciona muito bem!

http://www.dfrobot.com/wiki/index.php/GPS/GPRS/GSM_Module_V2.0_%28SKU:TEL0051%29

 smiley-cool
3  International / Portugues / Re: Ajuda de Arduino e GSM on: March 10, 2013, 02:19:23 pm
Eu uso este, funciona muito bem!



Code:
// André M. Schimohigashi
// 18/06/2012
//
// This code will make the Arduino sending an SMS every time it finds a GPS coordinate.
// coordinates can be programmed to be searched at any given time.
 
// # Product name: GPS/GPRS/GSM Module V2.0
// # Product SKU : TEL0051
// # Version     : 0.1

// # Steps:
// #        1. Turn the S1 switch to the EN(right side)
// #        2. Upload the sketch to the Arduino board
// #        3. Turn the S1 switch to the communication mode(left side)
// #        4. Turn the S2 switch to the Arduino side(right side)
// #        5. Turn the S3 switch to the ON side(right side)


String number = "????????"; // number of cellphone

String tmp;
double utc, lat, lon, alt;
char la_d, lo_d;

bool dadosOk = false, enviado = false;
byte gsmDriverPin[3] = {3,4,5};


void setup()
{

}

void loop()
{
  Serial.end();
  InitGpsMode();
   while(!dadosOk)
   {
     enviado = false;
     //Serial.println("GPS");
     gpsfuncao();   
     delay(100);     
   }   
   if(dadosOk){
     Serial.end();
     InitGsmMode();
     while(!enviado)
     {
       dadosOk = false;
       //Serial.println("GSM");
        gsmfuncao();       
        delay(100);       
     }
   } 
}

void InitGpsMode(){
  //ShutDown the GSM.
  digitalWrite(5, HIGH);
  delay(500);
  digitalWrite(5, LOW);
  for(int i=0; i <= 7; i++){
    delay(1000); //wait 8 seconds to shutdown gsm connections
  }
  //Init the driver pins for GSM function
  for(int i = 0 ; i < 3; i++){
    pinMode(gsmDriverPin[i],OUTPUT);
  }
  Serial.begin(4800);
  digitalWrite(3,HIGH);//Disable the GSM mode
  digitalWrite(4,LOW);//Enable the GPS mode
}

void InitGsmMode(){
  //Init the driver pins for GSM function
  for(int i = 0 ; i < 3; i++){
    pinMode(gsmDriverPin[i],OUTPUT);
  }
  Serial.begin(115200); 
  digitalWrite(3,LOW);//Enable the GSM mode
  digitalWrite(4,HIGH);//Disable the GPS mode
  //Output GSM Timing
  digitalWrite(5,HIGH);
  delay(1500);
  digitalWrite(5,LOW); 
  for(int i=0; i <= 7; i++){
    delay(1000);
  }
}

void gsmfuncao()
{
  Serial.println("AT");
  for(int i=0; i <= 5; i++){
    delay(1000);   
  }
  Serial.println("AT+CMGF=1");
  for(int i=0; i <= 5; i++){
    delay(1000);   
  }
  Serial.println("AT+CMGS=\"" + number + "\"");
  for(int i=0; i <= 5; i++){
    delay(1000);   
  } 
  Serial.print("UTC:");
  Serial.println(utc, 0);
  Serial.print("Lat:");
  Serial.println(lat, 4);
  Serial.print("Lon:");
  Serial.println(lon, 4);
  Serial.print("Lon_D:");
  Serial.println(lo_d);
  Serial.print("Lat_D:");
  Serial.println(la_d);
  Serial.print("Alt:");
  Serial.println(alt, 2);
  delay(1000);
  Serial.println((char)26);
  delay(1000); 
 
  Serial.println();
  enviado = true;   
}

void gpsfuncao()

  utc = UTC(); 
  lat = latitude(); 
  la_d = lat_dir(); 
  lon = longitude(); 
  lo_d = lon_dir(); 
  alt = altitude(); 
  dadosOk = true;
}

double Datatransfer(char *data_buf,char num)//convert the data to the float type
{                                           //*data_buf:the data array                                         //the number of the right of a decimal point
  double temp=0.0;
  unsigned char i,j;

  if(data_buf[0]=='-')//
  {
    i=1;
    //process the data array
    while(data_buf[i]!='.')
      temp=temp*10+(data_buf[i++]-0x30);
    for(j=0;j<num;j++)
      temp=temp*10+(data_buf[++i]-0x30);
    //convert the int type to the float type
    for(j=0;j<num;j++)
      temp=temp/10;
    //convert to the negative number
    temp=0-temp;
  }
  else//for the positive number
  {
    i=0;
    while(data_buf[i]!='.')
      temp=temp*10+(data_buf[i++]-0x30);
    for(j=0;j<num;j++)
      temp=temp*10+(data_buf[++i]-0x30);
    for(j=0;j<num;j++)
      temp=temp/10 ;
  }
  return temp;
}

char ID()//Match the ID commands
{
  char i=0;
  char value[6]={
    '$','G','P','G','G','A'    };//match the gps protocol
  char val[6]={
    '0','0','0','0','0','0'    };

  while(1)
  {
    if(Serial.available())
    {
      val[i] = Serial.read();//get the data from the serial interface
      if(val[i]==value[i])   //Match the protocol
      {   
        i++;
        if(i==6)
        {
          i=0;
          return 1;//break out after get the command
        }
      }
      else
        i=0;
    }
  }
}

void comma(char num)//get ','
{   
  char val;
  char count=0;//count the number of ','

  while(1)
  {
    if(Serial.available())
    {
      val = Serial.read();
      if(val==',')
        count++;
    }
    if(count==num)//if the command is right, run return
      return;
  }
}

double UTC()//get the UTC data -- the time
{
  char i;
  char time[9]={
    '0','0','0','0','0','0','0','0','0'
  };
  double t=0.0;
  String te;
  if(ID())//check ID
  {
    comma(1);//remove 1 ','
    //get the datas after headers
    while(1)
    {
      if(Serial.available())
      {
        time[i] = Serial.read();
        i++;
      }
      if(i==9)
      {
        i=0;
        t=Datatransfer(time,2);//convert data       
        if(t > 0 && t < 30000){
          t = t + 240000;
        }
        t=t-30000.00;//convert GMT-3 Time zone
        //Serial.println(t);//Print data
        return t;
      } 
    }
  }
}
double latitude()//get latitude
{
  double lt;
  char i;
  char lat[10]={
    '0','0','0','0','0','0','0','0','0','0'
  };

  if( ID())
  {
    comma(2);
    while(1)
    {
      if(Serial.available())
      {
        lat[i] = Serial.read();
        i++;
      }
      if(i==10)
      {
        i=0;
        lt = Datatransfer(lat,4);//print latitude
        return lt;
      } 
    }
  }
}
char lat_dir()//get dimensions
{
  char i=0,val;

  if( ID())
  {
    comma(3);
    while(1)
    {
      if(Serial.available())
      {
        val = Serial.read();
        //Serial.println(val);//print dimensions
        i++;
        return val;
      }
      if(i==1)
      {
        i=0;
        return val;
      } 
    }
  }
}
double longitude()//get longitude
{
  double ln;
  char i;
  char lon[11]={
    '0','0','0','0','0','0','0','0','0','0','0'
  };

  if(ID())
  {
    comma(4);
    while(1)
    {
      if(Serial.available())
      {
        lon[i] = Serial.read();
        i++;
      }
      if(i==11)
      {
        i=0;
        ln = Datatransfer(lon,4);//print longitude
        return ln;
      } 
    }
  }
}

char lon_dir()//
{
  char i=0,val;

  if(ID())
  {
    comma(5);
    while(1)
    {
      if(Serial.available())
      {
        val = Serial.read();
        //Serial.println(val);
        i++;
        return val;
      }
      if(i==1)
      {
        i=0;
        return val;
      }
    }
  }
}

double altitude()//get altitude data
{
  char i,flag=0;
  double at;
  char alt[8]={
    '0','0','0','0','0','0','0','0'
  };

  if( ID())
  {
    comma(9);
    while(1)
    {
      if(Serial.available())
      {
        alt[i] = Serial.read();
        if(alt[i]==',')
          flag=1;
        else
          i++;
      }
      if(flag)
      {
        i=0;
        at = Datatransfer(alt,1);//print altitude data
        return at;
      } 
    }
  }
}
4  International / Portugues / Re: BANCO DE DADOS sd card! on: March 10, 2013, 02:04:58 pm
ok... imaginemos 700 ms.

500 * 700ms = 350 segundos...
350/60 ~= 6 minutos.
Achas que 3 minutos é aceitável para o sítio onde isto vai ser implementado?

Testaste com vários ficheiros?
Eu diria que a prova de fogo para esta aplicacão seria fazeres um programinha simples para pesquisar e fazer as operacões que normalmente fará em todos os ficheiros do cartão (os tais 500) e guardar os tempos para cada um deles.
Isto pode ser um pouco problemático em termos de memória talvez, então talvez consigas fazer uma média para garantir que o tempo médio de acesso seria mais ou menos 1 segundo.


Nao entendi esta sua conta, mas tudo bem.

Sim fiz um programa pra fazer buscas no diretorio do cartao em 600 files , procurar, abrir, escrever e fechar e o tempo medio pa qualquer acesso foi em torno de quase um segundo. smiley-grin
E é pra acesso mesmo a aplicação, não pode falhar,  smiley-lol



 smiley-cool
5  International / Portugues / Re: BANCO DE DADOS sd card! on: March 09, 2013, 01:03:10 pm
100 diretório com 5 arquivos em cada diretório= 500 arquivos
110 arquivos no diretório raiz
total 610 arquivos

tempo médio para pesquisar um file, abrir, gravar um dado e fechar = +- 1 segundo

Isto mostrando o inicio da operação e  fim, na porta serial (DEBUG), isto será inibido pois não preciso desta informação aí o tempo será menor.
 smiley-cool
6  International / Portugues / Re: BANCO DE DADOS sd card! on: March 09, 2013, 12:59:52 pm
Putz estou quase desistindo do MALDITO SD Card, funcionou por apenas meia duzias de vezes, nao consigo mais ler o conteúdo do cartao.
eu já tinha testado esta lib SD.h a uns anos atrás e funcionava bem.
Já testei em 5 placas diferentes de Arduino, o card funciona direto no computador, portanto nao é nele o problema
retirei o shield e montei direto no protoboard, mesmo assim nao consegue inicializar o cartao! smiley-mad

Pronto, voltou a funcionar, a bagaça!

100 diretório com 5 arquivos em cada diretório= 500 arquivos
110 arquivos no diretório raiz
total 610 arquivos

tempo médio para pesquisar um file, abrir, gravar um dado e fechar = +- 1 segundo

Tá bom não Bubulindo?

 smiley-roll
7  International / Portugues / Re: BANCO DE DADOS sd card! on: March 09, 2013, 09:41:01 am
O que eu referia era ficheiros em vez de directórios.
O problema em usar apenas os últimos 5 digitos ´€ que podes ter vários (imensos...) cartões com os mesmos últimos digitos. :\
Se calhar terás de ter uma funcão que ao registar um cartão novo veja se esse número já existe. :\

OK!

Putz estou quase desistindo do MALDITO SD Card, funcionou por apenas meia duzias de vezes, nao consigo mais ler o conteúdo do cartao.
eu já tinha testado esta lib SD.h a uns anos atrás e funcionava bem.
Já testei em 5 placas diferentes de Arduino, o card funciona direto no computador, portanto nao é nele o problema
retirei o shield e montei direto no protoboard, mesmo assim nao consegue inicializar o cartao! smiley-mad
8  International / Portugues / Re: BANCO DE DADOS sd card! on: March 07, 2013, 06:06:02 pm
Hmmm, um ou dois segundos... 500 cartões...

Como disse, o código da RFID quantos caracteres tem?

Existe a possibilidade das RFID serem programadas para um numero série em especifico? Isso reduziria a complexidade do projecto para um nível incrívelmente simples uma vez que apenas terias de verificar se os digitos superiores conformavam com o que tinhas definido e ver se existia um registo com o numero dos restantes digitos.

os que tenho já são definidos pelo fabricante e tem um formato assim e não são sequencia
0000145934 002,14862

a ideia seria usar apenas os ultimos 5 ou seja (14862)

estou fazendo testes com o tempo de pesquisa, vou criar uns 100 diretorios e mandar pesquisar por um deles.
o tamanho máximo do nome dos diretório é 8 digitos (string), eu acho que vai "dar" bem legal !

 smiley

9  International / Portugues / Re: BANCO DE DADOS sd card! on: March 07, 2013, 04:34:48 pm
A SD.h, na realidade implementa um sistema FAT...

Uma maneira que talvez seja "rápida" (é algo a testar) seria criar um ficheiro para cada cartão em que o nome do ficheiro seria o código RFID... o problema aí será talvez que a biblioteca SDFat apenas aceita nomes com 8 bytes...


Hummm, interessante, gostei desta ideia!
O ficheiro seria o número do cartão e os arquivos dentro dos ficheiros seriam os nomes das variaveis e o conteúdo dos arquivos seriam o conteúdo das variaveis, aí fica facil pra incluir ou excluir variaveis, basta apagar arquivos, muito bom; só tem que testar o acesso se seria rápido tipo pra 500 rfid, se perder um ou dois segundos pra mim está ótimo!

Obrigado pela luz no fim do túnel, quando terminar posto aqui o resultado!

 smiley-wink

10  International / Portugues / Re: BANCO DE DADOS sd card! on: March 06, 2013, 07:33:38 pm
Tipo SQL?
Mas queres algo funcional? Ou apenas prova de conceito?

Sim, funcional!

 smiley-roll

Obrigado!
11  International / Portugues / Re: BANCO DE DADOS sd card! on: March 06, 2013, 07:30:23 pm
Opzzz, obrigado pelo interesse!

Preciso ler um cartao RFID e associar ao número deste cartão, algumas variaveis; algumas númericas outras strings e talvez lógicas
pensei em usar um array, mas deveria ser um array multidimensional e como são muitos cartões, 500 ou mais, talvez uma eeprom externa, uma flash memory, sei lá!
As vezes após a leitura do rfid apenas devo ler o conteúdo referente ao cartão, outras vez preciso alterar uma ou mais variaveis!

Olhei "rapidamente" a SD.h parece ser prática, não testei nada ainda!

Alguma ideia?

 smiley-roll
12  International / Portugues / BANCO DE DADOS sd card! on: March 06, 2013, 05:32:54 pm
To querendo fazer um banco de dados em arquivo texto num sd card,

Alguém ja fez um?
Alguém teria um exemplo?

Ideias são bem-vindas!

Obrigado!

 smiley-eek
13  International / Portugues / Re: Automação Residencial on: February 28, 2013, 05:10:40 pm
Quais módulos x10 você usa? Tenho lido alguns tópicos e começo a ficar interessado em brincar com isso ^^


http://www.automatizacaoresidencial.com.br/produto/369085/CONTROLE_REMOTO_X10_DE_BOLSO.html
http://www.automatizacaoresidencial.com.br/produto/369084/CONTROLE_REMOTO_X10.html
http://www.automatizacaoresidencial.com.br/produtos-index/categorias/173866/lmpadas.html (02 pares destes)
http://www.automatizacaoresidencial.com.br/produto/369080/TRANSCEPTOR__RF_2_WAY.html (01 deste)
http://produto.mercadolivre.com.br/MLB-465013270-x10-lm15a-soquete-lampada-automaco-residencial-_JM (06 deste)

http://www.automatizacaoresidencial.com.br/produto/369072/MODULO_USB_PC.html (ESTOU NAMORANDO UM DESTE)
14  International / Portugues / Re: Automação Residencial on: February 28, 2013, 06:31:23 am
Não é ser partidário... é a solucão óbvia para quem quer automatizar algumas coisas dentro de casa.

Na minha opinião, o motivo pelo qual os entusiastas do Arduino acham que os módulos são caros é por verem que um Arduino (clone) custa cerca de um terco dum módulo X10 e julgarem que adaptar o Arduino para a funcão do módulo X10 se faz por outro terco do preco. Se é possível, sim... mas não é testado para os níveis de qualidade dos módulos X10 e teria de ser feito em quantidades bem maiores do que alguém usaria numa casa para justificar o preco. E mesmo assim ainda teria de adaptar a instalacão da casa já que não conseguiria meter os módulos dentro de caixas de derivacão normais.

O X10 resolve isso tudo e ainda permite a ligacão com um módulo central de controlo de toda a rede. Tenho um amigo meu com uma casa automatizada com X10 que tem um computador com uma folha Excel e um software freeware a gerir a activacão dos módulos.

Eu próprio estou a pensar fazer algo semelhante (provavelmente com um Arduino) para automatizar certas tomadas da casa (a tomada com a televisão e carregadores, por exemplo) e luzes... Eventualmente aquecimento... mas ainda tenho de esperar um pouco por isso.


É isto, tambem tenho a iluminação e algumas tomadas com x10, funcionam muito bem!
O maior problema é o custo dos módulos, ainda !

15  International / Portugues / Re: Automação Residencial on: February 27, 2013, 06:10:12 pm
Procura por dispositivos X10 que usam a corrente eléctrica para ligar/desligar lâmpadas e tomadas.

Muito bem Bubulindo, mais um partidário do X10!
 smiley-cool
Pages: [1] 2 3 ... 26