collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


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


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


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]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


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

Autor Tópico: Problema com conversão de variáveis  (Lida 3464 vezes)

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

Offline Junior Frota

  • Mini Robot
  • *
  • Mensagens: 39
Problema com conversão de variáveis
« em: 04 de Setembro de 2013, 01:21 »
Olá amigos, depois de algum tempo sem participar deste fórum, estou precisando da ajuda de vocês.

Estou trabalhando em um projeto para a feira de ciências da minha escola e este visa a construção de um protótipo de estacionamento automatizado.

O projeto ainda está em faze de teste, estou implementando o código no arduino aos poucos, procurando entender bem cada parte do mesmo.

Venho hoje pedir ajuda na questão de conversão de unidades.

Vou tentar relatar mais ou menos como é o programa de teste. Pois bem, o mesmo consiste no seguinte:

o programa deve imprimir na janela do Serial Monitor uma frase de boas vindas, em seguida imprimir o menu de opções, sendo '1' para guardar o carro e '2' para retirar o carro. o programa deve esperar que o usuário digite a opção via teclado do PC, então usa o comando Switch Case pra verificar a opção escolhida. Caso a opção escolhida seja '1', o programa executará a função guardarCarro() e irá gerar uma senha para que, quando o usuário for retirar o carro, o programa possa identificar qual carro está relacionado com aquela senha, evitando de retirar o carro errado. Ao escolher a opção '2', o programa executará a função retirarCarro(), onde será pedido para que o usuário entre com a senha gerada no ato de guardar o carro. se a senha confere com a gerada anteriormente, o programa conclui a retirada do carro, caso contrário, o programa pede que o usuário entre com a senha correta. Pois bem, como eu estou testando o código por partes, no momento, o que me interessa é poder ler uma senha via Serial Monitor e comparar essa senha com uma gerada aleatoriamente. Eu até consegui fazer essa comparação quando eu estipulo uma senha e peço a verificação, mas eu não sei como gerar senhas do tipo char com a função random(), na verdade, eu nem sei se isso é possível. Caso não seja possível, é preciso converter as variáveis para um único tipo a fim de poderem ser comparadas. Eu consigo gerar a senha com o tipo inteiro, mas não consigo transformar os caracteres lidos pelo Serial.read() em inteiros. Outro problema encontrado é que, quando eu coloco pra rodar o programa no arduino, na janela do Serial Monitor fica imprimindo indefinidamente um monte de coisas, ou seja, o programa não tá parando para que se possa entrar com as opções, e eu não faço ideia de como se faz isso no arduino, se fosse um programa desenvolvido em uma linguagem que permitisse a inclusão de frams, botões, etc. seria facinho fazer isso, mas com o arduino, eu não sei como se faz.

Se alguém poder me ajudar, eu ficarei muito grado.

Segue abaixo o códio do programa:

int senha[6];
char comp[6];
char opcao;

void setup(){
  Serial.begin(9600);
  Serial.flush();
  randomSeed(analogRead(0));
}

void loop(){
  telaInicial();
  if (Serial.available() > 0){
    opcao = Serial.read();
    switch (opcao) {
      case '1':
      guardarCarro();
      break;

      case '2':
      retirarCarro();
      break;
     
      default:
      Serial.println("Opção inválida!");
      Serial.println();
      Serial.println();
    }
  }
}

void telaInicial(){
  Serial.println("Seja bem vindo!");
  Serial.println();
  Serial.println();
  Serial.println("Escolha uma opcao");
  Serial.println();
  Serial.println("1 - Guardar o carro...");
  Serial.println("2 - Retirar o carro...");
  Serial.println();
  Serial.println();
}

void guardarCarro(){
  Serial.println("Aguarde enquanto guardamos o seu carro!");
  Serial.println();
  delay(5000);
  Serial.println("Seu carro está seguro...");
  Serial.println();
  Serial.print("Sua senha é: ");
  for (int i = 0; i < 6; i++){
    senha = random(10);
    Serial.print(senha);
  }
  Serial.println();
  Serial.println();
  delay(2000);
}

void retirarCarro(){
  for (int i = 0; i < 6; i++){
    comp = Serial.read();
  }
  if ((comp[0] == senha[0]) && (comp[1] == senha[1]) && (comp[2] == senha[2]) &&
      (comp[3] == senha[3]) && (comp[4] == senha[4]) && (comp[5] == senha[5])){
    Serial.println("A senha está correta!");
    Serial.println();
    Serial.println("Aguarde enquanto trazemos o seu carro!");
    Serial.println();
    delay(5000);
    Serial.println("Agora é possível retirar o seu carro!");
    Serial.println();
    Serial.println();
    delay(2000);
    for (int i = 0; i < 6; i++){
      senha = 0;
      comp = 0;
    }
  }
}
"Nossa maior fraqueza está em desistir. A forma mais certa de vencer, é tentar mais uma vez" (Thomas Edson)

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Problema com conversão de variáveis
« Responder #1 em: 04 de Setembro de 2013, 01:32 »
Se eu percebi bem, o problema está em converter uma array de chars para um int?
Usando a função "atoi" fazes isso.

Offline samc

  • Mini Robot
  • *
  • Mensagens: 442
Re: Problema com conversão de variáveis
« Responder #2 em: 04 de Setembro de 2013, 02:47 »
Aconselho a usar a biblioteca SerialCommand.h, simplifica-te muito a vida em usar os comandos (faz a separação de argumentos e tudo).

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Problema com conversão de variáveis
« Responder #3 em: 04 de Setembro de 2013, 02:56 »
Em relação a ele não parar de escrever, o problema é que ele nunca para quando não há nada para ler, quando fazes
 if (Serial.available() > 0)
ele não fica à espera que cheguem coisas, simplesmente segue em frente e neste caso volta ao início do loop.

Offline Junior Frota

  • Mini Robot
  • *
  • Mensagens: 39
Re: Problema com conversão de variáveis
« Responder #4 em: 05 de Setembro de 2013, 20:15 »
Certo! Obrigado aos que responderam ao meu apelo.

Vou estudar o funcionamento da biblioteca SerialCommand.h que o Samc sugeriu e vou ver no que dá. Assim que possível eu coloco os resultados obtidos aqui.

Um abraço a todos e mais uma vez obrigado!
"Nossa maior fraqueza está em desistir. A forma mais certa de vencer, é tentar mais uma vez" (Thomas Edson)