collapse

* Posts Recentes

O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


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


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]


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

Autor Tópico: ["Comprado"] Ajuda em C++ (Arduino) +/-20 Linhas de código!  (Lida 4989 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.372
    • 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.768
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.