Manual
do
Maker
.
com
Como explicado no artigo anterior, o dock Arduino do Omega possui um ATmega328P onboard e os slots para acoplamento de shields. A comunicação entre o Omega e esse "Arduino onboard" pode ser feita por UART (a UART1 do Omega, mais especificamente). Nesse breve artigo pretendo mostrar o quão simples é essa comunicação.
O Onion Omega possui 2 UARTs, tendo uma delas conexão direta com a UART do ATmega328P, quando conectado à dock Arduino. Para interagir com seus sketches, não há outra forma mais simples que esta, sendo possível fazê-lo por linha de comando e se desejar, um shell script.
A UART1 do Omega responde no arquivo descritor do dispositivo /dev/ttyS1 no Linux. Tudo o que precisamos fazer para escrever nessa serial é enviar um comando echo seguido da mensagem para o dispositivo /dev/ttyS1:
echo "LED_ON" > /dev/ttyS1
E para ler, tão simples quanto, utilizando o comando cat, que ficará aguardando por dados na serial:
cat /dev/ttyS1
Vejamos como seria uma comunicação bi-direcional utilizando shell script no Linux e um sketch simples para acender e apagar o LED azul onboard da dock Arduino.
O mais coerente é definir algumas macros para enviar apenas 1 byte na comunicação ou, quando necessário, definir um protocolo. Apenas para figurar o funcionamento, o exemplo será o ligamento e desligamento do LED onboard da dock Omega utilizando os comandos 1 para ON e 0 para OFF. A velocidade da comunicação está por padrão 9600, então o sketch para o Arduino ficou assim:
byte msg[2] = {0};
byte i = 0;
bool check = false;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
Serial.begin(9600);
}
void loop() {
while (Serial.available()){
msg[i] = Serial.read();
i++;
check = true;
}
if (check){
i = 0;
if (msg[0] == '1'){
digitalWrite(LED_BUILTIN, HIGH);
}
else if (msg[0] == '0'){
digitalWrite(LED_BUILTIN, LOW);
}
check = false;
}
delay(500);
}
Depois foi só enviar o valor:
Para ler, basta utilizar o comando cat. Vejamos um exemplo. Suba esse sketch no ATmega328P:
unsigned long number = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println(number);
number++;
delay(1000);
}
Abra o terminal do Omega2 pelo browser. Execute o comando e veja o resultado:
Se quisermos programar diretamente no Omega, basta escolher a linguagem e abrir o dispositivo /dev/ttyS1 para leitura e escrita, na velocidade de 9600kbauds. É pura diversão!
Não é fácil achar no Brasil, mas por sorte a UsinaInfo tem ambos, a dock Arduino e o Omega2.
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.