Escolar Documentos
Profissional Documentos
Cultura Documentos
Workshop de Arduino PDF
Workshop de Arduino PDF
• 1kB de RAM
1 2 3
4
Exemplo 1
int count = 0;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(38400);
}
void loop() {
count = 0;
while(Serial.available() > 0) {
Serial.read();
digitalWrite(ledPin, HIGH);
delay(250);
digitalWrite(ledPin, LOW);
delay(250);
count++;
}
if(count)
Serial.println(count);
delay(100);
}
• Header
• Variáveis globais
• Setup
• Loop
Notação decimal
123 | 123U | 123L | 123UL
Notação octal
0137
Notação hexadecimal
0x9F
Ex:
char message[] = “Hello World”; // 12 bytes em RAM
char message[] PROGMEM = “Hello World”; // 12 bytes em FLASH
Desvantagens:
Os dados guardados na memória FLASH devem ser lidos com utilização de uma API
específica (pgm_read_word, pgm_read_word_near, ...)
// lê os pinos 2 a 7
byte data = PIND & B11111100;
digitalWrite(pin, value)
Escreve o valor TRUE ou FALSE no pino.
digitalRead(pin)
Lê o valor de um pino (TRUE ou FALSE). Se o pino não estiver ligado a leitura poderá
oscilar.
analogWrite(pin)
Escreve um valor analógico (PWM) com uma frequência de 490Hz. Esta função só está
disponível nos pinos 3, 5, 6, 9, 10 e 11
1 milisec = posição a 0º
2 milisec = posição a 180º
delay(ms)
Esta função gasta ciclos de relógio até ter decorrido o tempo indicado em milisegundos.
Quando se utiliza um valor inteiro superior a 32726 deve-se utilizar o prefixo UL.
delayMicroseconds(us)
Esta função gasta ciclos de relógio até ter decorrido o tempo indicado em microsegundos.
A actual implementação desta função garante resultados até um valor de 16383 uS.
int Serial.available()
Número de bytes (caracteres) disponíveis na porta série.
int Serial.read()
Lê um byte da porta série.
Serial.flush()
Limpa os dados da porta série, isto é: qualquer chamada a Serial.available() ou Serial.read()
retornam os dados mais recentes depois da última chamada a esta função.
Serial.print(b, fmt)
Envia pela porta série qualquer tipo de valor inteiro em formato ASCII de acordo com um
dos seguintes formatos: DEC, HEX, OCT, BIN, BYTE
Serial.print(str)
Envia pela porta série uma string ASCII.
Serial.println(b)
Serial.println(b, fmt)
Serial.println(str)
Ver família de funções Serial.print(). Estas funções colocam os dados na porta série
juntamente com os caracteres ASCII 13 e 10
• Interrupts
• Interrupts externos
noInterrupts()
Desactiva o modo de interrupts. Algumas funções podem produzir resultados inesperados
se este modo estiver desactivo, em especial funções de tempo e comunicação de dados com
o exterior. Contudo, em secções críticas de código é conveniente desligar os interrupts.
detachInterrupt(interrupt)
Desliga um interrupt externo.
• Math
• Trigonometria
• Números aleatórios
pow(base, exponent)
Calcula a potência da base. Esta função permite a utilização de frações, úteis para gerar
mapeamentos exponenciais de valores ou curvas (ex: curva de comportamento de um
sensor)
(Non detection)
L H
Output L
0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80
Output switching point distance
Fig.5 Analog Output Voltage vs. Surface Fig.6 Analog Output Voltage vs.Distance to
Illuminance of Reflective Object Reflective Object GP2D12
3.0 GP2D12 3.0
Draft Reflectivity
2.8 2.8
L=10cm White 90%
Gray 18%
2.4 2.4
0.4 0.4
L=60cm White
0 0
0 2000 4000 6000 8000 10000 12000 14000 0 10 20 30 40 50 60 70 80
Surface illuminance of reflective object (lx) Distance to reflective object L (cm)
Fig.7 Analog Output Voltage vs.Ambient Fig.8 Analog Output Voltage vs.Detection
(C) 2008, Filipe Valpereiro,
Temperature Distance
http://www.inmotion.pt
GP2D12 GP2D12
3.0 3.0 Kodak Co., Ltd. gray cards R-27
2.8 2.8 (reflective ratio : 90%)
L(Distance to
L=10cm reflective object)
X(Detection
distance)
2.4 2.4
Trigonometria
As seguintes funções estão disponíveis:
sin(angle)
cos(angle)
tan(angle)
A função random utiliza o seu valor de seed se este não for especeficado.
byte EEPROM.read(address)
EEPROM.write(address, value)
Leitura/escrita da EEPROM. Gama de endereços de 0 a 511.
• low-speed (10kbits/s)
requestFrom(address, quantity)
Envia um pedido de dados a um dispositivo. O barramento irá devolver n bytes
que passam a estar disponíveis para leitura com as funções Wire.available() e
Wire.receive()
beginTransmission(address)
Inicia a transmissão de dados para o dispositivo indicado. Os pedidos de envio
seguintes via send() serão guardados numa queue e enviados quando é executada
a função endTransmission()
send(value)
send(string)
send(data, quantity)
Envia dados ao de um dispositivo slave em resposta a um pedido do master ou
guarda dados na queue para envio posterior (de master para slave) durante o
intervalo entre uma chamada a beginTransmission() e endTransmission()
byte receive()
Lê um byte de dados de um master/slave
onReceive(handler)
Regista uma função que é chamada quando um dispositivo slave recebe uma transmissão
de dados de um master.
onRequest(handler)
Regista uma função que é chamada quando um dispositivo master pede uma transmissão
de dados um slave.
• Metro
• MsTimer2
• Firmata
• SimpleMessageSystem
Uma solução:
Metro led_1 = Metro(100);
Metro led_2 = Metro(250);
if(led_1.check() == 1)
digitalWrite(LED1, HIGH);
...
check()
Verifica o estado do período de tempo. Devolve 1 se já passou o intervalo definido ou 0
caso contrário.
interval(ms)
Altera o valor actual do perído do evento a associado.
MsTimer2::set(ms, task)
Permite a execução da tarefa indicada com um período mínimo de ms milisegundos.
MsTimer::start()
Inicializa o Timer2.
MsTimer::stop()
Termina o Timer2.
SPCR
SPI Control Register, utilizado para configurar o barramento SPI
SPSR
SPI Status Register, utilizado pelo ATMEGA para indicar o estado de uma comunicação.
SPDR
SPI Data Register, utilizado para enviar dados pelo barramento SPI.
Ligação de um dispositivo SPI
SLCK
Serial clock
MOSI
Master Output Slave Input
MISO
Master Input, Slave Output
SS
Slave Select
Diagrama Temporal, SPI
http://arduino.cc/en/Reference/HomePage
http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
http://en.wikipedia.org/wiki/I2c