Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Oi pessoal, boa tarde.
- Em várias oportunidades tenho ajudado, amigos no LdG, que precisam que o a arduino faça mais que uma tarefa
- simultaneamente. Por exemplo; ler um valor em um sensor e girar um servo motor.
- Isto recebe o nome de multi processamento ou multitarefa (Multitasking).
- Como o arduino só tem um núcleo, isto é impossível.
- Mas existe um recurso que simula o multitasking no arduino. É a biblioteca " Threads ". É um multitasking virtual.
- Esta biblioteca trabalha assim:
- São definidos tempos para que cada tarefa seja executada:
- Ex: define que a tarefa de ler o valor do sensor será de 20ms e a tarefa de girar o servo motor será de 30ms.
- Após configurar os parâmetros para serem usados com a biblioteca threads, teremos a seguinte situação:
- Durante 20ms o programa executa a atividade de ler o sensor, aí ele para, e salva todas informações pertinentes ao que estava fazendo,
- e começa a a tarefa de girar o servo motor durante 30 ms.
- Durante 30ms, o programa executa a atividade de girar o servo, aí ele para, e salva todas informações pertinentes ao que estava fazendo,
- restaura as informações referentes à leitura do sensor e durante 20ms continua fazendo a tarefa de ler um valor no sensor.
- E assim fica fazendo: 20ms lendo sensor, 30ms girando servo.
- Como a velocidade de troca de tarefa é muito rápida, as paradas de cada tarefa passam despercebidas, parecendo que o arduino
- está fazendo as tarefas ao mesmo tempo.
- Por "default" você pode selecionar até 15 tarefas "simultâneas" .
- Eu montei dois codes para testar o uso da biblioteca " Threads ".
- Um usa delay entre acender e pagar LED,
- 2 threads 1o. thread 10ms Acende LED A a e após 500milis() apaga LED A
- 2o. thread 10ms Acende LED B a e após 500milis() acende LED B
- e o outro usa millis() para manter o LED aceso ou apagado.
- 2 threads 1o. thread 10ms Acende LED A a e após 500ms de delay apaga LED A
- 2o. thread 10ms Acende LED B a e após 500ms de delay acende LED B
- O que eu esperava que ocorresse:
- Ao iniciar o LED A deveria acender e após 10 ms o LED B acender.
- Após 500ms o LED A deveria apagar e 10 ms após o LED B deveria apagar.
- No code onde usei millis(), isto ocorreu como esperado.
- No code onde usei o delay, isto não aconteceu, o LED B só acendeu depois que o LED A apagou. (500 ms).
- E o LED A só acendeu depois que o LED B apagou. (500 ms).
- Daí imaginei que a função delay afeta o multtasking.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement