FI577 - Instrumentação eletrônica para a física
Leitura recomendada: www.arduino.cc e Google.
Arquivo\Exemplos\01. Basics\Blink
\* Documentação *\
)/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your Arduino model, check
the Technical Specs of your board at https://www.arduino.cc/en/Main/Products
*/
Comentário ao final de uma linha:
Comentário utilizando muitas linhas:
Configurações iniciais do sistema (void setup(){}
)
LED_BUILTIN
será usado como uma saída.pinMode(pin, type);
, onde pin=LED_BUILTIN
e type=OUTPUT
funcao(argumentos)
;
Nota: Blocos de código começam com {
e terminam com }
void loop(){}
)pseudo-código:
1) Pino do LED com tensão alta (+5V);
2) Aguarda 1000ms;
3) Pino do LED com tensão baixa (+0V);
4) Aguarda 1000ms;
5) Retorna ao passo 1).
Exemplo: informações a respeito de digitalWrite(pin, Value)
e delay(ms)
.
LED_BUILTIN
, vamos usar o pino D13 como fonteArquivo\Exemplos\01. Basics\DigitalReadSerial
Ferramentas/Monitor Serial(CTRL+SHIFT+M)
e observar…pushButton
int pushButton
indica um espaço na memória que será usado para armazenar um número (tipo int
). A variável deve sempre ser definida antes de ser utilizada!pushButton
.int pushButton = 2;
void setup() {
Serial.begin(9600); // initialize serial communication at 9600 bits per second:
pinMode(pushButton, INPUT); // make the pushbutton's pin an input:
}
void loop() {
int buttonState = digitalRead(pushButton); // read the input pin:
Serial.println(buttonState); // print out the state of the button:
delay(1); // delay in between reads for stability
}
=
) armazena o valor 2
na variável pushButton
pushButton
e perguntarmos o seu valor posteriormente, obteremos 2
.pushButton
. Poderíamos ter definido a variável de uma maneira alternativa:pushButton = 2;
poderíamos ter escrito pushButton = 1+1;
(Verifiquem!)+
), subtração(-
), multiplicação(*
), divisão(/
). Podemos também obter o resto da divisão de um inteiro por meio do operador módulo(%
).(1+2)/3==1
Serial.begin(9600);
pushButton
(D2) será usado para medir tensões binárias pinMode(pushButton, INPUT);
Serial
) e de medição binária de tensão (INPUT
). O setup()
termina então com }
int pushButton = 2;
void setup() {
Serial.begin(9600); // initialize serial communication at 9600 bits per second:
pinMode(pushButton, INPUT); // make the pushbutton's pin an input:
}
void loop() {
int buttonState = digitalRead(pushButton); // read the input pin:
Serial.println(buttonState); // print out the state of the button:
delay(1); // delay in between reads for stability
}
digitalRead(pushButton)
lê o estado da tensão no pino pushButton
(D2)int buttonState
Serial.println(buttonState);
int pushButton = 2;
void setup() {
Serial.begin(9600); // initialize serial communication at 9600 bits per second:
pinMode(pushButton, INPUT); // make the pushbutton's pin an input:
}
void loop() {
int buttonState = digitalRead(pushButton); // read the input pin:
Serial.println(buttonState); // print out the state of the button:
delay(1); // delay in between reads for stability
}
Blink
, e partindo do código do exemplo DigitalReadSerial
, faça com que o LED acenda quando o botão é pressionado.digitalWrite
) e como um medidor binário de tensão (usando o digitalRead
).
Abram o exemplo em Arquivo/Exemplos/01. Basics/AnalogReadSerial
.
sensorValue
, quando a posição do potenciômetro muda.analogRead(A0)
é um valor inteiro, enquanto a tensão analógica \(V_{\text{pot}}\) é um número real.float
e double
.
float x = 1.135;
x
é uma variável que armazena números inteiros, cujo valor é igual a 1.135
.
float
e double
são equivalentes.double
possui o dobro de bits, e pode ser usado para cálculos de maior precisão.var = 1+1;
por var = 3/2;
? (Não façam no programa ainda!)float
. Caso contrário, o compilador interpretará a equação como sendo no domínio dos inteiros!var = 3./2.;
float
.float
’s são bem mais complicados para o processador do que aqueles envolvendo inteiros. Desta forma, se quisermos cálculos mais rápidos devemos evitar usar float
.Arquivo/Exemplos/01. Basics/AnalogReadSerial
.A0
). Sabendo que a resolução da medida é 10 bits (0-1023), e que o valor máximo corresponde a 5V, convertam sensorValue
para tensão.analogWrite
implementada no arduino permite modular a potência de um sinal uma resolução de 8 bits (\(2^8=256\) valores de potência).
~Dx
), como o pino 9Exemplos\01.Basics\Fade
analogWrite
varia o brilho do LED a cada iteração do loop. Após modificar o brilho, varia o valor. brightness
é mantido sempre entre 0 e 255, já que a resolução do analogWrite
é de 8 bitsanalogWrite(led, brightness);
O brilho do pino led
é ajustado para o valor brightness
brightness = brightness + fadeAmount;
O valor de brightness
é incrementado pelo valor de fadeAmount
if (brightness <= 0 || brightness >= 255)
Se o valor do brilho for menor que 0
ou (||
) maior que 255
, executa o bloco de código a seguir
fadeAmount = -fadeAmount;
O valor do incremento do brightness
deve ter o sinal invertido, para que o brilho volte a variar entre 0
e 255
.delay(30);
Aguarda 30 ms antes de modificar novamente o valor do brilhodelay(ms)
: pausa o arduino por um tempo de ms
milissegundosdelayMicroseconds(us)
: pausa o arduino por us
microssegundosunsigned long time = millis()
: A função millis()
lê o tempo do relógio interno em milissegundos. Este valor pode ser armazenado numa variável para comparação de tempos entre diferentes eventos. Neste caso, o valor é armazenado na variável time
millis()
: Equivalente a função millis()
, porem lê o tempo do relógio interno na escala de microssegundosExemplos\02.Digital\BlinkWithoutDelay
const int ledPin = LED_BUILTIN; // the number of the LED pin
int ledState = LOW; // ledState used to set the LED
unsigned long previousMillis = 0;// will store last time LED was updated
const long interval = 1000; // interval at which to blink (milliseconds)
(...)
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(ledPin, ledState);
}
}
Serial.println(intervalo de tempo);
Sugestão: inicie partindo da seguinte configuração inicial: