Pessoal, to com um problema que acredito que seja simples de se resolver, porém não me vem nada em mente.

Tenho várias funções feitas em um programa que irá se comunicar via serial, e eu gostaria que esse programa fizesse algo assim:

1 - Ligo o Arduino -> (nenhuma função executando)

2 - Digito 'a' -> (função A executa repetidamente)

3 - Caso eu digite outro caractere, por exemplo 'r' -> (função A pára, e função R passa à ser executada repetidamente)

Não sei se deu pra entender, mas é tipo verificar o tempo todo qual caractere foi digitado, e de acordo com o caractere, é trocada a função dentro do loop.

Se alguém tiver alguma idéia eu agradeço desde já.

Obrigado!

Exibições: 1362

As respostas para este tópico estão encerradas.

Respostas a este tópico

Crie algo mais ou menos assim:

int letra; // Variável que lera o SERIAL.

void setup(){

Serial.begin(9600); //Inicia comunicação serial

}

void loop(){

letra = Serial.read(); // letra será sempre o que for digitado na Serial.

if(letra == A){ executa comandos}

if(letra == B){executa comandos}

e por ai vai, existem outros modos de checar as entradas seriais e variáveis, mas, dependendo do seu projeto, esse jeito vai te ajudar.

Abraço!



Boa tarde Pedro, essa foi a minha primeira opção, porém nesse caso ele executa os coomandos dentro dos if's apenas uma vez, e fica aguardando novo caractere.

Estou tentando fazer com que cada comando dentro dos if's fique repetindo até um novo caractere ser enviado.

Tem alguma idéia?

if(Serial.avaliable()) 

letra = Serial.read(); // letra será sempre o que for digitado na Serial.

int opcao=0;

void setup()

{

  Serial.begin(9600);

}

void loop()

{

  if(Serial.available())

     {

        char  letra=Serial.read();

        if(letra=='a')

           {

              opcao=1;

           }

        if(letra=='b')

          {

            opcao=2;

          }

     }

   if(opcao==1){executa}

   if(opcao==2){executa}

}

Deve funcionar...

Dentro do IF crie um while, por exemplo:
WHILE(letra == x){comandos}

Isso vai prender o estado até que mude a letra do Serial!

MAs se criar um while dentro do if o programa fica preso dentro deste laço, a não ser que vc crie uma rotina para ficar lendo o estado sa Serial dentro do loço while em que o programa esta preso, o programa ficara preso eternamente.por isso optei em usar o comando if, acho que fica mais claro o progra,a

Thiago

    A melhor opção é utilizar as interrupções disponíveis no arduino.

   Pois através destas é possível fazer o quê você quer sem a necessidade de ficar verificando a serial repetidamente. Quando ocorrer alguma interrupção na serial que é o quê você deseja, o que esta sendo executado é parado e é desviado para um seção do seu programa que irá tratar esta interrupção, podendo assim fazer qualquer coisa que você queira!

    No Site do Arduino na guia referência têm algum material sobre interrupções e serial http://arduino.cc/en/Reference/

Obrigado pelas dicas pessoal!
Vou seguir o conselho do Celso e pesquisar um pouco mais sobre interrupções e fazer alguns testes.

Obrigado!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço