Go Down

Topic: execultar um tarefa so mente uma vez (Read 221 times) previous topic - next topic

vagner

Boa noite amigos!!! Amigo gostaria que o arduino rota-se um protocolo somente um vez após ser ligado, ou seja que não fica-se rodando junto com o loop... Se puderem me ajudar. Desde agora muito obrigado!!!

luisilva

Coloque o código na função setup() e deixe o loop() vazio.

WeiderAju

Olá vagner,

    A forma mais simples é como nosso amigo luisilva falou,  ou seja, você coloca todo o codigo dentro do setup, e ai ele só é executado uma vez.

   Uma segunda forma é colocar dentro do void loop mesmo, porem, com uma condicional ,  tipo..  if(vez=1)...  isso lhe dará a liberdade de saber se realmente deseja rodar apenas uma vez,  ou se desejar outras é só acrescentar valor ao conter.

vagner

Tentarei hoje mesmo... eu acho que colocar no setup não vai adiantar por que o programa tem outras funcões que vão precisar ficar rodando no loop. eu já tentei colocar um parte no setup e outro no loop e não deu certo. A funcão no setup não rodou. mais quando eu coloco no loop fica rodado toda hora sem parar. Obrigado amigos!!!!

Voce tem que criar uma Funcao e chama la a qualquer momento no programa.
veja o link     
http://arduino.cc/en/Reference/FunctionDeclaration.

luisilva

Tentarei hoje mesmo... eu acho que colocar no setup não vai adiantar por que o programa tem outras funcões que vão precisar ficar rodando no loop. eu já tentei colocar um parte no setup e outro no loop e não deu certo. A funcão no setup não rodou. mais quando eu coloco no loop fica rodado toda hora sem parar. Obrigado amigos!!!!
Ajudava imenso se colocasse aqui o código. Se colocar o código dentro do setup() ele só é executado uma vez. Se colocar o código dentro da função loop() esse código é executado ciclicamente ("loop"quer dizer ciclo em Inglês). Se diz que quando coloca o código dentro do loop() ele é executado mas quando coloca o código dentro do setup() ele não é executado, isso não tem nada a ver com o local onde o código está a ser executado mas deve ser um problema com o próprio código (por exemplo alguma variável que quando o setup() é chamado ainda não está definida, ou não tem o valor certo,etc.).

Se o programa tem uma parte que só deve ser executada uma vez e outra que deve ser executada várias vezes, isso quer dizer que deve colocar a 1ª parte dentro do setup() e a segunda dentro do loop().

Penso também que a ideia do WeiderAju é estupidez, até porque o que ele sugere irá sempre ser executado:
Uma segunda forma é colocar dentro do void loop mesmo, porem, com uma condicional ,  tipo..  if(vez=1)...  isso lhe dará a liberdade de saber se realmente deseja rodar apenas uma vez,  ou se desejar outras é só acrescentar valor ao conter.
Se em vez do que ele escreveu se fizer:
Code: [Select]
if (vez != 1) {
vez = 1;
// colocar aqui o código que quer executar penas uma vez
}

talvez funcione um pouco melhor.

Penso também que a ideia do WeiderAju é estupidez, até porque o que ele sugere irá sempre ser executado:
Se em vez do que ele escreveu se fizer:
Code: [Select]
if (vez != 1) {
vez = 1;
// colocar aqui o código que quer executar penas uma vez
}

talvez funcione um pouco melhor.
Eh pá, desculpa lá... mas não achas que é um bocado ridículo chamares estupidez ao outro post? Sim, estava bastante incompleto, mas nunca te esqueceu um =??? Leste sequer ao menos o que é sugerido em vez de olhares apenas para a linha de código?

Eu entendi o que ele queria dizer e faz sentido uma vez que ele não se ficou pelo conceito de "uma vez" e expandiu a ideia para ser possível controlar o número de vezes que certo código é corrido. Se eu que não meto os pés em Portugal vai para um ano entendi isto, certamente que alguém que vive aí entenderá melhor, ou não??
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

luisilva

#7
Feb 14, 2015, 12:47 pm Last Edit: Feb 14, 2015, 12:49 pm by luisilva
Eh pá, desculpa lá... mas não achas que é um bocado ridículo chamares estupidez ao outro post? Sim, estava bastante incompleto, mas nunca te esqueceu um =??? Leste sequer ao menos o que é sugerido em vez de olhares apenas para a linha de código?

Eu entendi o que ele queria dizer e faz sentido uma vez que ele não se ficou pelo conceito de "uma vez" e expandiu a ideia para ser possível controlar o número de vezes que certo código é corrido. Se eu que não meto os pés em Portugal vai para um ano entendi isto, certamente que alguém que vive aí entenderá melhor, ou não??
Pode ser exagerado (pessoalmente não acho, mas posso aceitar que alguém o considere assim), mas ridículo não. Se um utilizador faz uma pergunta que deixa transparecer que o seu nível de programação não é muito elevado, penso que o menos que se pode fazer é ter o cuidado de fornecer código que funcione, uma vez que ele, possivelmente, não vai ter capacidade de detectar e corrigir o erro. Mas a palavra "estupidez" até nem foi pensada para essa situação, mas sim para a sugestão de colocar o código que não se quer repetir dentro do loop(). Pode fazer-se? Sim, pode. Mas não é por isso que deixa de ser "burrice".

Conhecendo a estrutura do ficheiro main.cpp dos projectos criados com o IDE do Arduino:
Code: [Select]
#include <Arduino.h>

int main(void)
{
 init();

#if defined(USBCON)
 USBDevice.attach();
#endif
 
 setup();
    
 for (;;) {
 loop();
 if (serialEventRun) serialEventRun();
 }
        
 return 0;
}


percebe-se que se tiver-mos código que queiramos executar apenas uma vez coloca-mo-lo fora do for ( ; ; ) e se tivermos código que queiramos executar ciclicamente coloca-mo-lo dentro do desse ciclo infinito.

Nota que foi uma sugestão...

Nota também que pode existir a possibilidade de se querer correr código apenas uma vez tendo corrido já parte do loop. Eu não consigo imaginar uma neste preciso momento, mas sou humilde o suficiente para admitir que essa possibilidade pode existir e como tal a sugestão é válida.

Mas pronto... Não vale a pena chatear-me.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

vagner

Muito obrigado a todos pela ajuda. Amigos o que eu queria era que o arduino leonardo tecla-se F1 em minhas maquinas de musicas toda vez que fossem ligadas por que elas estão resetando muito a bios, que passa aí à pedir F1. Foi resolvido o problema substituindo o Keyboard.write() por Keyboard.press() e também Keyboard.release() dentro do setup mesmo que ai passou a funcionar. Mais uma vez muito obrigado a todos pois esse conhecimento me abriu um leque de possibilidades.

void setup()
{
  Keyboard.begin();
  Serial.begin(9600);
  delay(5000);
  Keyboard.press(0xC2);
  delay(1000);
  Keyboard.release(0xC2);
}

vagner

Caros amigos tenho mais uma pergunta... Se eu substituir o cabo usb por um cabo com um pino ps2 para ligar direto na entrada ps2 do pc o arduino será reconhecido como teclado?

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

vagner

Amigo Bubulindo... Somente carater informativo. Eu pequei um cabo de um teclado ps2 e fiz as devidas ligações direto na saida usb do arduino. Quando liguei o pc o arduino foi reconhecido sim como teclado e esta funcionando perfeitamente.E foi resolvido o meu problema com o F1. Mais uma vez Obrigado a todos por terem  aplicado em me ajudar...

HugoPT

Quote
Pode fazer-se? Sim, pode. Mas não é por isso que deixa de ser "burrice".
Entao amigos, vamos lá ter calma.
Tambem penso que a idea que do WeiderAju não é nada descabida, eu proprio recorro muito a este "metodo" para controlar o fluxo do meu programa muitas vezes.Se existem milhares de formas de o fazer sim, claro, umas mais eficientes que outras em termos de clareza para o programador-sim claro, portanto tento o Luis sugerido que essa forma é burrice gostaria de saber como é a tua maneira que achas certa de fazer a coisa.
Penso que muitas vezes o programador gosta de ofuscar as coisas desviando-se de escrever codigo limpo e de facil manutenção, que só no primeiro olhar diz claramente o que faz.

Quote
Eu pequei um cabo de um teclado ps2 e fiz as devidas ligações direto na saida usb do arduino
Nao é regra mas alguns teclado sim dão desta forma.Antigamente os teclados USB ate traziam um conversor para PS2 mas nem todos dao ...
Bons estudos
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy