collapse

* Links de Robótica

* Posts Recentes

Ajuda Projecto IR / RF por Njay
[Hoje às 00:03]


Recomendação de um opamp para um DAC r2r por jm_araujo
[Ontem às 23:05]


Ideias para construir um quadrúpede simples por dropes
[Ontem às 22:43]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]


Amplificador audio por beirao
[12 de Novembro de 2017, 23:43]


Power_OK Enermax por edeweld
[12 de Novembro de 2017, 17:15]


Driver motor por beirao
[11 de Novembro de 2017, 17:40]

Autor Tópico: ["Comprado"] Ajuda em C++ (Arduino) +/-20 Linhas de código!  (Lida 2887 vezes)

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

Offline tgferreira

  • Mini Robot
  • *
  • Mensagens: 148
Boas,

Compro a ajuda de alguém que me ensine a fazer mais ou menos 20 linhas de código.

O código é para receber uma string de 4 caracteres com a possibilidade de ter um caracter inicial/final, e comparar essa string com código já pré-definido.

Explico melhor a quem estiver interessado!

Contactem-me preferencialmente por e-mail: tg@tgferreira.com
Podem sempre usar PM.

URGENTE!!!


Cumprimentos,
Tiago Ferreira.
« Última modificação: 05 de Maio de 2012, 19:44 por tgferreira »

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.235
    • Tiago Rodrigues
Re: [Compro] Ajuda em C++ (Arduino) +/-20 Linhas de código!
« Responder #1 em: 05 de Maio de 2012, 14:57 »
Por estas bandas deves de ter mais sucesso a pedir ajuda do que a comprar.

Offline GnGz

  • Mini Robot
  • *
  • Mensagens: 665
Re: [Compro] Ajuda em C++ (Arduino) +/-20 Linhas de código!
« Responder #2 em: 05 de Maio de 2012, 15:12 »
E que tal explicar já no tópico, e concordo com o tigpt : tens mais sucesso em pedir ajuda do que comprar.

Offline tgferreira

  • Mini Robot
  • *
  • Mensagens: 148
Re: [Compro] Ajuda em C++ (Arduino) +/-20 Linhas de código!
« Responder #3 em: 05 de Maio de 2012, 15:29 »
Boas,

Sim, têm razão. Aqui sou capaz de ter bem mais sorte a pedir. No entanto, caso alguém ache que deve ser remunerado por me ensinar (e como o desespero já é muito) não me importo de o aceitar.

Então vou expor a situação:

Eu tenho um Arduino que vai estar ligado a um router, e programado para:
Recebe "a", faz x, recebe "b", faz y. No entanto, e como eu vou estar a receber strings de informação vindas do router que não me interessam vou ter que alterar o código. Isto é: recebes "aaaa", fazes x, recebes "bbbb", fazes y. E é aqui que começa o meu problema...

Tenho um tópico no fórum Arduino onde provavelmente até já me responderam, mas pela minha falta de conhecimentos em programação ainda não percebi.

Tópico: http://arduino.cc/forum/index.php/topic,104306.0.html

Eles lá sugeriram usar caracteres de início de envio de packet e de fim, e até puseram código. Mas nesse código, onde exactamente é que ponho os comandos a executar? E como comparo as strings?

Alguém me pode ensinar a fazer? (preciso mesmo de entender uma vez que isto é para extender a coisas mais complexas (controlo total de robot)).

Muito obrigado desde já,

Tiago Ferreira.

Offline msr

  • Mini Robot
  • *
  • Mensagens: 795
Re: [Compro] Ajuda em C++ (Arduino) +/-20 Linhas de código!
« Responder #4 em: 05 de Maio de 2012, 16:01 »
Se compreendi bem a tua situação, o teu problema está na sincronização dos dados. Isto é, o Arduino tem que saber quando/onde começa a mensagem.

Existem várias maneiras de fazer isso, uma delas, e simples, é adicionares uma sequência de bytes no inicio, por exemplo, "0x00 0xFF" (hexadecimal) que indiquem "início de mensagem", e no Arduino detectas essa sequência. No resto da mensagem tens que garantir que não se repete essa sequência.

Ficas com algo deste género:

<0x00> <0xFF> <data0> <data1> <data2> ... etc

No caso concreto que referes, e tendo em conta que '0' e '1' em hexadecimal são 0x30 e 031 respectivamente (vê uma tabela ASCII), as mensagens a enviar teriam este aspecto:
0x00 0xFF 0x30
0x00 0xFF 0x31

No Arduino terás algo deste género (é só um esboço):
Código: [Seleccione]
// inicializar lastbyte com um valor != 0
// int lastbyte = 0xFF;

byte = serial.read();
if(lastbyte == 0x00 && byte == 0xFF)
{
  comando = serial.read();
  switch(comando)
  {
  case '0':
     // desliga led
     break;
  case '1':
     // liga led
     break;
  default: ;
  }
}
lastbyte = byte;
« Última modificação: 05 de Maio de 2012, 16:03 por msr »

Offline tgferreira

  • Mini Robot
  • *
  • Mensagens: 148
Re: [Compro] Ajuda em C++ (Arduino) +/-20 Linhas de código!
« Responder #5 em: 05 de Maio de 2012, 19:43 »
Boas a todos!

Acabei por conseguir, graças à ajuda de dois amigos! Deixo aqui o código para verem e sugerirem alterações, ou para quem necessitar!

Código: [Seleccione]
#define SOP '<'
#define EOP '>'

bool started = false;
bool ended = false;

char inData[80];
byte index;

void setup()
{
   Serial.begin(57600);
   pinMode(13, OUTPUT);
   // Other stuff...
}

void loop()
{
  // Read all serial data available, as fast as possible
  while(Serial.available() > 0)
  {
    char inChar = Serial.read();
    if(inChar == SOP)
    {
       index = 0;
       inData[index] = '\0';
       started = true;
       ended = false;
    }
    else if(inChar == EOP)
    {
       ended = true;
       break;
    }
    else
    {
      if(index < 79)
      {
        inData[index] = inChar;
        index++;
        inData[index] = '\0';
      }
    }
  }




  if(started && ended)
  {
 

    if (strcmp(inData, "AAAA") == 0){
      digitalWrite(13, HIGH);    //x
    }
    else if (strcmp(inData, "BBBB") == 0){
      digitalWrite(13, LOW);
      //y
    }


    // Reset for the next packet
    started = false;
    ended = false;
    index = 0;
    inData[index] = '\0';
  }
}

MSR: Sim, era isso a que me referia, mas também à minha incompreensão do código! No entanto, muito obrigado pela tua participação!

Cumprimentos,
Tiago Ferreira.

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 277
Re: ["Comprado"] Ajuda em C++ (Arduino) +/-20 Linhas de código!
« Responder #6 em: 06 de Maio de 2012, 13:51 »
Tg, afinal o problema residia mais ou menos naquilo que eu pensei desde o inicio. Apesar de nao ter conhecimento suficiente para te ter ajudado. Mas aprendi bastante com a questao, para uma proxima vez, sem duvida.
Eu ja tinha nocao do problema de perifericos que nao computadores tem em manter uma comunicacao solida sem perca de data atraves da porta serie. Dai solucoes como clear to send e request to send, handshakes, etc.,
 Mas interessei-me porque sei que vou precisar de o fazer mais tarde tb com o arduino !!
Ja agora mantem-nos informados do resto do  projecto !!
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline zordlyon

  • Mini Robot
  • *
  • Mensagens: 1.708
Re: ["Comprado"] Ajuda em C++ (Arduino) +/-20 Linhas de código!
« Responder #7 em: 06 de Maio de 2012, 19:43 »
fico contente por teres conseguido Tiago... ;)


Offline tgferreira

  • Mini Robot
  • *
  • Mensagens: 148
Re: ["Comprado"] Ajuda em C++ (Arduino) +/-20 Linhas de código!
« Responder #8 em: 06 de Maio de 2012, 22:43 »
Boas a todos!

Obrigado Zordlyon!

E Iyahdub, a continuação deste projecto encontra-se no "tópico oficial" :P

http://lusorobotica.com/index.php?topic=4039.0


Vou postar lá um update ainda hoje, com fotos.

Cumprimentos,

Tiago Ferreira.