Comunicação pela porta serial
Através da porta serial podem-se enviar dados a partir do Arduino para outros dispositivos ou para uma máquina rodando PD, por exemplo. O cabo de comunicação serial é o mesmo usado para programar o Arduino a partir do computador. Para que sua função se estenda à comunicação durante o tempo de execução, é necesário antes de mais nada abrir a porta serial através do programa que carregamos no Arduino. Para isso, utiliza-se a função
beginSerial(19200);
Já que só precisamos rodar essa ordem uma vez, essa linha normalmente vai no bloco void setup(). O número que aparece entre parênteses indica a velocidade de transmissão. Na comunicação esse valor é ultra-relevante, pois todos os dispositivos que vão interagir devem ter a mesma velocidade para poder entender-se. 19200 é um valor padrão e é o que o Arduino tem por default ao iniciar.
Uma vez aberta a porta serial, você deve querer enviar logo ao computador os dados obtidos de um ou mais sensores. A função que envia um dado é
Serial.print(data);
Uma consulta à ArdunoReferencia
? permitirá constatar que as funções print e println (println: mesma coisa que a anterior porém pulando uma linha) têm a opção de um modificador que pode ser de vários tipos:
Serial.print(data, DEC); // decimal em ASCII
Serial.print(data, HEX); // hexadecimal em ASCII
Serial.print(data, OCT); // octal em ASCII
Serial.print(data, BIN); // binario em ASCII
Serial.print(data, BYTE); // um Byte
Como se pode ver, praticamente todos os modificadores, menos um, enviam mensagens em ASCII. Há uma explicação breve:
Series de pulsos
No modo mais simples e comum de comunicação serial (assincrônica, 8 bits, mais um bit de parada) envia-se sempre um byte, isto é, uma fila de 8 pulsos de voltagem entendida pela máquina como uma série de 8 (1s ou 0s):
O que se quer dizer aqui é que não importa qual modificador usemos, sempre esão sendo enviados bytes. A diferença está no que esses bytes representam e, no caso do Arduino, só existem duas alternativas: uma serie de caracteres ASCII ou um número.
Se o Arduino lê um sensor analógico valendo 65, o equivalente à serie binária 01000001 será enviado, conforme indicado no modificador, como em:
dado Modificador Envio (pulsos)
65 ---DEC---- (“6″ e “5″ ACIIs 54–55) 000110110–000110111
65 ---HEX---- (“4″ e “1″ ACIIs 52–49) 000110100–000110001
65 ---OCT---- (“1″, “0″ e “1″ ACIIs 49–48–49) 000110001–000110000–000110001
65 ---BIN---- (“0″,”1″,”0″,”0″,”0″,”0″,”0″y”1″ ACIIs 49–48–49–49–49–49–49–48) 000110000-…
65 ---BYTE--- 01000001
É importante lembrar aqui que o modificador BYTE permite o envio de informação mais simples (menos pulsos para a mesma quantidade de informação) o que implica maior velocidade na comunicação.
Exemplo simples
Enviar somente um dado através de um potenciômetro conectado ao pino 24 do atmega:
int potPin = 2;
int ledPin = 13;
int val = 0;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH); // acende-se o ledPin, para saber quando o programa rodou
}
void loop() {
val = analogRead(potPin); // leitura do valor do pino do potenciômetro
Serial.println(val);
}
Se não utilizarmos nenhum modificador para a função Serial.println, isso dá na mesma que usar o modificador DEC. Este não é o modo de transmissão mais eficente, e sim o mais fácil de se ler no mesmo Arduino. Ao rodar este programa podemos imediatamente abrir o monitor serial do software Arduino (último botão à direita) aparecerá o dado controlado pelo potenciômetro.
(fonte e mais detalhes sobre Arduino e Serial: taller.tagabot.org)
Links