Arduino Blink

Bom estive testando meu primeiro programa com Arduíno, e ele faz uma coisa muito útil, ele faz um led piscar isso mesmo! Não e fantastico?

Bom o exemplo acima e de uma alma feliz como a minha que fez o mesmo teste.
O codigo fonte para isso é encontrado no próprio site do Projeto e segue abaixo:

int ledPin = 13;                 // define o pino onde esta conectado o led
void setup(){
pinMode(ledPin, OUTPUT);      // configura ledppin como saida digital
}
void loop(){

digitalWrite(ledPin, HIGH);   // coloca o led como ligado
delay(1000);                  // aguarda um segundo
digitalWrite(ledPin, LOW);    // desliga o led
delay(1000);
}

O negócio e que eu não gostei, ele ocupa 1026 bytes de programação no windows, isso é muito ainda mais se considerarmos que ele só tem 30000 bytes disponíveis.

Mas com uma pequena alteração ele passa a ocupar 1018 bytes.

Substitua essa linha:


int ledPin = 13;

Por:


const unsigned int ledPin = 13;

Nesse simples exemplo eliminou espaço reservado ao sinal do int e ainda impediu que o LedPin pudesse ser alterado, isso diminui a complexidade do código binário, já que ele só precisará referenciar a posição da memória da constante ao invés de procurar pelo valor atual da variavél. Mas ta aí eu não gostei…  Agora alterando mais algumas coisinhas a gente consegue reduzir para 1014 bytes


const unsigned int ledPin = 13;

boolean dado=1;

void setup(){

pinMode(ledPin, OUTPUT);

}

void loop() {

dado=!dado;

digitalWrite(ledPin, dado);   // sets the LED on

delay(1000);                  // waits for a second

}

Bom isso é só para mostrar que com um pouco de tempo da pra diminuir o tamanho do executável, ainda não li quantos ciclos são necessários para cada instrução, ainda não estou me preocupando com isso, só estou me preocupando com o tamanho do executavel.
Agora e continuar a fuçar!

2 ideias sobre “Arduino Blink”

  1. Anthony,

    Vi seu site no CosmoForum. Sou iniciante em Astrnomia, comprei um “tele-bomba GREIKA 114mm” rsrs. Bom, não sabia das lente relay, mas enfim.

    Quanto ao seu programa o maior problema não é esta função em si, mas o que tem antes, a inicialização do ARDUINO. Nunca mexi com arduino, mas programo PSoC, PIC, STM32 da ST, etc. Este ultimo um chip de 32 bits que custa 2,7 centavos de dolares.

    para piscar um led em Assebly no pic

    movlw 01 ; move a posição do LED que queremos inverter no registrador
    xorwf PRT_0; inverte o pino de saida. FIZ um OU exclusivo com porta
    ; de saída PRT_0 é um #define do endereço da porta de said
    movlw 1 ; carrega quantidade de tempo que quero esperar para
    ; inverter novamente o led
    call _WaitSeg ; aqui vc cria a rotina de tempo um coloca na interupção
    ; do timer

    Isso ocupa 5 bytes na memoria de um PIC que pode ter 512 à 65536 bytes

    Se você olhar o LST do seu código( LST é o assembly gerado) vai ver que o problema não é a sua função, mas sim o que tem antes a inicialização.

    Tente este código em C.
    por ex.

    // Blink_Pin_5
    // demo for Exclusive OR

    void setup(){
    DDRD = DDRD | B00100000; // set digital pin five as OUTPUT
    }

    void loop(){
    PORTD = PORTD ^ B00100000; // invert bit 5 (digital pin 5), leave others untouched
    delay(100);
    }

    Não sei onde esta o seu led, mas te garanto que isso faz a mesma coisa do código BLINK com muito menos “memória”.

    Vc tem que ter em mente que quanto mais alto nível, mais memoria vc vai consumir, por que alguém esta fazendo o “trabalho pesado” por vc mas fique tranquilo, vi que esse chip tem 32K de flash sendo 5K para o Bootloader, pode usar a vontade que vai sobrar memoria.rsrs

    Comecei programando um PIC12C508 com incríveis 512 bytes de ROM e incriveis 25 bytes de RAM. E fiz um dimmer de controle remoto que era capaz de aprender a tecla de qualquer controle remoto, mas lógico programei em Assembler.

    Abraços,

    Douglas

    1. Fantastico Douglas,

      Recentemente fiz um braço mecânico todo programado no arduino. Prentendo ter tempo pra escrever sobre ele daqui a algum tempo! Obrigado pela contribuição!

      att,

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Please type the characters of this captcha image in the input box

Por favor, digite os caracteres desta imagem na caixa de entrada