Advertisement
Guest User

Untitled

a guest
Jan 15th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Latex 15.18 KB | None | 0 0
  1. \documentclass[12pt]{article}
  2. \usepackage[english]{babel}
  3. \usepackage{natbib}
  4. \usepackage{url}
  5. \usepackage[utf8x]{inputenc}
  6. \usepackage{amsmath}
  7. \usepackage{graphicx}
  8. \usepackage{enumitem}  
  9. \graphicspath{{images/}}
  10. \usepackage{parskip}
  11. \usepackage{listings}
  12. \usepackage{fancyhdr}
  13. \usepackage[noend]{algpseudocode}
  14. \usepackage{hyperref}
  15. \usepackage{vmargin}
  16. \usepackage{amssymb}
  17. \usepackage{fancyvrb}
  18. \usepackage[]{algorithm}
  19. \usepackage{fancyhdr, blindtext}
  20. \setmarginsrb{3 cm}{2.5 cm}{3 cm}{2.5 cm}{1 cm}{1.5 cm}{1 cm}{1.5 cm}
  21.  
  22. \makeatletter
  23. \def\BState{\State\hskip-\ALG@thistlm}
  24. \makeatother
  25. \lstset{
  26. basicstyle=\small\ttfamily,
  27. columns=flexible,
  28. breaklines=true,
  29. breakatwhitespace=true,
  30. }
  31.  
  32. \title{Relatório Trabalho Prático Nº2}                               % Title
  33. \author{Paulo Ferreira}                             % Author
  34. \date{\today}                                           % Date
  35.  
  36. \makeatletter
  37. \let\thetitle\@title
  38. \let\theauthor\@author
  39. \let\thedate\@date
  40. \makeatother
  41.  
  42.  
  43.  
  44. \pagestyle{fancy}
  45. \fancyhf{}
  46. \lhead{\fontsize{8}{12} \selectfont Trabalho Prático nº2}
  47. \rhead{\fontsize{8}{12} \selectfont 2017/2018}
  48. \chead{\fontsize{8}{12} \selectfont Arduíno: Sistema de controlo com recurso a tecnologias móveis}
  49. \cfoot{\thepage}
  50.  
  51. \begin{document}
  52.  
  53. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  54.  
  55. \begin{titlepage}
  56.     \centering
  57.    \vspace*{0.5 cm}
  58.     \includegraphics[scale = 0.4]{estig.jpg}\\[1.0 cm]  % University Logo
  59.     \textsc{\LARGE Comunicações Movéis}\\[2.0 cm]    % University Name
  60.     \textsc{\Large Engenharia Informática}\\[0.5 cm]               % Course Code
  61.     \textsc{\large 3º Ano}\\[0.5 cm]               % Course Name
  62.     \rule{\linewidth}{0.2 mm} \\[0.4 cm]
  63.         { \huge \bfseries \thetitle}\\
  64.     \rule{\linewidth}{0.2 mm} \\[1.5 cm]
  65.    
  66.     \begin{minipage}{0.4\textwidth}
  67.         \begin{flushleft} \large
  68.            \emph{Realizado por:} \\
  69.             \theauthor: a34960\\
  70.            José Couto: a34953\\
  71.            Miguel Rodrigues: a33884
  72.            
  73.            \end{flushleft}
  74.        
  75.             \end{minipage}~
  76.             \begin{minipage}{0.4\textwidth}
  77.             \begin{flushright} \large
  78.             \emph{Docente:}\\
  79.             Rui Fernandes
  80.         \end{flushright}
  81.     \end{minipage}\\[2 cm]
  82.    
  83.     {\large \thedate}\\[2 cm]
  84.  
  85.     \vfill
  86.    
  87. \end{titlepage}
  88.  
  89. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  90.  
  91. \tableofcontents
  92. \pagebreak
  93.  
  94. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  95. \section{Exercicío 1}
  96. \subsection{Exercício 1.1.}
  97. \subsubsection{Comentários}
  98. \begin{enumerate}
  99.   \item \textbf{Explicação do algoritmo:}  
  100.   \begin{enumerate}[label=(\roman*)]
  101.     \item Inicializar duas variavéis, uma para saber o número de Leds que estão na placa, e outra para saber a posição do Pin inicial.
  102.     \item Configurar os Pins como Output/Input com a função PinMode().
  103.     \item Dentro de um loop, onde o contador tem valor incial do pin inicial(statingPin) e incrementa ate o seu valor for menor que o (pin inicial - o número de Leds - 1), é acendido e desligado o pin com o valor do contador, a cada iteração, tendo um delay entre.
  104.     \item Dentro de outro loop, onde o contador tem valor incial (pin inicial - o número de Leds - 1) e diminui ate o seu valor for menor que o pin inicial(statingPin), é acendido e desligado o pin com o valor do contador, a cada iteração, tendo um delay entre.
  105.     \item É também configurado um Pin como input, onde é lido um valor através de um potenciometro. Esse valor tem como objetivo a definição do tempo do delay.
  106.   \end{enumerate}
  107. \end{enumerate}
  108.  
  109. \begin{algorithm}[H]
  110. \caption{Algoritmo Exercicio 1}\label{euclid}
  111. \begin{algorithmic}[1]
  112. \State $nLeds \gets \textit{Número de leds}$
  113. \State $startingPin \gets \textit{Pin Inicial}$
  114. \Function{setup}{}
  115. \For {$count=startingPin$ to $startingPin + nLeds -1$}
  116. \State $pinMode(count, OUTPUT); \gets \textit{Configura o Pin como Output}$
  117. \State $pinMode(A0, INPUT); \gets \textit{Configura o Pin como Input}$
  118. \EndFor
  119. \EndFunction
  120. \Function{loop}{}
  121. \State $timeDelay = analogRead(A0); \gets \textit{Usa a variavel para ler o valor do potenciómetro}$
  122. \For {$count=startingPin$ to $startingPin + nLeds - 1$}
  123. \State $digitalWrite(count, HIGH); \gets\textit{Acende o Led}$
  124. \State $delay(timeDelay);\gets\textit{Aguarda}$
  125. \State $digitalWrite(count, LOW);\gets\textit{Apaga o Led}$
  126. \State $delay(timeDelay);\gets\textit{Aguarda}$
  127. \EndFor
  128. \For {$count=startingPin + nLeds - 1$ to $startingPin$}
  129. \State \textit{Faz a mesma coisa que loop anterior}
  130. \EndFor
  131. \EndFunction
  132. \end{algorithmic}
  133. \end{algorithm}
  134. \subsubsection{Simulações}
  135. \begin{itemize}
  136. \item \href{https://www.dropbox.com/s/1ps53s1t02gwlvq/cm_exercico_1.3gp?dl=0}{Video link}
  137.  
  138. \item \href{https://www.dropbox.com/s/i1yv1gd18skfp32/out-1.ogv?dl=0}{Simulador online Video link}
  139. \end{itemize}
  140.  
  141. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  142. \newpage
  143. \subsection{Comentários e Simulações (Exercício 2)}
  144. \subsubsection{Comentários}
  145. \begin{enumerate}
  146.   \item \textbf{Explicação do algoritmo:}  
  147.   \begin{enumerate}[label=(\roman*)]
  148.     \item Inicializar duas variavéis, uma para saber o número de Leds que estão na placa, e outra para saber a posição do Pin inicial.
  149.     \item Configurar os Pins como Output/Input com a função PinMode().
  150.     \item Dentro de um loop, onde o contador tem valor incial do pin inicial(statingPin) e incrementa ate o seu valor for menor que o (pin inicial - o número de Leds - 1), se a cada determinada iteração o valor do contador for par é acendido e desligado o pin com o valor do contador(neste caso, somente os pares), a cada iteração, tendo um delay entre, caso contrário, se for impar, são acendidos todos os leds com o valor do contador, que é impar.
  151.     \item Dentro de outro loop, onde o contador tem valor incial (pin inicial - o número de Leds - 1) e diminui ate o seu valor for menor que o pin inicial(statingPin), se a cada determinada iteração o valor do contador for par é acendido e desligado o pin com o valor do contador(neste caso, somente os pares), a cada iteração, tendo um delay entre, caso contrário, se for impar, são acendidos todos os leds com o valor do contador, que é impar.
  152.     \item É configurado um Pin como input, onde é lido um valor através de um potenciometro. Esse valor tem como objetivo a definição do tempo do delay.
  153.     \item É também configurado um Pin como input, que servirá para regular a intensidade da luz dos leds na posições impares, sendo o seu valor lido através de outro potenciometro.
  154.   \end{enumerate}
  155. \end{enumerate}
  156.  
  157. \begin{algorithm}[H]
  158. \caption{Algoritmo Exercicio 2}\label{euclid}
  159. \begin{algorithmic}[1]
  160. \State $nLeds \gets \textit{Número de leds}$
  161. \State $startingPin \gets \textit{Pin Inicial}$
  162. \State $counter = 0 \gets \textit{Inicializa o contador a 0}$
  163. \Function{setup}{}
  164. \For {$count=startingPin$ to $startingPin + nLeds -1$}
  165. \State $pinMode(count, OUTPUT); \gets \textit{Configura o Pin como Output}$
  166. \State $pinMode(A0, INPUT); \gets \textit{Configura o Pin como Input}$
  167. \EndFor
  168. \EndFunction
  169. \Function{loop}{}
  170. \State $counter++; \gets \textit{Incremeta o valor do contador cada vez que o efeito knight rider acontece}$
  171. \State $value = analogRead(A5); \gets \textit{Valor do potenciómetro, para regular a intensidade}$
  172. \State $timeDelay = analogRead(A0); \gets \textit{Valor do potenciómetro, para regular o delay}$
  173. \State $value = map(value, 0, 1023, 0, 255); \gets \textit{Enquadra os valores lidos, no range pretendido}$
  174. \For {$count=startingPin$ to $startingPin + nLeds - 1$}
  175. \If {count é par}
  176. \State $digitalWrite(count, HIGH); \gets\textit{Acende o Led}$
  177. \State $delay(timeDelay);\gets\textit{Aguarda}$
  178. \State $digitalWrite(count, LOW);\gets\textit{Apaga o Led}$
  179. \State $delay(timeDelay);\gets\textit{Aguarda}$
  180. \Else
  181. \State $analogWrite(x, value); \gets\textit{Acende o Led, intensidade regulada por uma variável}$
  182. \EndIf
  183.  
  184. \EndFor
  185. \For {$count=startingPin + nLeds - 3$ to $startingPin$}
  186. \If {count é par}
  187. \State \textit{Faz o efeito knight rider, acima explicado}
  188. \EndIf
  189. \EndFor
  190. \EndFunction
  191. \end{algorithmic}
  192. \end{algorithm}
  193. \subsubsection{Simulações}
  194. \begin{itemize}
  195. \item \href{https://www.dropbox.com/s/ux20u8d2sju5h8p/cm_exercico_2.3gp?dl=0}{Video link}
  196. \end{itemize}
  197.  
  198.  
  199.  
  200. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  201. \newpage
  202. \section{Conclusões}
  203. Com este trabalho ganhou-se conhecimento sobre programação em arduino, desde o uso de funções do arduino, a leitura de dados digitais.
  204. Sendo agora possivél fazer trabalho mais complexos, com matéria relacionada com programação em arduino.
  205.  
  206. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
  207. \newpage
  208. \section{Source Code}
  209. \subsection{Exercício 1}
  210.  
  211. \begin{lstlisting}
  212. int nLeds = 4;
  213. int startingPin = 8;
  214. void setup() {
  215.    Serial.begin(9600);
  216.    for (int count=startingPin; count <=  startingPin + nLeds -1 ;count++) {
  217.        pinMode(count, OUTPUT);
  218.        pinMode(A0, INPUT);
  219.      }
  220. }
  221.  
  222. void loop() {
  223.    int time_delay = analogRead(A0);
  224.    
  225.    for (int count=startingPin; count< startingPin + nLeds - 1 ; count++)
  226.    {
  227.        digitalWrite(count, HIGH);
  228.        delay(time_delay);
  229.        digitalWrite(count, LOW);
  230.        delay(time_delay);
  231.    }
  232.  
  233.    for (int count=startingPin + nLeds - 1 ;count > startingPin ; count--)
  234.    {
  235.        digitalWrite(count, HIGH);
  236.        delay(time_delay);
  237.        digitalWrite(count, LOW);
  238.        delay(time_delay);
  239.    }
  240.    Serial.println(time_delay);
  241. }
  242.  
  243. \end{lstlisting}
  244.  
  245. \newpage
  246. \subsection{Exercício 2}
  247. \begin{lstlisting}
  248. int startPin = 2;
  249. int numLeds = 5;
  250. int counter = 0;
  251.  
  252. void setup() {
  253.  
  254.  Serial.begin(9600);
  255.  for(x = startPin; x <= startPin + numLeds - 1; x++){
  256.    pinMode(x, OUTPUT);
  257.    pinMode(A0, INPUT);
  258.    pinMode(A5, INPUT);
  259.  }
  260. }
  261. void loop() {
  262.   counter++;
  263.   int time_delay = analogRead(A0);
  264.   int value = analogRead(A5);
  265.   value = map(value, 0, 1023, 0, 255);
  266.  
  267.     for(int x = startPin; x <= startPin + numLeds - 1; x++){
  268.         if(x%2 == 0){
  269.           digitalWrite(x, HIGH);
  270.           delay(time_delay);
  271.           digitalWrite(x, LOW);
  272.           delay(time_delay);
  273.         }
  274.         if(x%2 != 0){
  275.           analogWrite(x, value);
  276.         }
  277.        
  278.      }
  279.     for(int x = startPin + numLeds - 3; x > startPin; x--){
  280.           if(x%2==0){
  281.             digitalWrite(x, HIGH);
  282.             delay(time_delay);
  283.             digitalWrite(x, LOW);
  284.             delay(time_delay);
  285.           }
  286.     }
  287.     Serial.println(counter);
  288. }
  289. \end{lstlisting}
  290. \newpage
  291. \subsection{Exercício 3}
  292. \begin{lstlisting}
  293. int values[2];
  294. int add, substration, substration_inversed, multiplication;
  295. float division, division_inversed;
  296. int time_delay = 2000;
  297.  
  298. void setup() {
  299.  Serial.begin(9600);
  300. }
  301. void loop() {
  302.  Serial.println("Insira o primeiro valor:")            
  303.  while(Serial.available()==0) {}
  304.  values[0]= Serial.parseInt();
  305.  Serial.println("Insira o segundo valor:")
  306.  while(Serial.available()==0) {}            
  307.  values[1] = Serial.parseInt();
  308.  
  309.  add = values[0]+ values[1];
  310.  substration = values[0]- values[1];
  311.  substration_inversed = values[1] - values[0];
  312.  multiplication = values[0]* values[1];
  313.  division = (float)values[0]/ values[1];
  314.  division_inversed = (float)values[1] / values[0];
  315.  
  316.  Serial.print("a + b = ");
  317.  Serial.println(add);
  318.  delay(time_delay);
  319.  Serial.print("a - b = ");
  320.  Serial.println(substration);
  321.  delay(time_delay);
  322.  Serial.print("b - a = ");
  323.  Serial.println(substration_inversed);
  324.  delay(time_delay);
  325.  Serial.print("a * b = ");
  326.  Serial.println(multiplication);
  327.  delay(time_delay);
  328.  Serial.print("a / b = ");
  329.  Serial.println(division);
  330.  delay(time_delay);
  331.  Serial.print("b / a = ");
  332.  Serial.println(division_inversed);
  333. }
  334. \end{lstlisting}
  335. \newpage
  336. \subsection{Exercício 4}
  337. \begin{lstlisting}
  338. #define BETWEEN(value, min, max) (value < max && value > min)
  339. int numLeds = 5;
  340. int startPin = 2;
  341. int x;
  342. int time_delay = 500;
  343.  
  344. void setup() {
  345.    Serial.begin(9600);
  346.    for(x = startPin; x < startPin + numLeds; x++){
  347.      pinMode(x, OUTPUT);
  348.    }
  349. }
  350. void loop() {
  351.    Serial.println("Insira um valor inteiro:");
  352.    while(Serial.available() == 0) {}
  353.    int value = Serial.parseInt();
  354.    Serial.println("O numero em binario: ");
  355.    if(BETWEEN(value, 0, 32)){
  356.        for(x = startPin; x < startPin + numLeds; x++){
  357.                int state = bitRead(value, x - startPin);
  358.                digitalWrite(x, state);
  359.                Serial.print(state);
  360.        }
  361.    }
  362.    else{
  363.        Serial.println("O numero inserido e invalido:");
  364.        for(int i = 0; i < 3; i++){
  365.            for(x = startPin; x < startPin + numLeds; x++){
  366.                digitalWrite(x, HIGH);
  367.            }
  368.            delay(time_delay);
  369.            for(x = startPin; x < startPin + numLeds; x++){
  370.                digitalWrite(x, LOW);
  371.            }
  372.            delay(time_delay);
  373.        }
  374.    }
  375. }
  376. \end{lstlisting}
  377. \newpage
  378. \subsection{Exercício 5}
  379. \begin{lstlisting}
  380. int pinInput = A0;
  381. float division, division_inv;
  382. float first_value, second_value;
  383. float value;
  384. float add, sub, sub_inv, mult;
  385. int neg_value = 0, pos_value = 0;
  386.  
  387. boolean first_read = true;
  388.  
  389. void setup() {
  390.  Serial.begin(9600);
  391.  pinMode (pinInput , INPUT);
  392.  pinMode(2,OUTPUT);
  393.  pinMode(3,OUTPUT);
  394. }
  395.  
  396. void loop() {
  397.  int time_delay = 0;
  398.  
  399.  if(first_read == true)
  400.  {
  401.    value = analogRead(pinInput);
  402.    Serial.print("Valor do primeiro valor= ");
  403.    Serial.println(value);
  404.    first_value = value;
  405.    delay(2000);
  406.    first_read = false;
  407.  }
  408.  
  409.  else
  410.  {
  411.    Serial.print("Primeiro numero = ");
  412.    Serial.println(x);
  413.  }
  414.  
  415.  value = analogRead(pinInput);
  416.  Serial.print("Segundo numero = ");
  417.  Serial.println(valor);
  418.  second_value = value;
  419.  
  420.  add = first_value + second_value;
  421.  sub = first_value - second_value;
  422.  sub_inv = second_value - first_value;
  423.  mult = first_value * second_value;
  424.  division = (float)first_value / second_value;
  425.  division_inv = (float)second_value / first_value;
  426.  
  427.  Serial.print("\nSoma = ");
  428.  Serial.println(add);
  429.  
  430.  Serial.print("\nSubtracao= ");
  431.  Serial.println(sub);
  432.  
  433.  Serial.print("\nSubtracao inversa= ");
  434.  Serial.println(sub_inv);
  435.  
  436.  Serial.print("\nMultiplicacao = ");
  437.  Serial.println(mult);
  438.  
  439.  Serial.print("\nDivisao = ");
  440.  Serial.println(division);
  441.  
  442.  Serial.print("\nDivisao inversa = ");
  443.  Serial.println(division_inv);
  444.  
  445.  if(add < 0 || sub < 0 || sub_inv < 0 || mult < 0 || division < 0 || division_inv < 0){
  446.    digitalWrite(2, HIGH);
  447.    delay(1000);
  448.    digitalWrite(2, LOW);
  449.    neg_value = 1;
  450.  }
  451.  
  452.  if(add > 2000 || sub > 2000 || sub_inv > 2000 || mult > 2000 || division > 2000 || division_inv > 2000){
  453.     digitalWrite(3, HIGH);
  454.     delay(1000);
  455.     digitalWrite(3, LOW);
  456.     pos_value = 1;
  457.   }
  458.  
  459.  if(neg_value == 1 || pos_value == 1){
  460.    time_delay = 1000;
  461.  }
  462.  else if (neg_value == 1 && pos_value == 1)
  463.  {
  464.    time_delay = 0;
  465.  }
  466.  else if (first_read == true)
  467.  {
  468.    time_delay = 0;
  469.  }
  470.  else{
  471.    time_delay = 2000;
  472.  }
  473.  
  474.  first_value = second_value;
  475.  
  476.  delay(time_delay)
  477.  Serial.println("--------");
  478.  
  479. }
  480. \end{lstlisting}
  481.  
  482.  
  483. \end{document}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement