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