• Welcome to LusoRobótica - Robótica em Português.
 

Duvida Programação

Started by Raul, 03 de February de 2010, 00:10

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Raul

Uma pergunta que pode ser estúpida.
Podemos fazer  um programa e ele correr sem usar-mos o  void loop, por exemplo que mexer num motor para ele fazer um movimento só uma vez, para fazer experiências.
Não tenho vagar para ir experimentar.

Cumprimentos

tcustodio

claro que podes, como deves saber, a função setup() é executada uma vez, antes da função loop()
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

microbyte

Como o tcustodio disse, podes meter o código no setup(), que só corre uma vez.
No entanto vou pôr aqui uma solução um pouco mais elaborada, mas que é capaz de dar jeito.

O código que vou pôr aqui é para executar o blink só uma vez, usando o loop().

Quote
int ledPin = 13;
boolean firstRun = true;

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

void loop()                     
{
  if(firstRun){
    digitalWrite(ledPin, HIGH);
    delay(1000);
    digitalWrite(ledPin, LOW);
    delay(1000);
    firstRun = false;
  }
  
  // Aqui podes por outro codigo, que vai estar sempre a correr
  // Se, pelo meio do código precisares de correr aquilo que está em cima
  // (neste caso, o blink), basta meteres firstRun=true; e no próximo ciclo,
  // o código é executado
}


Raul

Sim isso são duas maneiras de fazer, mas estava a dizer a seguir ao setup sem loop?
Se era possível assim?


int ledPin = 13;


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

digitalWrite(ledPin, HIGH);
    delay(1000);
    digitalWrite(ledPin, LOW);
    delay(1000);



Cumprimentos

ricardo-reis


Raul


microbyte

Quote from: Raul on 03 de February de 2010, 22:16
Sim isso são duas maneiras de fazer, mas estava a dizer a seguir ao setup sem loop?
Se era possível assim?


int ledPin = 13;


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

digitalWrite(ledPin, HIGH);
    delay(1000);
    digitalWrite(ledPin, LOW);
    delay(1000);



Cumprimentos

A resposta é não, como o ricardo-reis disse...

A explicação é que só podes invocar funções dentro do setup() ou do loop()... De resto, fora disso, podes fazer apenas declarações: declarar funções, declarar variáveis (globais). Mas não podes invocar essas funções.

( Isto partido do pressuposto de que entendes que o digitalWrite() é uma função )

Raul

Sim eu também percebo de programação XD

Cumprimentos