Issuu on Google+

Arduino AlĂŠm do Setup e Loop Ricardo da Silva Ogliari


Agenda ● ● ● ● ● ● ●

Introdução Loop e Setup Outras funções A grande estrela: a porta serial Demo 1: Vocês já estão vendo Demo 2: Arduino e Java Swing Demo 3: Arduino e GCM


Eu ● ● ● ● ● ●

Ricardo da Silva Ogliari Instrutor Globalcode Things Hacker Team Twing Studio StillRocker Revistas: – – –

Mobile Magazine Revista Espírito Livre iMasters

Sites: globalcoders, itweb, mobilidadetudo e THT


Introdução ● ● ●

O arduino é muito mais que loop e setup; A porta serial é a porta pro mundo; Bibliotecas já conhecidas;


Outras funções ● ● ●

● ● ● ● ●

random: números randômicos; constraint: constraint (0, 1, 8) – retorna 1; map: escala valores – map(10, 0, 1023, 0, 2046); Trabalhando com bits: int x = 0xbc – 10001100 / bitRead(x, 0); int x = 2 – 0010 – bitWrite(x, 0, 1) – vira 3 Tons de música: Tone(4, 500, 500) – porta, frequência (megahertz), duração


Interrupção ● ● ● ● ● ● ● ●

Arduino não tem Sistema Operacional; Única tarefa; Interrupções: dentro do setup: attachInterrupt(0, goFast, FALLING); 0 ou 1: a porta será a 2 ou 3; função a ser chamada; CHANGE, RISING ou FALLING: mudança, para cima ou para baixo;


É AGORAAAAA!!!!!! ARDUINO PC

SKETCH

USB para Serial

Microprocessador

UART

Buffer 128KB


Serial no lado Arduino ● ● ● ● ●

Serial.println Serial.begin(baudrate) Serial.available Serial.read Função serialEvent, chamada entre intervalos das chamadas ao loop


Serial no lado Java ● ● ● ● ● ●

RXTX - JavaComm http://rxtx.qbang.org/wiki/index.php/Main_Page import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener;


Serial no lado Java CommPortIdentifier portId = null; Enumeration ports = CommPortIdentifier.getPortIdentifiers(); while (ports.hasMoreElements()) { CommPortIdentifier c = (CommPortIdentifier) ports.nextElement(); if (c.getName().equals(“COM37”)) portId = c; } serialPort = (SerialPort)portId.open(getClass().getName(),TIME_OUT); serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); input = new BufferedReader(new InputStreamReader(serialPort.getInputStream())); output = serialPort.getOutputStream(); serialPort.addEventListener(this); serialPort.notifyOnDataAvailable(true);


Serial no lado Java public synchronized void serialEvent(SerialPortEvent oEvent) { if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) { try { String inputLine = input.readLine(); } catch (Exception e) {} } } public static synchronized void writeData(String data) { try { output.write(data.getBytes()); } catch (Exception e) {} }


Banco de Dados no Arduino ●

● ● ● ●

Flash Memory: É o HD do Arduino. Memória não volátil. É aonde vão os programas ATMega8 – 8kb de Flash ATMega168 – 16kb de Flash ATMega328 – 32kb de Flash


Banco de Dados no Arduino ●

● ● ● ●

Memória RAM: No ATMega328 são 2K; Variáveis; A diretiva PROGMEM #include <avr/pgmspace.h> Possui a função pgm_read_word; Tipos de dados especiais: prog_char, prog_int32_t


Banco de Dados no Arduino ●

● ● ● ●

EEPROM: Apesar do nome não é apenas leitura; Adiciona ou lê um byte por vez; #include <EEPROM.h> EEPROM.read(<endereço_memória>); EEPROM.write(<endereço_memória>, byte);


DEMOS ●

DEMOSSSSSSSSSSSSSSSSSSSSSSS!!!!!!!


PERGUNTAS? ● ● ● ●

ROGLIARIPING@GMAIL.COM @MOBILIDADETUDO THINGSHACKERTEAM.BLOGSPOT.COM @THINGSHACKERTM


Arduinopro