collapse

* Posts Recentes

Cerca eléctrica por SerraCabo
[14 de Junho de 2025, 23:26]


Alguém arranja motores? por almamater
[10 de Junho de 2025, 22:34]


Condensador 4.7uF 0603 por brunus
[09 de Junho de 2025, 15:52]


+ LASERs por dropes
[30 de Maio de 2025, 23:11]


Lenovo IdeaPad 3 Não liga por jm_araujo
[07 de Maio de 2025, 19:10]


Identificar Diodo Zenner por filjoa
[01 de Maio de 2025, 23:07]


Meu novo robô por dropes
[18 de Março de 2025, 14:51]


JBL partybox On-The-Go por almamater
[21 de Fevereiro de 2025, 23:32]


Talking Reverse Engineering with an Absolute Legend! por SerraCabo
[13 de Fevereiro de 2025, 09:56]


Motoserra Stihl 120C por brunus
[11 de Fevereiro de 2025, 16:29]

Autor Tópico: ["Comprado"] Ajuda em C++ (Arduino) +/-20 Linhas de código!  (Lida 9105 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.378
    • 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: 798
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: 280
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.771
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... ;)

Cumprimentos,
André Carvalho.

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.