Buscar

Comunicação serial com Arduino utilizando Qt5 Console Application

Prévia do material em texto

���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� ����
Comunicação serial com Arduino utilizando Qt5 Console
Application
ƉŽƌ��ůĞŝƚŽŶ��ƵĞŶŽ�Ğŵ�ƋƵŝŶƚĂͲĨĞŝƌĂ͕�ϬϮ�ĚĞ�Ăďƌŝů�ĚĞ�ϮϬϭϱ͘
Introdução
�
&ŝnj�Ƶŵ�ƉŽƐƚ�ŚĄ�Ƶŵ�ƚĞŵƉŽ�ƐŽďƌĞ�ĐŽŵŽ�ƌĞĂůŝnjĂƌ�ĐŽŵƵŶŝĐĂĕĆŽ�ƐĞƌŝĂů�ƵƚŝůŝnjĂŶĚŽ�Ž�WLJƚŚŽŶ�;WLJƚŚŽŶ�н��ƌĚƵŝŶŽ�Ͳ
�ŽŵƵŶŝĐĂĕĆŽ�^ĞƌŝĂů�΀ϭ΁Ϳ�Ğ�ƉĂƌĂ�ĨĂĐŝůŝƚĂƌ�ƵƚŝůŝnjĞŝ�Ƶŵ��ƌĚƵŝŶŽ�hEK͘��ĞƐƚĂ�ǀĞnj�ǀĂŵŽƐ�ĐŽŶŚĞĐĞƌ�Ž�Yƚ�Ğ�ǀĞƌŝĨŝĐĂƌ�Ž
ƋƵĞ�ƉƌĞĐŝƐĂŵŽƐ�Ğ�ĂƐ�ŽƉĕƁĞƐ�ĚŝƐƉŽŶşǀĞŝƐ�ƉĂƌĂ�ĐŽŵƵŶŝĐĂƌŵŽƐ͘�WŽĚĞŵŽƐ� ĨĂnjĞƌ�ƵŵĂ�ĂƉůŝĐĂĕĆŽ� ƐŝŵƉůĞƐ͕�ƉĂƌĂ
ŝŶƚĞƌĂĕĆŽ�ǀŝĂ�ĐŽŶƐŽůĞ�ĂƉĞŶĂƐ͕�ŽƵ�ĐŽŵ�ŝŶƚĞƌĨĂĐĞ�ŐƌĄĨŝĐĂ͘
�
WĂƌĂ�ĨĂŵŝůŝĂƌŝnjĂƌŵŽƐ�ĐŽŵ�Ž�Yƚ͕�ƚĞŵ�Ƶŵ�ƉŽƐƚ�ƋƵĞ�ĞƐĐƌĞǀŝ�ŚĄ�Ƶŵ�ƚĞŵƉŽ�;Yƚϱ�Ͳ��ŽŶŚĞĐĞŶĚŽ�Ƶŵ�ǀĞƌĚĂĚĞŝƌŽ
ĐĂŶŝǀĞƚĞͲƐƵŝĕŽ�΀Ϯ΁Ϳ�Ğ�ĂďŽƌĚĂ�ĐŽŵ�ďĂƐƚĂŶƚĞ�ĚĞƚĂůŚĞƐ�ĞƐƐĂ�ĨĞƌƌĂŵĞŶƚĂ͘�WĂƌĂ�ƋƵĞŵ�ŶƵŶĐĂ�ƚĞǀĞ�ĐŽŶƚĂƚŽ�Ğ�ƋƵĞƌ
EMBARCADOS TV
OPORTUNIDADES
�ĞƐĞŶǀŽůǀĞĚŽƌ�ĚĞ�^ŽĨƚǁĂƌĞ�Ğ�,ĂƌĚǁĂƌĞ�ŶĂ
�ŽůŚĂ��ŽŵƵŶŝĐĂĕĆŽ�>d���Ͳ�^ĆŽ�WĂƵůŽ�ͬ�^W
WƌŽũĞƚŝƐƚĂƐ�ĚĞ�>ſŐŝĐĂ�WƌŽŐƌĂŵĄǀĞů�Ͳ��ĂƚĂĐŽŵ
1/71 SLE15 - Desenv...
� � � � � �HOME SOBRE CONTEÚDO FÓRUM EVENTOS OPORTUNIDADES COMUNIDADE
:ƵŶƚĞͲƐĞ�Ă��ŽŵƵŶŝĚĂĚĞ��ŵďĂƌĐĂĚŽƐ͗� ZĞĂůŝnjĂƌ�>ŽŐŝŶ �ŽƵ� ZĞŐŝƐƚƌĂƌͲƐĞ 3HVTXLVDU � ,U

�ŽŶƚĂƚŽ�ͬ�&ĞĞĚďĂĐŬ
7UDQVODWH�ª
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� ����
ŝŶƐƚĂůĂƌ�Ž�Yƚ͕�ƉŽĚĞ�ƵƐĂƌ�ĞƐƚĞ�ŽƵƚƌŽ�ƉŽƐƚ͕�Yƚϱ�Ͳ� /ŶƐƚĂůĂĕĆŽ�Ğŵ�ĂŵďŝĞŶƚĞ�>ŝŶƵdž�΀ϯ΁͕�ĐŽŵ�ƉĂƐƐŽ�Ă�ƉĂƐƐŽ�ƉĂƌĂ
ŝŶƐƚĂůĂƌ�Ž�Yƚ�ƌĞĂƚŽƌ�ŶŽ�>ŝŶƵdž͘�DĞƐŵŽ�ƋƵĞŵ�ũĄ�ŝŶƐƚĂůŽƵ�Ġ�ŝŶƚĞƌĞƐƐĂŶƚĞ�ǀĞƌ�Ž�ƉŽƐƚ�ƉĂƌĂ�ĞŶƚĞŶĚĞƌ�ĂƐ�ŽƉĕƁĞƐ
ƋƵĞ�ƉŽĚĞŵ�ƐĞƌ�ŚĂďŝůŝƚĂĚĂƐ�ĂŶƚĞƐ�ĚĂ�ŝŶƐƚĂůĂĕĆŽ͘
�
�
Configuração do ambiente host
�
WĂƌĂ�ĞƐƚĞ�ĂƌƚŝŐŽ�ƐĞƌĄ�ƵƚŝůŝnjĂĚĂ�Ă�ĚŝƐƚƌŝďƵŝĕĆŽ�>ŝŶƵdž�DŝŶƚ�ϭϳ�YŝĂŶĂ�ϲϰ�ďŝƚƐ͕�ŵĂƐ�ƐĞŵ�ƉƌŽďůĞŵĂƐ�Ğŵ�ƵƚŝůŝnjĂƌ�Ƶŵ
hďƵŶƚƵ�ŽƵ��ĞďŝĂŶ͘���ƐĞŐƵŝƌ�ƐĆŽ�ůŝƐƚĂĚŽƐ�ŽƐ�ƐĞƵƐ�ƉƌĠͲƌĞƋƵŝƐŝƚŽƐ͗
Yƚϱ�/ŶƐƚĂůĂĚŽ�ĐŽŵ�Ž�Yƚ��ƌĞĂƚŽƌ͖
/����ƌĚƵŝŶŽ�ϭ͘ϲ͘Ϯ͖
�ƌĚƵŝŶŽ�hEK͖
WůƵŐŝŶ�Yƚ�^ĞƌŝĂů͘
�
�
Qt5 Console Application
�
�� ĂďŽƌĚĂŐĞŵ� ŶĞƐƚĞ� ƉŽƐƚ� Ğ� ŶĂ� ƐĠƌŝĞ� ƋƵĞ� ĞƐƚĄ� ƉŽƌ� ǀŝƌ͕� Ž� Yƚϱ� ƐĞƌĄ� ƵƚŝůŝnjĂĚŽ� Ğŵ� ĂŵďŝĞŶƚĞ� >ŝŶƵdž� Ğ� ĐŽŵ
ĚĞƐĞŶǀŽůǀŝŵĞŶƚŽ�ĚĞ�ĂƉůŝĐĂĕĆŽ�ƉĂƌĂ�>ŝŶƵdž�;džϴϲ�ŽƵ�ĂƌŵͿ͕�ƉŽƌĠŵ�Yƚϱ�ƉŽĚĞ�ƐĞƌ�ŝŶƐƚĂůĂĚŽ�ƚĂŶƚŽ�Ğŵ�tŝŶĚŽǁƐ͕
>ŝŶƵdž�ŽƵ�DĂĐK^͕�ĂůĠŵ�ĚĞ�ƉŽĚĞƌ�ƐĞƌ�ĐŽŵƉŝůĂĚŽ�ƉĂƌĂ�ŽƵƚƌĂƐ�ƉůĂƚĂĨŽƌŵĂƐ͘
�
^Ğŵ�ŵĂŝƐ�ĚĞůŽŶŐĂƐ͕� ƐĞ� ǀŽĐġ� ũĄ� ŝŶƐƚĂůŽƵ�Ž�Yƚϱ�ƉŽĚĞ�Ăďƌŝƌ�Ž�Yƚ��ƌĞĂƚŽƌ͕� Ğ� ĐĂƐŽ�ĂŝŶĚĂ�ŶĆŽ� ƚĞŶŚĂ� ŝŶƐƚĂůĂĚŽ
ĐŽŶĨŝƌĂ�Ž�ƉƌŽĐĞĚŝŵĞŶƚŽ�ĚŽ�ƉŽƐƚ�Yƚϱ�Ͳ�/ŶƐƚĂůĂĕĆŽ�Ğŵ�ĂŵďŝĞŶƚĞ�>ŝŶƵdž�΀ϯ΁͘
�
�Žŵ�Ă�/���ĚŽ�Yƚ�ĂďĞƌƚĂ͕�ĐůŝĐŬ�Ğŵ�&ŝůĞ�х�EĞǁ�&ŝůĞ�Žƌ�WƌŽũĞĐƚ͘͘͘�Ğ�ƵŵĂ�ũĂŶĞůĂ�ĐŽŵŽ�ŶĂ�&ŝŐƵƌĂ�ϭ�ƐƵƌŐŝƌĄ�Ğ�ǀŽĐġ
ĚĞǀĞƌĄ�ĞƐĐŽůŚĞƌ��ƉƉůŝĐĂƚŝŽŶƐ�х�Yƚ��ŽŶƐŽůĞ��ƉƉůŝĐĂƚŝŽŶ�Ğ�ĐůŝĐĂƌ�Ğŵ��ŚŽŽƐĞ�͘
�
(PDLO
NEWSLETTER
ENQUETES REALIZADAS
�ƌĚƵŝŶŽ�Ͳ��ŽŵƵŶŝĐĂĕĆŽ�^ĞƌŝĂů
POSTS POPULARES
�ŶĂůŝƐƚĂ�ĚĞ�dĞƐƚĞƐ�:ƵŶŝŽƌ�ŶĂ��ƵƚĞƋ
dĞůĞŵĄƚŝĐĂͬ:ŽŚŶ��ĞĞƌĞ�Ͳ�^ĆŽ�WĂƵůŽ�Ğ
/ŶĚĂŝĂƚƵďĂ
�ŶĂůŝƐƚĂ�ĚĞ�^ŝƐƚĞŵĂƐ�ͬ��ŶŐĞŶŚĞŝƌŽ�ĚĞ
�ĞƐĞŶǀŽůǀŝŵĞŶƚŽ�;�ŵďĂƌĐĂĚŽͿ�:ƵŶŝŽƌ�Ͳ
�ƵƚĞƋ�dĞůĞŵĄƚŝĐĂͬ:ŽŚŶ��ĞĞƌĞ�Ͳ�^ĆŽ�WĂƵůŽ�Ğ
/ŶĚĂŝĂƚƵďĂ
�ŶĂůŝƐƚĂ�ĚĞ�^ŝƐƚĞŵĂƐ�ͬ��ŶŐĞŶŚĞŝƌŽ�ĚĞ
�ĞƐĞŶǀŽůǀŝŵĞŶƚŽ�;�ŵďĂƌĐĂĚŽͿ�WůĞŶŽ�ͬ
^ĞŶŝŽƌ�Ͳ��ƵƚĞƋ�dĞůĞŵĄƚŝĐĂͬ:ŽŚŶ��ĞĞƌĞ�Ͳ�^ĆŽ
WĂƵůŽ�Ğ�/ŶĚĂŝĂƚƵďĂ
DĂŝƐ�ŽƉŽƌƚƵŶŝĚĂĚĞƐ
�ƐĐŽůŚĂ�ĚĞ�DŝĐƌŽĐŽŶƚƌŽůĂĚŽƌ�ͬ
DŝĐƌŽƉƌŽĐĞƐƐĂĚŽƌ
^ŝƐƚĞŵĂ�KƉĞƌĂĐŝŽŶĂů��ŵďĂƌĐĂĚŽ
>ŝŶŐƵĂŐĞŵ�ĚĞ�ƉƌŽŐƌĂŵĂĕĆŽ
dŝƉŽ�ĚĞ�WƌŽĐĞƐƐĂĚŽƌK�EŽǀŽ��ŵďĂƌĐĂĚŽƐ
$66,1$5
ϰϲ͘ϱϴϱ�ǀŝƐƵĂůŝnjĂĕƁĞƐ
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� ����
&ŝŐƵƌĂ�ϭ�Ͳ��ƌŝĂŶĚŽ�WƌŽũĞƚŽ�Yƚ��ŽŶƐŽůĞ
�
EĂ� ũĂŶĞůĂ� ƐĞŐƵŝŶƚĞ�ĚĞǀĞŵŽƐ�ĚĂƌ�Ƶŵ�ŶŽŵĞ�ĂŽ�ƉƌŽũĞƚŽ� ;EĂŵĞ͗Ϳ� Ğ�ĚŝnjĞƌ�ŽŶĚĞ�ĚĞǀĞƌĄ� ƐĞƌ� ƐĂůǀŽ� ;�ƌĞĂƚĞ� ŝŶ͗Ϳ
ĐŽŵŽ�ŶĂ�&ŝŐƵƌĂ�Ϯ͘�EŽ�ŵĞƵ�ĐĂƐŽ�ĞƐĐŽůŚŝ�ƐĂůǀĂƌ�ŶĂ�ƉĂƐƚĂ�ͬƚŵƉͬ�ĂƉĞŶĂƐ�ƉĂƌĂ�ĞƐƚĞ�ĂƌƚŝŐŽ͕�ŵĂƐ�ǀŽĐġ�ƉŽĚĞƌĄ�ĐƌŝĂƌ
ƵŵĂ�ƉĂƐƚĂ�ŶŽ�ƐĞƵ�ͬŚŽŵĞ�Ğ�ƐĂůǀĂƌ�ŶĞůĂ͘�
�
^ŝŵƵůĂĚŽƌ�ĚĞ��ƌĚƵŝŶŽ͗�sŝƌƚƵĂů��ƌĞĂĚďŽĂƌĚ
�ƌĚƵŝŶŽ�hEK
�ƌĚƵŝŶŽ�Ͳ��ŶƚƌĂĚĂƐ��ŶĂůſŐŝĐĂƐ
�ŽŵƵŶŝĐĂĕĆŽ�^ĞƌŝĂů�:ĂǀĂ�н��ƌĚƵŝŶŽ
PARCEIROS
ϰϰ͘ϳϴϵ�ǀŝƐƵĂůŝnjĂĕƁĞƐ
ϰϭ͘ϬϬϵ�ǀŝƐƵĂůŝnjĂĕƁĞƐ
Ϯϳ͘ϵϰϲ�ǀŝƐƵĂůŝnjĂĕƁĞƐ
Ϯϳ͘ϴϲϮ�ǀŝƐƵĂůŝnjĂĕƁĞƐ
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� ����
&ŝŐƵƌĂ�Ϯ�Ͳ�EŽŵĞ�Ğ�ůŽĐĂůŝnjĂĕĆŽ�ĚŽ�ƉƌŽũĞƚŽ
�
EĂ�ĞƚĂƉĂ�ƐĞŐƵŝŶƚĞ�ǀĂŵŽƐ�ĂƉĞŶĂƐ�ĐŽŶĨŝƌŵĂƌ�ƐĞ�ĞƐƚĆŽ�ƐĞůĞĐŝŽŶĂĚĂƐ�ĂƐ�ŽƉĕƁĞƐ�ĐŽŵŽ�Ă�ĚĂ�&ŝŐƵƌĂ�ϯ͕�ŶĆŽ�ƉƌĞĐŝƐĂ
ƐĞƌ� ŝŐƵĂů�ŵĂƐ� ĂƚĞŶƚĞ� ƐŽďƌĞ�Ž�'��͘�YƵĂŶĚŽ� ĐƌŝĂƌ� Ž�ƉŽƐƚ� ĚĞ�ƉƌŽũĞƚŽƐ�Yƚ�ƉĂƌĂ� ĞŵďĂƌĐĂĚŽƐ� ĞƐƚĂ� ĞƚĂƉĂ� ƐĞƌĄ
ĂďŽƌĚĂĚĂ�ĐŽŵ�ŵĂŝƐ�ĚĞƚĂůŚĞƐ͘�WĂƌĂ�ĂǀĂŶĕĂƌ�ĐůŝƋƵĞ�Ğŵ�EĞdžƚ͘
�
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� ����
&ŝŐƵƌĂ�ϯ�Ͳ�^ĞůĞĐŝŽŶĂŶĚŽ�Ž�Ŭŝƚ�ĚĞ�ĚĞƐĞŶǀŽůǀŝŵĞŶƚŽ�;�ƵŝůĚͿ
�
EĂ� ũĂŶĞůĂ� ƐĞŐƵŝŶƚĞ� ĚĂ� &ŝŐƵƌĂ� ϰ� ƐĞƌĄ� ŽŶĚĞ� ǀŽĐġ� ĚĞǀĞ� ŽƵ� ŶĆŽ� ĞƐĐŽůŚĞƌ� Ž� ƐŽĨƚǁĂƌĞ� ĚĞ� ǀĞƌƐŝŽŶĂŵĞŶƚŽ� ;'ŝƚ͕
�ĂnjĂĂƌ͕�DĞƌĐƵƌŝĂů͕��s^͕�^ƵďǀĞƌƐŝŽŶ͕�ĞŶƚƌĞ�ŽƵƚƌŽƐͿ͘�EŽ�ĐĂƐŽ�ĚŽ�ĂƌƚŝŐŽ�ŶĆŽ�ĞƐƚĂƌĞŝ�ƵƐĂŶĚŽ͕�ŵĂƐ�ƋƵĂŶĚŽ� ĨŽƌ
ƵƚŝůŝnjĂƌ� Ƶŵ� ƉƌŽũĞƚŽ� ĚŽ� Yƚ͕� ƉŽƌ� ĨĂǀŽƌ� ƵƚŝůŝnjĞ� ƵŵĂ� ĚĂƐ� ŽƉĕƁĞƐ͕� ƋƵĞŵ� ĨŽƌ� ĚĂƌ� ŵĂŶƵƚĞŶĕĆŽ� ŶŽ� ĨƵƚƵƌŽ� ŝƌĂ
ĂŐƌĂĚĞĐĞƌ͘�>ŽŐŽ�ĂďĂŝdžŽ�ƐĞƌĄ�ĞdžŝďŝĚŽ�Ƶŵ�ƌĞƐƵŵŽ�ƐŽďƌĞ�Ž�ŶŽŵĞ�ĚŽ�ƉƌŽũĞƚŽ�Ğ�Ž�ůŽĐĂů�ƋƵĞ�ƐĞƌĄ�ƐĂůǀŽ͘�^Ğ�ĞƐƚŝǀĞƌ
ĚĞ�ĂĐŽƌĚŽ�Ġ�Ɛſ�ĐůŝĐĂƌ�Ğŵ�&ŝŶŝƐŚ͘
�
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� ����
&ŝŐƵƌĂ�ϰ�Ͳ�sĞƌƐŝŽŶĂŵĞŶƚŽ
�
hŵĂ�ĞƐƚƌƵƚƵƌĂ�ĐŽŵŽ�ŶĂ�&ŝŐƵƌĂ�ϱ�Ġ�ƉĂƌĂ�ƐĞƌ�ĐƌŝĂĚĂ͕�ŽŶĚĞ�ƚĞŵŽƐ�Ž�ŶŽŵĞ�ĚŽ�ƉƌŽũĞƚŽ�Ğŵ�ƉƌŝŵĞŝƌŽ�ŶşǀĞů͕�ůŽŐŽ
Ğŵ�ƐĞŐƵŝĚĂ�ĂůŐƵŵĂƐ�ĚŝƌĞƚŝǀĂƐ�ƋƵĞ�ƉŽĚĞŵŽƐ�ƉĂƐƐĂƌ�ƉĂƌĂ�Ž�Yƚ͕�Ğ�^ŽƵƌĐĞƐ�Ğ�,ĞĂĚĞƌƐ͕�ƋƵĞ�ƐĆŽ�ŽƐ�ĚŝƌĞƚſƌŝŽƐ�ĚŽƐ
ĂƌƋƵŝǀŽƐ�ĨŽŶƚĞƐ͘�EĞƐƚĞ�ĐĂƐŽ�ĂƉĞŶĂƐ�^ŽƵƌĐĞƐ�ĐŽŵ�Ž�ŵĂŝŶ͘ĐƉƉ�ũĄ�ĐƌŝĂĚŽ�ƉĞůŽ�Yƚ͘
�
WĂƌĂ�ĞŶƚĞŶĚĞƌ�ŵĞůŚŽƌ�ƐŽďƌĞ�ĞƐƚĂ�ĞƐƚƌƵƚƵƌĂ�Ğ�ĂƐ�ŽƉĕƁĞƐ�ƋƵĞ�ƐƵƌŐŝƌĂŵ�ŶĂ�ĐŽůƵŶĂ�ĂŽ�ůĂĚŽ͕�ǀĞũĂ�Ž�ƉŽƐƚ�Yƚϱ� Ͳ
�ŽŶŚĞĐĞŶĚŽ�Ƶŵ�ǀĞƌĚĂĚĞŝƌŽ�ĐĂŶŝǀĞƚĞͲƐƵŝĕŽ�΀Ϯ΁͘
�
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� ����
&ŝŐƵƌĂ�ϱ�Ͳ�dĞůĂ�ŝŶŝĐŝĂů�Yƚ��ŽŶƐŽůĞ
�
DĂƌĂǀŝůŚĂ͕� ĞƐƚĂŵŽƐ� ĐŽŵ� Ă� /��� ŝŶƐƚĂůĂĚĂ͕� ƉƌŽũĞƚŽ� ĐƌŝĂĚŽ� Ğ� Ž� ƉĂƐƐŽ� ƐĞŐƵŝŶƚĞ� ƐĞƌĄ� ĐŽŶĨŝŐƵƌĂƌ� ƉĂƌĂ
ĐŽŵƵŶŝĐĂĕĆŽ�ƐĞƌŝĂů�Ğ�ĐƌŝĂƌ�ŶŽƐƐŽ�ƉƌŝŵĞŝƌŽ�ƉƌŽŐƌĂŵĂ͘
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� ����
�
�
Plugin QtSerialPort
�
�ĂƐŽ�ǀŽĐġ�ƚĞŶŚĂ�ƌĞĂůŝnjĂĚŽ�Ă�ŝŶƐƚĂůĂĕĆŽ�ĚŽ�Yƚϱ�ĐŽŶĨŽƌŵĞ�ŵĞŶĐŝŽŶĞŝ�ŶŽ�Yƚϱ�Ͳ�/ŶƐƚĂůĂĕĆŽ�Ğŵ�ĂŵďŝĞŶƚĞ�>ŝŶƵdž
΀ϯ΁͕�ǀŽĐġ�ƐĞůĞĐŝŽŶŽƵ�ƋƚƐĞƌŝĂůƉŽƌƚ�Ğ�ĞƐƚĂƌĄ�ƚƵĚŽ�ĐĞƌƚŽ͘�sŽĐġ�ƉŽĚĞ�ŽďƚĞƌ�ŝŶĨŽƌŵĂĕƁĞƐ�ŶŽ�ůŝŶŬ�Yƚ^ĞƌŝĂůWŽƌƚ�΀ϰ΁͘
WƌŝŵĞŝƌŽ�ŝƌĞŵŽƐ�ĂĚŝĐŝŽŶĂƌ�ŶŽ�ĂƌƋƵŝǀŽ�͘ƉƌŽ�Ă�ƐĞŐƵŝŶƚĞ�ĞŶƚƌĂĚĂ͘
�
Yƚϱ
�
Yƚϰ
�
�ŽŵŽ�ƐĞŝ�ƋƵĞ�ŵƵŝƚŽƐ�ĚĞƐĞŶǀŽůǀĞĚŽƌĞƐ�ĂŝŶĚĂ�ƵƚŝůŝnjĂŵ�Ž�Yƚϰ�;ϰ͘ϴͿ�ƚĞŶƚĂƌĞŝ�ŐƵŝĂƌ�Ž�ƉŽƐƚ�ƉĂƌĂ�ĂƐ�ĚƵĂƐ�ǀĞƌƐƁĞƐ͘
EŽ�ĐĂƐŽ�ĚŽ�Yƚϱ�ƉŽĚĞ�ƐĞƌ�ǀŝƐƚŽ�ŶĂ�&ŝŐƵƌĂ�ϲ͘
�
1 QT += serialport
1 CONFIG += serialport
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� ����&ŝŐƵƌĂ�ϲ�Ͳ��ŽŶĨŝŐƵƌĂŶĚŽ�Yƚ^ĞƌŝĂůWŽƌƚ�ŶŽ�͘ƉƌŽ
�
K�ƉƌſdžŝŵŽ�ƉĂƐƐŽ�Ġ�ŝŶĐůƵŝƌ�ĂƐ�ďŝďůŝŽƚĞĐĂƐ�ďĄƐŝĐĂƐ�ƉĂƌĂ�ƚƌĂďĂůŚĂƌ�ĐŽŵ�Ž�Yƚ^ĞƌŝĂůWŽƌƚ͕�ĐŽŵŽ�ƉŽĚĞ�ƐĞƌ�ǀŝƐƚŽ�ŶĂ
&ŝŐƵƌĂ�ϳ͕�ůŝŶŚĂƐ�Ϯ�Ğ�ϯ͘
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
�
&ŝŐƵƌĂ�ϳ�Ͳ��ĚŝĐŝŽŶĂŶĚŽ�ĂƐ�ďŝďůŝŽƚĞĐĂƐ�ĚŽ�Yƚ^ĞƌŝĂůWŽƌƚ�ĂŽ�ƉƌŽũĞƚŽ
�
sĂŵŽƐ� ĐŽŶƐƚƌƵŝƌ� Ž� ƉƌŽũĞƚŽ͕� ĐůŝĐĂŶĚŽ� Ğŵ��ƵŝůĚ� WƌŽũĞĐƚ� ;�ƚƌů� н� �Ϳ͕� Ž� şĐŽŶĞ� ĐŽŵ� Ƶŵ�ŵĂƌƚĞůŽ� ĚĞƐĞŶŚĂĚŽ͕� Ğ
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
ĚĞǀĞŵŽƐ�ƚĞƌ�ƵŵĂ�ƐĂşĚĂ��ŽŵƉŝůĞ�KƵƚƉƵƚ�ĐŽŵŽ�ĚĂ�&ŝŐƵƌĂ�ϳ͘
�
�ĂƐŽ� ŶĂ� ƐĂşĚĂ� �ŽŵƉŝůĞ� KƵƚƉƵƚ� ĂƉĂƌĞĕĂ� ĂůŐŽ� ĐŽŵŽ� ΗĞƌƌŽƌ͗� Yƚ^ĞƌŝĂůWŽƌƚͬYƚ^ĞƌŝĂůƉŽƌƚ͗� EŽ� ƐƵĐŚ� ĨŝůĞ� Žƌ
ĚŝƌĞĐƚŽƌLJΗ�ǀŽĐġ�ŶĆŽ�ƉŽƐƐƵŝ�Ž�Yƚ^ĞƌŝĂůWŽƌƚ�ŝŶƐƚĂůĂĚŽ�ŽƵ�ĐŽŶĨŝŐƵƌĂĚŽ�ĐŽƌƌĞƚĂŵĞŶƚĞ͘
�
�ĂƐŽ�ǀŽĐġ�ŶĆŽ�ƚĞŶŚĂ�ƚŝĚŽ�ƉƌŽďůĞŵĂƐ�ĐŽŵ�Ž��ƵŝůĚ�WƌŽũĞĐƚ�ŝŐŶŽƌĞ�Ă�ĞƚĂƉĂ�Ă�ƐĞŐƵŝƌ͕�/ŶƐƚĂůĂŶĚŽ�Ž�Yƚ^ĞƌŝĂůWŽƌƚ͕
ǀŝƐƚŽ�ƋƵĞ�ĂƉĞŶĂƐ�ƋƵĞŵ�ĞŶĐŽŶƚƌĂƌ�ĞƌƌŽƐ�ĚĞǀĞ�ƌĞĂůŝnjĄͲůĂ͘
�
�
Instalando o QtSerialPort
�
��ƷŶŝĐĂ�ĞdžŝŐġŶĐŝĂ�Ġ�ƉŽƐƐƵŝƌ�WĞƌů�ŝŶƐƚĂůĂĚŽ͕�ĚŽ�ŵĂŝƐ�ǀĂŵŽƐ�ƌĞƐŽůǀĞƌ�ŶĂƐ�ĞƚĂƉĂƐ�Ă�ƐĞŐƵŝƌ͘
�
WƌŝŵĞŝƌŽ͕�ĐůŽŶĞ�Ž�ƌĞƉŽƐŝƚſƌŝŽ�ĚŽ�ƋƚƐĞƌŝĂůƉŽƌƚ͗
�
�ŽŵŽ�ũĄ�ƉŽƐƐƵşŵŽƐ�Ž�Yƚϱ�ŝŶƐƚĂůĂĚŽ͕�ĂŐŽƌĂ�Ġ�Ɛſ�ĐŽŵƉŝůĂƌ͗
�
�ĂƐŽ�ĂƉĂƌĞĐĞƌ�Ž�ĞƌƌŽ�ΗƋŵĂŬĞ͗�ĐŽƵůĚ�ŶŽƚ�ĞdžĞĐ�ΖͬƵƐƌͬůŝďͬdžϴϲͺϲϰͲůŝŶƵdžͲŐŶƵͬƋƚϰͬďŝŶͬƋŵĂŬĞΖ͗�EŽ�ƐƵĐŚ�ĨŝůĞ�Žƌ
ĚŝƌĞĐƚŽƌLJΗ͕�ƉŽĚĞ�ƐĞƌ�ƋƵĞ�ǀŽĐġ�ƚĞǀĞ�ŽƵƚƌŽ�Yƚ�ŝŶƐƚĂůĂĚŽ͕�ŽƵ�ũĄ�ŝŶƐƚĂůŽƵ�ĂůŐŽ�ĐŽŵ�Ž�ŐĞƌĞŶĐŝĂĚŽƌ�ĚĞ�ƉĂĐŽƚĞƐ�ĚŽ
>ŝŶƵdž�Ğ�ƚĞǀĞ�ƋƵĞ�ƵƚŝůŝnjĂƌ�Ž�ƋŵĂŬĞ͘�EĞƐƚĞ�ĐĂƐŽ�Ġ�Ɛſ�ƵƐĂƌ�Ž�ŵĞƐŵŽ�ĐĂŵŝŶŚŽ�ŽŶĚĞ�Ž�Yƚϱ�ĞƐƚĄ�ŝŶƐƚĂůĂĚŽ͘
�
EŽ�ŵĞƵ�ĐĂƐŽ�ĞƐƚĄ�Ğŵ�ͬŚŽŵĞͬďƵĞŶŽͬYƚͬϱ͘ϰͬŐĐĐͺϲϰͬďŝŶͬƋŵĂŬĞ͘
�
1
2
3
4
5
6
7
8
$ cd /tmp && git clone git://gitorious.org/qt/qtserialport.git
Cloning into 'qtserialport'...
remote: Counting objects: 6869, done.
remote: Compressing objects: 100% (4103/4103), done.
remote: Total 6869 (delta 4667), reused 3755 (delta 2719)
Receiving objects: 100% (6869/6869), 1.74 MiB | 462.00 KiB/s, done.
Resolving deltas: 100% (4667/4667), done.
Checking connectivity... done.
1 $ cd qtserialport && qmake qtserialport.pro
1
2
$ /home/bueno/Qt/5.4/gcc_64/bin/qmake qtserialport.pro
 
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
�
�ŵ�ƐĞŐƵŝĚĂ�ƚĞƌŵŝŶĞ�Ă�ŝŶƐƚĂůĂĕĆŽ͗
�
WƌŽŶƚŽ͘�sŽĐġ�ĞƐƚĂ�ĐŽŵ�Ž�Yƚ^ĞƌŝĂůWŽƌƚ�ŝŶƐƚĂůĂĚŽ͘�dĞƐƚĞ�Ž�ƉƌŽũĞƚŽ�ŶŽǀĂŵĞŶƚĞ�ĐůŝĐĂŶĚŽ�Ğŵ��ƵŝůĚ�WƌŽũĞĐƚ͘
�
�
Listando Portas
�
sĂŵŽƐ�ĂŐŽƌĂ�ĂĚŝĐŝŽŶĂƌ�ĂŽ�ŶŽƐƐŽ�ŵĂŝŶ͘ĐƉƉ͕�Ƶŵ�ĐſĚŝŐŽ�ƋƵĞ�ĚĞǀĞ�ůŝƐƚĂƌ�ĂƐ�ƉŽƌƚĂƐ�ƐĞƌŝĂŝƐ�ĚŽ�ĐŽŵƉƵƚĂĚŽƌ͘
�
3 Info: creating cache file /tmp/qtserialport/.qmake.cache
1 $ sudo make install
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <QCoreApplication>
#include <QtCore/QDebug>
#include <iostream>
 
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
 
 
QTextStream cinput(stdin);
QTextStream coutput(stdout);
 
/**
 * @brief LoadPorts
 * @return QStringList
 *
 */
QStringList LoadPorts(void);
 
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    QStringList portSerial;
    int myPortSerial;
    portSerial = LoadPorts();
    uint numPortSerial = portSerial.size();
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
�
EŽ�ĐſĚŝŐŽ�ĐƌŝĂĚŽ�ĂĐŝŵĂ�ƚĞŵŽƐ�Ă�ĨƵŶĕĆŽ�>ŽĂĚWŽƌƚƐ;Ϳ͕�ĐƵũĂ�ŝŵƉůĞŵĞŶƚĂĕĆŽ�Ġ�ďĂƐĞĂĚĂ�ŶŽ�ĞdžĞŵƉůŽ�ĚĂ�ƉƌſƉƌŝĂ
Yƚ� ΀ϰ΁͕� ŽŶĚĞ� ƵƚŝůŝnjĂŶĚŽ�Yƚ^ĞƌŝĂůWŽƌƚ/ŶĨŽ� ǀĂŵŽƐ� ŽďƚĞƌ� ŝŶĨŽƌŵĂĕƁĞƐ� ĚĞƚĂůŚĂĚĂƐ� ĚĂ� ƉŽƌƚĂ� ƐĞƌŝĂů͕� ĐŽŵŽ� ĂƐ
ƉŽƌƚĂƐ�ĚŝƐƉŽŶşǀĞŝƐ�Ğ�ŝŶĨŽƌŵĂĕƁĞƐ�ĐŽŵŽ�Ž�ŶŽŵĞ�ĚĂ�ƉŽƌƚĂ͕�ĨĂďƌŝĐĂŶƚĞ�Ğ�ĚĞƐĐƌŝĕĆŽ͘��ĂĚĂ�ƉŽƌƚĂ�ƐĞƌĄ�ĂĚŝĐŝŽŶĂĚĂ
ă�ǀĂƌŝĄǀĞů�ĚĞǀŝĐĞ͕�ƋƵĞ�Ġ�ƵŵĂ�^ƚƌŝŶŐ>ŝƐƚ͘
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
    coutput << "INDICE" << "\t\tDISPOSITIVO" << endl;
    if (numPortSerial > 0) {
        for(uint indice=0; indice<numPortSerial; indice++) {
            qDebug() << "[" << indice << "]\t\t" << portSerial.value(indice);
        }
    }
    else {
        qDebug() << "Nenhuma porta serial detectada!\n";
        exit(1);
    }
 
    exit(0);
 
    return a.exec();
}
 
 
QStringList LoadPorts(void)
{
    QStringList device;
 
    foreach (const QSerialPortInfo &devinfo, QSerialPortInfo::availablePorts()) {
 
        QSerialPort devserial;
        devserial.setPort(devinfo);
 
        if (devserial.open(QIODevice::ReadWrite)) {
            qDebug() << "\nPorta\t\t:" << devinfo.portName();
            qDebug() << "Descrição\t:" << devinfo.description();
            qDebug() << "Fabricante\t:" << devinfo.manufacturer() << "\n";
            device << devinfo.portName();
            devserial.close();
        }
    }
    return device;
 
}
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
�
sŽůƚĂŶĚŽ�ĂŽ�ŵĂŝŶ;Ϳ͕�ŶĞůĞ�ƚĞŵŽƐ�ŽƵƚƌĂ�Y^ƚƌŝŶŐ>ŝƐƚ�ƉŽƌƚ^ĞƌŝĂů�ƋƵĞ�ŝƌĄ�ƌĞĐĞďĞƌ�Ž�ƌĞƚŽƌŶŽ�ĚĞ�>ŽĂĚWŽƌƚƐ;Ϳ͕�Ğ�Ă
ƐĞƋƵġŶĐŝĂ�Ġ�ŵƵŝƚŽ�ƐŝŵƉůĞƐ͘�sĞƌŝĨŝĐĂŵŽƐ�Ž�ŶƷŵĞƌŽ�ĚŽ�ƉŽƌƚ^ĞƌŝĂů�ƋƵĞ�ƐĞƌĄ�Ă�ƋƵĂŶƚŝĚĂĚĞ�ĚĞ�ĚĞǀŝĐĞƐ͘�^Ğ�ĨŽƌ�Ϭ
ŶĞŶŚƵŵĂ�ƉŽƌƚĂ� ƐĞƌŝĂů� ĨŽŝ� ĚĞƚĞĐƚĂĚĂ͕� ĐĂƐŽ� ƐĞũĂ�ŵĂŝŽƌ� ƋƵĞ� Ϭ� ĂƐ� ƉŽƌƚĂƐ� ƐĆŽ� ŝŵƉƌĞƐƐĂƐ� ŶĂ� ƚĞůĂ� ĐŽŵ�ŽƐ� ƐĞƵƐ
ŶŽŵĞƐ�Ğ�ƐƵĂƐ�ŝŶĨŽƌŵĂĕƁĞƐ͘
�
�ůŝĐĂŶĚŽ�ŶŽ�ďŽƚĆŽ�ZƵŶ�ŽƵ�Ž�ĂƚĂůŚŽ�;�ƚƌů�н�ZͿ͕�ǀĂŵŽƐ�ŽďƚĞƌ�ƵŵĂ�ƐĂşĚĂ�ĐŽŵŽ�ĂďĂŝdžŽ͗
�
�ŐŽƌĂ�ĐŽŶĞĐƚĂŶĚŽ�Ƶŵ�ĚŝƐƉŽƐŝƚŝǀŽ�ƐĞƌŝĂů͕�ŶŽ�ŵĞƵ�ĐĂƐŽ�Ž��ƌĚƵŝŶŽ�hEK͗
�
�ĂƐŽ�ŵĂŝƐ�ĂůŐƵŵ�ĚŝƐƉŽƐŝƚŝǀŽ�ƋƵĞ�ĞŵƵůĞ�ĂƚƌĂǀĠƐ�ĚĂ�ƉŽƌƚĂ�h^��Ă�ƐĞƌŝĂů�ƐĞƌŝĂ�ĂĐƌĞƐĐĞŶƚĂĚŽ�şŶĚŝĐĞ�ĂĐŝŵĂ͘
�
�
Comunicando�com o Arduino�
�
YƵĞ�ƚĂů�ĂŐŽƌĂ�ĨĂnjĞƌ�ƵŵĂ�ĐŽŵƵŶŝĐĂĕĆŽ�ĚĞ�ǀĞƌĚĂĚĞ͍�WĂƌĂ� ŝƐƐŽ�ǀĂŵŽƐ�ĐŽŶƚĂƌ�ĐŽŵ�Ă�ĂũƵĚĂ�ĚŽ��ƌĚƵŝŶŽ�hEK͕
ŽŶĚĞ�ĂƚƌĂǀĠƐ�ĚĂ�ƐƵĂ�ƉŽƌƚĂ�h^��ŝƌĞŵŽƐ�ĐŽŵƵŶŝĐĂƌ�ǀŝĂ�ƐĞƌŝĂů�ĐŽŵ�Ž�Yƚ͘��ĂƐŽ�ŶĆŽ�ĐŽŶŚĞĕĂ�Ž��ƌĚƵŝŶŽ�ŽƵ�ƚĞǀĞ
ƉŽƵĐŽ�ĐŽŶƚĂƚŽ�ƉŽĚĞ�ĂĐĞƐƐĂƌ�ŽƐ�ƉŽƐƚƐ�ĚŽ�&ĄďŝŽ�^ŽƵnjĂ͕��ƌĚƵŝŶŽ�hEK�΀ϱ΁�Ğ��ƌĚƵŝŶŽ�Ͳ�WƌŝŵĞŝƌŽƐ�WĂƐƐŽƐ�΀ϲ΁͘
�
^ĞŐƵĞ�ĂďĂŝdžŽ�Ž�ĐſĚŝŐŽͲĨŽŶƚĞ�ĚŽ�ĨŝƌŵǁĂƌĞ�ĚŽ��ƌĚƵŝŶŽ͘�WŽĚĞƌŝĂ�ƐĞƌ�ƵŵĂ�ĂƉůŝĐĂĕĆŽ�ƐŝŵƉůĞƐ͕�ĐŽŵŽ�ƌĞĐĞďĞƌ�Ğ
ŝŵƉƌŝŵŝƌ�Ž�ĐĂƌĂĐƚĞƌĞ�ƌĞĐĞďŝĚŽ�ŽƵ�ĞŶǀŝĄͲůŽ�ĚĞ�ǀŽůƚĂ͕�ŵĂƐ�ƉĞŶƐĞŝ͕�ǀĂŵŽƐ�ĨĂnjĞƌ�ĂůŐŽ�ŵĂŝƐ�ůĞŐĂů͕�ƉŽƌƋƵĞ�ŶĆŽ�Ƶŵ
ƐŝŵƉůĞƐ�ƉƌŽŵƉƚ͍�KŶĚĞ�ƌĞĐĞďĞ�Ƶŵ�ĐŽŵĂŶĚŽ�Ğ�ƚƌĂƚĂ�Ž�ŵĞƐŵŽ�ƌĞƉŽƌƚĂĚŽ�Ă�ƐĂşĚĂ�ŽƵ�Ƶŵ�ĞƌƌŽ͕�Ğ�ŶŽ�ŶŽƐƐŽ�ĐĂƐŽ
Ž�Yƚ�ƐĞƌĄ�ŶŽƐƐŽ�ƉƌŽŵƉƚ͘
�
1
2
3
Starting /tmp/build-comunicacao_serial_qt_console-Desktop_Qt_Qt_Version_GCC_64bit-Debug/comunicacao_serial_qt_console
INDICE DISPOSITIVO
Nenhuma porta serial detectada!
1
2
3
4
5
6
7
8
Starting /tmp/build-comunicacao_serial_qt_console-Desktop_Qt_Qt_Version_GCC_64bit-Debug/comunicacao_serial_qt_console
 
Porta : "ttyACM0"
Descrição : "Arduino Uno"
Fabricante : "Arduino  www.arduino.cc " 
 
INDICE DISPOSITIVO
[ 0 ] "ttyACM0"
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
sĂŵŽƐ�ĐŽŵĞĕĂƌ�ĐŽŵ�Ž�ĐſĚŝŐŽͲĨŽŶƚĞ�ĚŽ��ƌĚƵŝŶŽ͘
�
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#define FW_VERSAO  1.0
#define HW_MODELO "ARDUINOUNO"
 
 
String serialCmd = "";
bool flagControlRxSerial = false;
 
 
void setup() {
    Serial.begin(9600);
    
    /* Limitando a 10 bytes para nossos comandos */
    serialCmd.reserve(10);
}
 
 
void loop() {
  
  /* Estarou sempre verificando se acabou a recepcao da serial,
     esta variavel flagControlRxSerial se tornara true para isso.
  */
    if (flagControlRxSerial) {
        if( serialCmd == "versao\n" ) {
            Serial.print("\tFirmware: ");
            Serial.print(FW_VERSAO);
        }
        else if ( serialCmd == "hardware\n") {
            Serial.print("\tPlaca : ");
            Serial.print(HW_MODELO);
        }
        else if ( serialCmd == "help\n" || serialCmd == "?\n") {
            Serial.print("\tComandos : \n\thardware - Modelo atual de placa\n\tversao - Versao atual do firmware"
        }        
        else if (serialCmd == "\n") {
            Serial.print("\n");
        }
        else {
            Serial.print("\t* Comando invalido *");
        }  
        
        /* Resetando valores para nova recepcao */
        serialCmd = "";
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
�
K�ĐſĚŝŐŽ�ĞƐƚĄ�ďĞŵ�ĐŽŵĞŶƚĂĚŽ�ƉĂƌĂ�ĂũƵĚĂƌ�Ă�ĐŽŵƉƌĞĞŶƐĆŽ͕�Ž�ĨŽĐŽ�Ġ�ĂƚĞŶĚĞƌ�ŽƐ�ĐŽŵĂŶĚŽƐ�ŚĂƌĚǁĂƌĞ͕�ǀĞƌƐĂŽ
Ğ�ŚĞůƉ�ƋƵĞ�ƐĆŽ�ƌĞĐĞďŝĚŽƐ�ƉĞůĂ�ƐĞƌŝĂů�Ğ�ŝŵƉƌŝŵŝƌ�ĞƐƚĂƐ�ŝŶĨŽƌŵĂĕƁĞƐ�ŶĂ�ƚĞůĂ�Ğ�ƚƌĂƚĂƌ�Ă�ĐŽŵƵŶŝĐĂĕĆŽ�ĐŽŵŽ�Ƶŵ
ƉƌŽŵƉƚ͘
�
�� ŶŽǀŝĚĂĚĞ� ĂƋƵŝ� Ġ� Ž� ƐĞƌŝĂů�ǀĞŶƚ;Ϳ� ΀ϳ΁͕� ƋƵĞ� ĂŶƚĞƐ� ĚĂ� ŝŶƚĞƌĂĕĆŽ� ĚĞ� ĐĂĚĂ� ůŽŽƉ;Ϳ� ǀĞƌŝĨŝĐĂ� ƐĞ� ĂůŐƵŵ� ďLJƚĞ� ĨŽŝ
ƌĞĐĞďŝĚŽ͕�Ğ�ĞǀĞŶƚƵĂůŵĞŶƚĞ� ŝŶĚŝĐĂ�Ă� ƌĞĐĞƉĕĆŽ�ĚĞ�Ƶŵ�ĐŽŵĂŶĚŽ͘�WĂƌĂ�ĐŽŵƉƌĞĞŶĚĞƌ�ŵĞůŚŽƌ�Ž�ƐĞƌŝĂů�ǀĞŶƚ;Ϳ
ǀĞũĂ�Ž�ĂƌƚŝŐŽ��ŶƚĞŶĚĞŶĚŽ�Ğ�ƵƐĂŶĚŽ�ƐĞƌŝĂů�ǀĞŶƚ;Ϳ�΀ϴ΁͘
�
�ŐŽƌĂ�Ă�ŝŵƉůĞŵĞŶƚĂĕĆŽ�ŶŽ�ůĂĚŽ�ĚŽ�Yƚϱ͕�ǀŽĐġ�ƉŽĚĞ�ĞĚŝƚĂƌ�Ž�ŵĂŝŶ͘ĐƉƉ�ĚŽ�ƉƌŽũĞƚŽ�ĂƚƵĂů�ŽƵ�ĐƌŝĂƌ�ŽƵƚƌŽ�ƉƌŽũĞƚŽ
ƉĂƌĂ� ŝƐƐŽ�Ğ�ĂĚŝĐŝŽŶĂƌ�Ž�ĐſĚŝŐŽ�ĂďĂŝdžŽ�ĂŽ�ƐĞƵ�ŵĂŝŶ͘ĐƉƉ͘�>ĞŵďƌĂŶĚŽ͕�Ġ�ĐůĂƌŽ͕�ĚĞ�ĞĚŝƚĂƌ�Ž�ĂƌƋƵŝǀŽ� ͘ƉƌŽ͕�ƉĂƌĂ
ĐƌŝĂƌ�Ƶŵ�ŶŽǀŽ�ƉƌŽũĞƚŽ͘
�
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
        flagControlRxSerial = false;
  }
}
 
 
void serialEvent() {
    /* Loop verificando se algum byte esta disponivel na serial */
    while (Serial.available()) {
        
      /* O que chegar pela serial  feito um typecast de char para a variavel caractere */
        char caractere = (char)Serial.read(); 
        
        /* Nossa variavel caractere eh concatenada a nossa variavel serialCmd que eh uma String */
        serialCmd += caractere;
    
        /* Se chegar um CR, nova linha, nossa flag de controle (flagsControlRxSerial) passa para true
           e no loop principal ja podera ser utilizada
        */
        if (caractere == '\n') {
            flagControlRxSerial = true;
        } 
    }
}
1
2
3
4
#include <QCoreApplication>
#include <QtCore/QDebug>
#include <iostream>
 
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
 
/* Vou criar cinput e couput como globais para utilizar em Debugs
 * nas funções de leitura e escrita da porta serial
 *
 * ReadPort(QSerialPort *port);
 * WritePort(QSerialPort *port, const QByteArray &writeData)
 *
 */
QTextStream cinput(stdin);
QTextStream coutput(stdout);
 
 
 
/**
 * @brief ReadPort
 * @param port
 * @return
 */
QByteArray ReadPort(QSerialPort *port);
 
/**
 * @brief WritePort
 * @param port
 * @param writeData
 */
void WritePort(QSerialPort *port, const QByteArray &writeData);
 
 
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
 
    /* Estrutura de variaveis locais */
    QByteArray saidaCmdSerial;      // Dados recebidos pela serial
    QByteArray enviarCmdSerial;     // Comando a ser enviado pela serial
    QStringList argumentList;       // Parametros passados na execucao da apicação
    int argumentCount;              // Numero de argumentos passados
    QSerialPort serialPort;         // Novo objecto QSerialPort
    QString serialPortName;         // Variavel que ira receber o caminho da porta serial
    int serialPortBaudRate;         // Variavel que ira receber o baudrate da conexão
 
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
    /* Capturando o numero de parametro passado */
    argumentCount = QCoreApplication::arguments().size();
 
    /* Carregando em um StringList os parametros passados */
    argumentList = QCoreApplication::arguments();
 
 
    /* Verifica se pelo um parametro foi passado, no caso o tty da serial, por exemplo:
     * ttyUSB0, ttyACM0 em caso de duvidas verifique no /dev/tty*
     */
    if (argumentCount == 1) {
        coutput << QObject::tr("Uso: %1 <portaserial> [baudrate]").arg(argumentList.first
        return 1;
    }
 
 
    /* Se passou na etapa acima então a porta serial foi passada e a mesma
     * será carregada em serialPortName e logo em seguida configurada no
     * serialPort.setPortName();
     */
    serialPortName = argumentList.at(1);
    serialPort.setPortName(serialPortName);
 
 
    /* O segundo parametro esperado é o BaudRate, caso não seja passado nenhum automaticamente ira receber
     * 9600, caso contrario ira configurar serialPort.setBaudRate() com o valor passado, e sera armazenado
     * na variavel serialPortBaudRate
     */
    serialPortBaudRate = (argumentCount > 2) ? argumentList.at(2).toInt() : QSerialPort
    serialPort.setBaudRate(serialPortBaudRate, QSerialPort::AllDirections);
 
 
    /* Configuração Padrão e que pode ser configurada de acordo com sua necessidade, no caso estou usando:
     *      Databits    8               (8)
     *      FlowControl NoFlowControl   ( Sem controle de fluxo)
     *      Parity      NoParity        (Sem Paridade)
     *      StopBits    OneStop         (1)
     */
    serialPort.setDataBits(QSerialPort::Data8);
    serialPort.setFlowControl(QSerialPort::NoFlowControl);
    serialPort.setParity(QSerialPort::NoParity);
    serialPort.setStopBits(QSerialPort::OneStop);
 
 
    /* Proximo passo é realizado a conexão, onde irei abrir o device especificado com as devidas configurações
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
     * e no caso abaixo, estou dizendo que para Leitura+Escrita, e as opções são:
     *
     *  QIODevice::WriteOnly        : Apenas escrita no device
     *  QIODevice::ReadOnly         : Apenas leitura do device
     *  QIODevice::ReadWrite        : Leitura e Escrita do device
     *
     *  Existem outras flags mas nesta aplicação não serão abordadas.
     *  Em caso de falha, um erro é reportado natela e a aplicação encerrada.
     */
    if (!serialPort.open(QIODevice::ReadWrite)) {
        coutput << QObject::tr("Falha ao abrir porta %1, erro: %2").arg(serialPortName)
        return 1;
    }
 
 
    /* LOOP PRINCIPAL DA APLICAÇÂO */
    while(true) {
 
        /* Mensagem para aparecer no terminal, dando cara de prompt */
        coutput << "prompt :> " <<  flush;
 
        /* O que for digitar no stdin sera capturado e guardado em enviarCmdSerial*/
        enviarCmdSerial = cinput.readLine().toUtf8();
 
 
        /* Verifica se foi digitado algum comando e ignora \n e o exit */
        if( (enviarCmdSerial != "exit") && (enviarCmdSerial.length() > 0) ) {
 
            /* Atravez da função WritePort(); envia o endereço do objeto serialPort
             * e o comando a ser escrito na serial
             */
            WritePort(&serialPort,enviarCmdSerial+"\n");
 
            /* Atravez da função ReadPort() é passado o endereço do objecto serialPort
             * e a variavel saidaCmdSerial aguarda o retorno da resposta ao comando enviado
             */
            saidaCmdSerial = ReadPort(&serialPort);
 
            /* Imprimo na tela o comando recebido */
            coutput << saidaCmdSerial << endl;
 
            /* Limpo o conteudo do variavel dos comandos enviados */
            /* Agora é um if() que faz o controle nao mais um while() e a
             * funcao de clear() nao é mais necessaria
             */
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
            //enviarCmdSerial.clear();
        }
 
        /* Caso digou exit entra aqui */
        if(enviarCmdSerial == "exit") {
            /* Mensagem padrao que ira aparecer no terminal quando digitar exit */
            coutput << "Encerrando prompt Qt <> Arduino :)" << endl;
            return false;
        }
    }
 
    /* Fechando a conexão serial */
    serialPort.close();
 
    /* Saindo com sucesso da aplicação */
    exit(0);
 
    return a.exec();
}
 
 
 
/**
 * @brief ReadPort
 * @param port
 * @return Bytes com os dados da comunicação serial
 *
 * Deve receber apenas o endereço do objeto QSerialPort
 * e ira devolver os dados recebidos da comunicação serial
 */
QByteArray ReadPort(QSerialPort *port)
{
    QByteArray readData;
    /* Vou aguardar X ms, no caso 75, para ver os dados disponiveis e começar a leitura
        (-1) não possuira timeout.
    */
    while (port->waitForReadyRead(75)) {
        readData.append(port->readAll());
    }
 
    /* Descomentar a linha abaixo apenas para debug da recepçao serial */
    //coutput << "RX data :> " << readData <<  endl;
    return readData;
}
 
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
�
EŽ� ĐſĚŝŐŽ� ĂĐŝŵĂ͕� ĂĐŚŽ� ƋƵĞ� ƉŽƐƐŽ� ƐĞƌ� ďĞŵ� ďƌĞǀĞ� ƉŽŝƐ� Ğŵ� ĐĂĚĂ� ĞƚĂƉĂ� ĞƵ� ĂĚŝĐŝŽŶĞŝ� Ƶŵ� ĐŽŵĞŶƚĄƌŝŽ͘� �Ɛ
ĨƵŶĕƁĞƐ� ĚĞ� ůĞƌ� Ğ� ĞƐĐƌĞǀĞƌ� ŶĂ� ƉŽƌƚĂ� ƐĞƌŝĂů� ƵƐĂŶĚŽ� Ž�Yƚ^ĞƌŝĂůWŽƌƚ� Ġ� ďĂƐĞĂĚŽ� ŶĂ� ŝŵƉůĞŵĞŶƚĂĕĆŽ� ĞdžĞŵƉůŽ
ŶŽ�ƐŝƚĞ�ĚŽ�Yƚ�΀ϵ΁΀ϭϬ΁͕�Ğ�ŵĂŝƐ�ĚĞƚĂůŚĞƐ�ƐŽďƌĞ�ŵĂŶŝƉƵůĂĕĆŽ�ĚĞ�/K�ŶŽ�Yƚ�ƉŽĚĞ�ƐĞƌ�ǀŝƐƚŽ�ŶĂ�ƐĞƐƐĆŽ�Y/K�ĞǀŝĐĞ
΀ϭϭ΁͕�ƌĞĐŽŵĞŶĚŽ�ĞƐƚĞ�ůŝŶŬ�ƉĂƌĂ�ĐŽŶŚĞĐĞƌ�ŵĞůŚŽƌ�ĂƐ�ŽƉĕƁĞƐ�Ğ�ĨůĂŐƐ�ƋƵĞ�ƉŽĚĞŵ�ƐĞƌ�ƵƚŝůŝnjĂĚĂƐ͘
�
sĂŵŽƐ�ĐŽŶƐƚƌƵŝƌ�ŶŽƐƐĂ�ĂƉůŝĐĂĕĆŽ�Ğ�ĞdžĞĐƵƚĂͲůĂ͘�WŽĚĞ�ĐůŝĐĂƌ�Ğŵ��ƵŝůĚ�WƌŽũĞĐƚ�;�ƚƌů�н��Ϳ͕�Ğ�ĐŽŵŽ�ƵƐĞŝ�Ž�ĚŝƌĞƚſƌŝŽ
ͬƚŵƉ�ƉĂƌĂ�Ž�ƉƌŽũĞƚŽ�ǀŽƵ�ĂĐĞƐƐĄͲůŽ�ƉŽƌ�ĞƐƐĞ�ĐĂŵŝŶŚŽ͘�sŽĐġ�ĚĞǀĞƌĄ�ƚƌŽĐĂƌ�ƉĞůŽ�ĐĂŵŝŶŚŽ�ƋƵĞ�ĞƐĐŽůŚĞƵ͘�sĂŵŽƐ
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
 
/**
 * @brief WritePort
 * @param port
 * @param writeData
 *
 * Recebe o endereço do objeto QSerialPort usado e o ByteArray do comandos
 * a ser enviado e escreve na porta serial.
 *
 */
void WritePort(QSerialPort *port, const QByteArray &writeData)
{
 
    /* Descomentar a linha abaixo apenas para debug da transmissão serial */
    //coutput << "TX data :>" << writeData << endl;
 
    /* Baseado no endereço do QSerialPort recebido em *port, eu vou escrever na serial
     * com port->write() e passando como parametro o QByteArray writeData e como retorno
     * ele irá me dar o numero de bytes enviados
     */
    qint64 bytesWritten = port->write(writeData);
 
    /* Faço apenas uma checagem basica onde se retornou -1 deu erro ao enviar os dados e se retornar um numero
     * diferente do retornado alguma informação foi perdida durante a escrita
     */
    if (bytesWritten == -1) {
        coutput << QObject::tr("Falha ao escrever os dados na porta %1, error: %2").arg
        QCoreApplication::exit(1);
    } else if (bytesWritten != writeData.length()) {
        coutput << QObject::tr("Falha ao escrever uma parte dos dados na porta %1, error: %2"
        QCoreApplication::exit(1);
    }
 
}
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
ĞdžĞĐƵƚĂƌ�Ă�ĂƉůŝĐĂĕĆŽ͗
�
YƵĞ�ůĞŐĂů͕�ŶĂ�ƐĂşĚĂ�ĚŽƐ�ĐŽŵĂŶĚŽƐ�ĂĐŝŵĂ�ƉŽĚĞŵŽƐ�ǀĞƌ�ƋƵĞ�ƋƵĂŶĚŽ�ĞdžĞĐƵƚĞŝ�ƐĞŵ�Ž��ƌĚƵŝŶŽ�ĐŽŶĞĐƚĂĚŽ�ĚĞƵ
Ƶŵ�ĂǀŝƐŽ�ŶĂ�ƚĞůĂ�ĚĂ�ŵĂŶĞŝƌĂ�ĐŽƌƌĞƚĂ�ĚĞ�ĞdžĞĐƵĕĆŽ͘�>ŽŐŽ�Ğŵ�ƐĞŐƵŝĚĂ�ƉĂƐƐĞŝ�ƵŵĂ�ƉŽƌƚĂ�ŝŶĐŽƌƌĞƚĂ�Ğ�ĨŽŝ�ĚĂĚŽ�Ž
ĞƌƌŽ� ĚĞ� ƋƵĞ� ŶĆŽ� ĨŽŝ� ƉŽƐƐşǀĞů� Ăďƌŝƌ� Ž� ĚŝƐƉŽƐŝƚŝǀŽ͘� >ŽŐŽ� Ğŵ� ƐĞŐƵŝĚĂ͕� ĐŽŵ� Ă� ƉŽƌƚĂ� ĐŽƌƌĞƚĂ͕� ĨŽŝ� ƌĞĂůŝnjĂĚĂ� Ă
ĐŽŶĞdžĆŽ�Ğ�ũĄ�ĂƉĂƌĞĐĞƵ�Ă�ĞŶƚƌĂĚĂ�ĚŽ�ŶŽƐƐŽ�ƉƌŽŵƉƚ͕�ĂŐƵĂƌĚĂŶĚŽ�ŽƐ�ĐŽŵĂŶĚŽƐ͘�EŽƚĞ�ƋƵĞ�ƐĞ�ŶĆŽ�ƉĂƐƐĂƌ�Ƶŵ
ƐĞŐƵŶĚŽ�ƉĂƌąŵĞƚƌŽ͕�ƋƵĞ�Ġ�Ž�ďĂƵĚƌĂƚĞ͕�Ġ�ĂƐƐƵŵŝĚŽ�ƉŽƌ�ƉĂĚƌĆŽ�ϵϲϬϬ�ďƉƐ͘
�
�Žŵ� ŽƐ� ĐŽŵĂŶĚŽƐ� ĐŽƌƌĞƚŽƐ� ŚĞůƉ͕� ŚĂƌĚǁĂƌĞ� Ğ� ǀĞƌƐĂŽ� ĨŽƌĂŵ� ƌĞƚŽƌŶĂĚĂƐ� ĂƐ� ĚĞǀŝĚĂƐ� ŝŶĨŽƌŵĂĕƁĞƐ� Ğ� ŽƐ
ĐŽŵĂŶĚŽƐ�ŝŶĞdžŝƐƚĞŶƚĞƐ�ƵŵĂ�ŵĞŶƐĂŐĞŵ�ĚĞ�ĞdžĐĞĕĆŽ͘�^Ğ�ŐŽƐƚŽƵ�ĚĂ�ŝĚĞŝĂ͕�ǀŽĐġ�ƉŽĚĞ�ĞƐƚĞŶĚĞƌ�ĂƐ�ĨƵŶĕƁĞƐ�ĚŽ
Yƚ�ĂŐŽƌĂ͕� ĐŽŵŽ�ƉŽƌ�ĞdžĞŵƉůŽ�ŶŽ�ƋƵĞ�ĞƵ�ĚŝŐŝƚĞŝ�Ž� ĐŽŵĂŶĚŽ�ĐůĞĂƌ�Ğ�ŶĆŽ�ĂĐŽŶƚĞĐĞƵ�ŶĂĚĂ͕�ƉŽĚĞƌŝĂ� ĨĂnjĞƌ�ĚĞ
ůŝŵƉĂƌ�Ă�ƚĞůĂ�ĚŽ�ƚĞƌŵŝŶĂů͕�ƉŽĚĞƌŝĂ�ĂĚŝĐŝŽŶĂƌ�Ƶŵ�ƚŝŵĞŽƵƚ�ĐĂƐŽ�ĚĞƉŽŝƐ�ĚĞ�ĂůŐƵŵ�ƚĞŵƉŽ�ŶĞŶŚƵŵ�ĐŽŵĂŶĚŽ�ĨŽƌ
ĚŝŐŝƚĂĚŽ͘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/tmp/build-comunicacao_serial_qt_console $ ls -1
comunicacao_serial_qt_console
main.o
Makefile
/tmp/build-comunicacao_serial_qt_console $ ./comunicacao_serial_qt_console 
Uso: ./comunicacao_serial_qt_console <portaserial> [baudrate]
/tmp/build-comunicacao_serial_qt_console $ ./comunicacao_serial_qt_console /dev/ttyACM1
Falha ao abrir porta /dev/ttyACM1, erro: No such file or directory
/tmp/build-comunicacao_serial_qt_console $ ./comunicacao_serial_qt_console /dev/ttyACM0 
prompt :> 
prompt :> 
prompt :> info
* Comando invalido *
prompt :> help
Comandos : 
 hardware - Modelo atual de placa
 versao - Versao atual do firmware
prompt :> versao
Firmware: 1.00
prompt :> hardware
Placa : ARDUINO UNO
prompt :>
prompt :> clear
* Comando invalido *
prompt :> exit
Encerrando prompt Qt <> Arduino :)
/tmp/build-comunicacao_serial_qt_console $
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
�
K� Yƚ� Ġ� ŵƵŝƚŽ� ƉŽĚĞƌŽƐŽ� Ğ� ƵƐĞŝ� ŶĞƐƚĞ� ƉŽƐƚ� ĂƉĞŶĂƐ� ƵŵĂ� ƉĞƋƵĞŶĂ� ƉĂƌĐĞůĂ� ĚĞ� ƐĞƵ� ƉŽĚĞƌ� Ğ� ƚĂŵďĠŵ� ĚŽ
Yƚ^ĞƌŝĂůWŽƌƚ͕�ƋƵĞ�ƉŽĚĞŵŽƐ� ƚƌĂďĂůŚĂƌ� ĐŽŵ�ĐŽŶĞdžƁĞƐ� ĂƐƐşŶĐƌŽŶĂƐ�Ğ� ƐşŶĐƌŽŶĂƐ͘� �� ƐĞ� ǀŽĐġ� ũĄ� ƚƌĂďĂůŚŽƵ� ĐŽŵ
ƚĞƌŵŝŽƐ�΀ϭϮ΁�ĚŽ�>ŝŶƵdž�Ğŵ�ĂƉůŝĐĂĕƁĞƐ���ƉĂƌĂ�ĐŽŵƵŶŝĐĂĕĆŽ�ƐĞƌŝĂů͕�ĨŝƋƵĞ�ŵĂŝƐ�ĐŽŶĨŽƌƚĄǀĞů͕�Ġ�Ğŵ�ĐŝŵĂ�ĚĞůĞ�ƋƵĞ
Ž�Yƚ^ĞƌŝĂůWŽƌƚ�ĨŽŝ�ĞƐĐƌŝƚŽ�ƉĂƌĂ�ŵĂŶŝƉƵůĂƌ�Ž�ĚĞǀŝĐĞ͘
�
EŽ�ƉƌſdžŝŵŽ�ĂƌƚŝŐŽ͕�ĐŽŵ�Ž�Yƚϱ�ǀĂŵŽƐ�ǀĞƌ�ĐŽŵŽ�ƌĞĂůŝnjĂƌ�ĐŽŵƵŶŝĐĂĕĆŽ�ƐĞƌŝĂů�ƵƚŝůŝnjĂŶĚŽ�Ž�Yƚ^ĞƌŝĂůWŽƌƚ�Ɛſ�ƋƵĞ
ĚĞƐƚĂ�ǀĞnj�ƵƐĂŶĚŽ�ƵŵĂ�ŝŶƚĞƌĨĂĐĞ�ŐƌĄĨŝĐĂ�Ğ�Ž�ƋƵĞ�ŵĂŝƐ�ƉŽĚĞŵŽƐ�ĂŐƌĞŐĂƌ�ă�ŶŽƐƐĂ�ĂƉůŝĐĂĕĆŽ͘
�
�ƐƉĞƌŽ�ƋƵĞ�ƚĞŶŚĂŵ�ŐŽƐƚĂĚŽ͕�ĂƚĠ�Ă�ƉƌſdžŝŵĂ͊�
�
�
Referências
�
΀ϭ΁�ŚƚƚƉ͗ͬͬǁǁǁ͘ĞŵďĂƌĐĂĚŽƐ͘ĐŽŵ͘ďƌͬƉLJƚŚŽŶͲĂƌĚƵŝŶŽͲĐŽŵƵŶŝĐĂĐĂŽͲƐĞƌŝĂůͬ
΀Ϯ΁�ŚƚƚƉ͗ͬͬĐůĞŝƚŽŶďƵĞŶŽ͘ĐŽŵͬƋƚϱͲĐŽŶŚĞĐĞŶĚŽͲƵŵͲǀĞƌĚĂĚĞŝƌŽͲĐĂŶŝǀĞƚĞͲƐƵŝĐŽͬ
΀ϯ΁�ŚƚƚƉ͗ͬͬĐůĞŝƚŽŶďƵĞŶŽ͘ĐŽŵͬƋƚϱͲŝŶƐƚĂůĂĐĂŽͲĞŵͲĂŵďŝĞŶƚĞͲůŝŶƵdžͬ
΀ϰ΁�ŚƚƚƉƐ͗ͬͬƋƚͲƉƌŽũĞĐƚ͘ŽƌŐͬǁŝŬŝͬYƚ^ĞƌŝĂůWŽƌƚ�
΀ϱ΁�ŚƚƚƉ͗ͬͬǁǁǁ͘ĞŵďĂƌĐĂĚŽƐ͘ĐŽŵ͘ďƌͬĂƌĚƵŝŶŽͲƵŶŽͬ
΀ϲ΁�ŚƚƚƉ͗ͬͬǁǁǁ͘ĞŵďĂƌĐĂĚŽƐ͘ĐŽŵ͘ďƌͬĂƌĚƵŝŶŽͲƉƌŝŵĞŝƌŽƐͲƉĂƐƐŽƐͬ
΀ϳ΁�ŚƚƚƉ͗ͬͬĂƌĚƵŝŶŽ͘ĐĐͬĞŶͬdƵƚŽƌŝĂůͬ^ĞƌŝĂů�ǀĞŶƚ
΀ϴ΁�ŚƚƚƉ͗ͬͬĐůĞŝƚŽŶďƵĞŶŽ͘ĐŽŵͬĂƌĚƵŝŶŽͲĞŶƚĞŶĚĞŶĚŽͲĞͲƵƐĂŶĚŽͲŽͲƐĞƌŝĂůĞǀĞŶƚͬ
΀ϵ΁�ŚƚƚƉ͗ͬͬĚŽĐ͘Ƌƚ͘ŝŽͬƋƚͲϱͬƋƚƐĞƌŝĂůƉŽƌƚͲĐƌĞĂĚĞƌĂƐLJŶĐͲĞdžĂŵƉůĞ͘Śƚŵů
΀ϭϬ΁�ŚƚƚƉ͗ͬͬĚŽĐ͘Ƌƚ͘ŝŽͬƋƚͲϱͬƋƚƐĞƌŝĂůƉŽƌƚͲĐǁƌŝƚĞƌĂƐLJŶĐͲĞdžĂŵƉůĞ͘Śƚŵů
΀ϭϭ΁�ŚƚƚƉ͗ͬͬĚŽĐ͘Ƌƚ͘ŝŽͬƋƚͲϱͬƋŝŽĚĞǀŝĐĞ͘Śƚŵů
΀ϭϮ΁�ŚƚƚƉ͗ͬͬůŝŶƵdž͘ĚŝĞ͘ŶĞƚͬŵĂŶͬϯͬƚĞƌŵŝŽƐ
�ŽŵƵŶŝĐĂĕĆŽ�ƐĞƌŝĂů�ĐŽŵ��ƌĚƵŝŶŽ�ƵƚŝůŝnjĂŶĚŽ�Yƚϱ��ŽŶƐŽůĞ��ƉƉůŝĐĂƚŝŽŶ�ƉŽƌ��ůĞŝƚŽŶ��ƵĞŶŽ͘��ƐƚĂ�ŽďƌĂ�ĞƐƚĄ
ƐŽď�Ă�ůŝĐĞŶĕĂ��ƌĞĂƚŝǀĞ��ŽŵŵŽŶƐ��ƚƌŝďƵŝĕĆŽͲ�ŽŵƉĂƌƚŝůŚĂ/ŐƵĂů�ϰ͘Ϭ�/ŶƚĞƌŶĂĐŝŽŶĂů͘
Cleiton Bueno
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
7ZHHWDU 21
POSTS SIMILARES
MSP430 Driver Library
ǀĞũĂн
KůĄ�ĐĂƌŽ
ůĞŝƚŽƌ͊
�ŽŶƚŝŶƵĂŶĚŽ�ĐŽŵ�Ă�ƐĠƌŝĞ�ĚĞ�ĂƌƚŝŐŽƐ�ƐŽďƌĞ
Ă�ĨĂŵşůŝĂ�ĚĞ�ŵŝĐƌŽĐŽŶƚƌŽůĂĚŽƌĞƐ�D^WϰϯϬ͕
ŶĞƐƚĞ�ŝƌĞŵŽƐ�ĂƉƌĞƐĞŶƚĂƌ�Ž�D^WϰϯϬ��ƌŝǀĞƌ
>ŝďƌĂƌLJ͘���K�D^WϰϯϬ��ƌŝǀĞƌ͘͘͘�
Arduino - Controle de uma
lâmpada com LDR
ǀĞũĂн
EŽ�ĂƌƚŝŐŽ�ĂŶƚĞƌŝŽƌ�ĂƉƌĞƐĞŶƚĂŵŽƐ�ĐŽŵŽ
ůŝŐĂƌ�ƵŵĂ�ůąŵƉĂĚĂ����ƵƚŝůŝnjĂŶĚŽ�Ƶŵ�ƌĞůġ͘
�ĂŶĚŽ�ĐŽŶƚŝŶƵŝĚĂĚĞ�Ă�ĞƐƐĞ�ĂƐƐƵŶƚŽ͕�ĂŐŽƌĂ
ǀĂŵŽƐ�ĞdžƉůŝĐĂƌ�ĐŽŵŽ�ĂĐŝŽŶĂƌ
ĂƵƚŽŵĂƚŝĐĂŵĞŶƚĞ�ƵŵĂ�ůąŵƉĂĚĂ
ĐŽŶĨŽƌŵĞ͘͘͘�
Embedded Linux Build
Systems
ǀĞũĂн
K�ƵƐŽ�ĚŽ�>ŝŶƵdž�ĐŽŵŽ�ƐŝƐƚĞŵĂ�ŽƉĞƌĂĐŝŽŶĂů
Ğŵ�ĚŝƐƉŽƐŝƚŝǀŽƐ�ĞůĞƚƌƀŶŝĐŽƐ�ĞŵďĂƌĐĂĚŽƐ
ǀĞŵ�ĐƌĞƐĐĞŶĚŽ�ĐĂĚĂ�ǀĞnj�ŵĂŝƐ͘�WŽƌĠŵ͕�Ƶŵ
ƐŝƐƚĞŵĂ�ďĂƐĞĂĚŽ�Ğŵ�ůŝŶƵdž�ƉŽƐƐƵŝ�ĚŝǀĞƌƐŽƐ
ĂƌƚĞĨĂƚŽƐ�ĚĞ͘͘͘�
COMENTÁRIOS
�ƉĂŝdžŽŶĂĚŽ�ƉŽƌ�ƚĞĐŶŽůŽŐŝĂ�Ğ�ĞŶƚƵƐŝĂƐƚĂ�>ŝŶƵdž͕�ŵĂŝƐ�ĚĞ�ϭϬ�ĂŶŽƐ�ĚĞ�ĞdžƉĞƌŝġŶĐŝĂƐ�Ğŵ�>ŝŶƵdž͕�ĐƵƌŝŽƐŽ
ĂŽ�ŵƵŶĚŽ�ĞŵďĂƌĐĂĚŽ�ĚĞŶƚƌĞ�ĞůĞƐ�;�ƌĚƵŝŶŽ͕�ZĂƐƉďĞƌƌLJ�W/͕��ĞĂŐůĞ�ŽŶĞ��ůĂĐŬ�ĞŶƚƌĞ�ŽƵƚƌŽƐͿ
ĂƉƌŽdžŝŵĂĚĂŵĞŶƚĞ�ϴ�ĂŶŽƐ�ĚĞĚŝĐĂĚŽ�Ă�ƉƌŽŐƌĂŵĂĕĆŽ�ƋƵĞ�ǀĂƌŝĂ�ĞŶƚƌĞ�;�͕�WLJƚŚŽŶ͕�Yƚ�Ğ�ŵƵŝƚŽ�ƐŚĞůů
ƐĐƌŝƉƚͿ͘�'ƌĂĚƵĂĚŽ�Ğŵ��ŶŐĞŶŚĂƌŝĂ�ĚĂ��ŽŵƉƵƚĂĕĆŽ�ĐŽŵ�ġŶĨĂƐĞ�Ğŵ�ƌŽďſƚŝĐĂ�Ğ�ƐŝƐƚĞŵĂƐ
ĞŵďĂƌĐĂĚŽƐ͘�/ŶƚĞƌĞƐƐĞƐ�ĂƚƵĂŝƐ͗�ZdK^͕�<ĞƌŶĞů��ĞǀĞůŽƉŵĞŶƚ͕�/Žd͕�W�/�Ğ��ŶĚƌŽŝĚ͘
7Curtir 6KDUH
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
Links
^ŽďƌĞ�
�ǀĞŶƚŽƐ�
sşĚĞŽƐ�
�ŽǁŶůŽĂĚƐ�
>ŽŐŝŶ�
�ŽŶƚĂƚŽ�
Comunidade
^ĞũĂ��ŽůĂďŽƌĂĚŽƌ�
KƉŽƌƚƵŶŝĚĂĚĞƐ�
^ŝƚĞƐ�Ğ��ůŽŐƐ�
Publicidade
�ŶƵŶĐŝĞ��ŽŶŽƐĐŽ�
Fique por dentro
ZĞŐŝƐƚƌĞͲƐĞ�
EĞǁƐůĞƚƚĞƌ�
��&RPHQWiULRV (PEDUFDGRV �(QWUDU�
�&RPSDUWLOKDU⤤ 2UGHQDU�SRU�0HOKRU�DYDOLDGR
3DUWLFLSH�GD�GLVFXVVmR���
‡ 5HVSRQGHU ‡
0'.� ‡ ���PHVHV�DWUiV
0XLWR�ERP�R�DUWLJR��8WLOL]R�4W�D�DQRV��PDV�QXQFD�SHQVHL�HP�XVDU�HOH�SDUD�LQWHUDJLU�FRP
$UGXLQR��Mi�PH�UHQGHX�DOJXPDV�LGHLDV���
�
△ ▽
�
‡ 5HVSRQGHU ‡
&OHLWRQ�%XHQR� � ‡ ���PHVHV�DWUiV>�0'.
4XH�ERP�TXH�JRVWRX�0'.��2�4W�DEUH�PXLWDV�RSRUWXQLGDGHV�SDUD�FRPXQLFDomR��H
LVVR�IRL�DSHQDV�XPD�SHTXHQD�GHPRQVWUDomR��YRFr�QmR�SHUGH�SRU�HVSHUDU�SHOR�TXH
YHP�SRU�DH���
�
△ ▽
�
$VVLQDU�IHHG✉ $GLFLRQH�R�'LVTXV�QR�VHX�VLWH�$GG�'LVTXV�$GGd 3ULYDFLGDGHὑ�
�5HFRPPHQG
&RPSDUWLOKDU�¾
&RPSDUWLOKDU�¾
���������� &RPXQLFDomR�VHULDO�FRP�$UGXLQR�XWLOL]DQGR�4W��&RQVROH�$SSOLFDWLRQ���(PEDUFDGRV���6XD�IRQWH�GH�LQIRUPDo}HV�VREUH�6LVWHPDV�(PEDUFDGRV
KWWS���ZZZ�HPEDUFDGRV�FRP�EU�FRPXQLFDFDR�VHULDO�FRP�DUGXLQR�XWLOL]DQGR�TW��FRQVROH�DSSOLFDWLRQ� �����
�ĞƐĞŶǀŽůǀŝĚŽ�ƉŽƌ���ŵďĂƌĐĂĚŽƐ�Ͳ�dŽĚŽƐ�ŽƐ��ŝƌĞŝƚŽƐ�ZĞƐĞƌǀĂĚŽƐΠ

Continue navegando