Olá galera,

   Dificilmente fazemos alguma coisa em arduino sem fazer um teste blink pra ver se ta tudo ok.

   Bem, eu sai pensando em como diminuir o codigo do blink ao minimo.

   Esse é o meu blink minimo.

   Se alguem tiver um jeito de diminuir mais,  fala ai.


int pin1=13;   //Define pino do led a piscar
boolean liga=0; // define uma variavel como boleana 0 ou 1

void setup() {
  pinMode(pin1, OUTPUT);} // indica que o pino e uma saida

void loop()  {
  digitalWrite(pin1,liga=!liga);  // inverte o estado do pino a cada passagem pela linha
  delay(500);    // defino o tempo entre piscadas
}

Exibições: 1316

Responder esta

Respostas a este tópico

Pedrosão,

    Cara, valeu pelas palavras de carinho e incentivo.

    Você falou que esta começando a fazer sketchs com mais de mil linhas,  bem,  talvez você já tenha visto,  mas recomendo dar uma olhadinha de novo nesse tutorial que criei a algum tempo:

[TUTORIAL] PROGRAMANDO DE FORMA ESTRUTURADA NO ARDUINO

Weider, 

Na verdade já tinha visto esse tutorial na época que vc postou e comecei a usar sempre os conhecimentos dele para os códigos...  

 mais de 200 linhas sem aquelas dicas, fica uma confusão... (lição aprendida!) valeu!

Retire a variavel booleana...

int pin1=13;   //Define pino do led a piscar

void setup() {
  pinMode(pin1, OUTPUT);} // indica que o pino e uma saida

void loop()  {
  digitalWrite(pin1,!digitalRead(pin1));  // inverte o estado do pino a cada passagem pela linha
  delay(500);    // defino o tempo entre piscadas
}

Olá pessoal criei uma função capaz de resolver esse problema do blink sem delay, testem e digam como se comporta.

Antes de mais nada essa é uma versão pré-alfa-beta-gamma . Ainda não teste muito bem, pode ter alguns bugs.

https://github.com/memristor/Arduino_Blink_Whitout_Delay

o código exemplo fica assim

#include <DigitalToggle.h>

#define LED13 13

void setup() {
pinMode(LED13, OUTPUT);
}

void loop(){
digitalToggleDelay(100, LED13);
}

muito legal Flávio, 

estou testando aqui, e está funcionando perfeitamente. Testei inclusive com dois leds piscando com tempos diferentes e foi blz.

Apos as ultimas conversas, pensei em uma outra coisa, e gostaria de saber se é possível criar uma biblioteca que possa usar { }. como o comando "for" ou "if".

Se puder, pensei em criar uma função/comando que pode ser usada para threads.

o uso seria assim: (3 exemplos abaixo) 

void loop(){

        threads(1000,1)   // executa o que tem dentro da chave a cada 1000 millis - Thread 01

{

ler sensor 1,

}

threads(700,2)  // executa o que tem dentro da chave a cada 700 millis - Thread 02

{

acende a luz do alerta 2

}

  threads(200)   // executa o que tem dentro da chave a cada 200 millis - Thread 03

{

ler sensor 2;

Se sensor 2 >20 executa um comando....

}

desculpe a falta de organização, mas isso é possivel? existe?

Pedroso,

Não existe (pelo menos que eu saiba) mas dá para implementar. Eu vou precisar fazer isso e vou utilizar o Timer1.

O que tenho em mente é implementar uma interrupção por tempo a cada "n" milisegundos e fazer o tempo das threads na forma de múltiplos destas interrupções;

Utilizando o seu exemplo, poderia  ser implementado da forma de uma interrupção a cada 100milisegundos, nesse caso a thread1 seria executada a cada 10 interrupções, a thread2 a cada 7 interrupções e a thread 3 a cada 2 interrupções.

Eu já testei esse modelo com duas funções - uma a cada 200milisegundos e a outra a cada 50 intervalos, ou seja, a cada 10segundos. E funcionou bem, mas pretendo implementar na forma de biblioteca.

Se der certo, posto aqui em mais alguns dias.... tô meio atarefado com outras coisas, mas se alguém pegou a idéia, não é dificil. O Timer1 é o melhor, por ser 16bits.

O bacana seria se tivessemos vários registradores de 16 bits, mas tendo um só dá prá quebrar o galho desse jeito. Acho... vou testar

Olá Pedroso.

É mais ou menos isso que vc queria ?

#define BOOM 250000 //define ciclo de interrupção a cada 250000 microseg (1/4seg)
#define LED1 6
#define LED2 7
void setup()
  //cria TicTacBoom e define função userCall1 a cada 2 ciclos de 1/4seg
  TicTacBoom ticBoom = TicTacBoom(BOOM, 2, userCall1);
  //adiciona nova função userCall2 a cada 3 ciclos
  ticBoom.add (3, userCall2);
}
void userCall1(){
  digitalToggle(LED1);
}
void userCall2(){
  digitalToggle(LED2);
}

Exemplo completo e a biblioteca criada no arquivo anexo.

A classe TicTacBoom está definida para aceitar até 5 ciclos e respectivas userCall(); pode ser modificado à vontade, só modificar a linha:

#define TICTAC_SIZE 5

pelo valor desejado.

Observe que a função já utiliza a biblioteca criada pelo nosso colega Flavio (thanks brother).

Bom, para mim está funcionando direitinho.

Note também que a classe não utiliza delay() nem millis(), funciona com interrupções atarvés da biblioteca nativa do Arduino Timer1.

Ou seja, conforme poderá ver, no exemplo acima, que troca o estado do pino 6 a cada 2 ciclos de 1/4seg (1/2seg) e do pino 7 a cada 3 ciclos, não é utilizado a função loop().

Dessa forma é possivel deixar os dois leds "piscando" e fazer o código desejado em loop().

Seu comentário é bem vindo.

Esqueci de anexar. Segue.

Anexos

Sensacional Flavio ! Muito boa !!

Como eu preciso implementar um código com 3 ou 4 threads e o Timer1 é um só, vou ver se dá para utilizar sua biblioteca, se não eu uso por interrupção mesmo.

Depois aviso.

ha ha ha,   legal,  a coisa tá rendendo,   tá dando frutos... muito legal...

Muito boa sua modificação Flavio.

Por favor tire-me uma dúvida. Não entendi o código abaixo:

#if defined(ARDUINO) && ARDUINO >= 100
   #include <Arduino.h>
#else
   #include <WProgram.h>
#endif

// #include <inttypes.h>

Pretendo utilizar sua biblioteca - talvez precise fazer umas modificações, depois posto aqui.

Valeu !

Olá, espero que tenha gostado da ideia da biblioteca, ainda está em construção.

Esse trecho de código é apenas para manter compatibilidade com versões da IDE que usam Arduino.h ou WProgram.h

O ultimo include está comentado e não está sendo utilizado, esqueci de apagar.

Como mostra no site.

https://www.arduino.cc/en/Main/ReleaseNotes

Até mais

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço