Social Icons

Botão sem ruído (Erros)

Este exemplo demonstra o uso de um interruptor como uma chave: cada vez que é pressionado, o LED (ou o que for) é ligado (se estiver desligado) e vice-versa. Além disso, também funciona como filtro para o ruído mecânico característico dos interruptores, sem o qual, ao pressionar o interruptor, detectaríamos uma seqüência de múltiplos toques. O código a seguir faz uso da função millis() para acompanhar o momento em que o interruptor é pressionado.

Circuito

O interruptor no pino 7 e o LED no pino 13.

Código

int inPin = 7;      // o número do pino de entrada
int outPin = 13;  // número do pino de saída

int state = HIGH;  // estado atual do pino de saída
int reading;       // estado atual do pino de entrada
int previous = LOW;  // estado anterior do pino de entrada

// as seguintes variáveis são do tipo ''long'' porque o tempo,
// medido em milissegundos,
// transformar-se-á logo em um valor grande demais para um ''int''
long time = 0;      // último momento em que o pino de saída foi atualizado
long debounce = 200 // tempo do filtro, aumente se ocorrer irregularidades

void setup()
{
  pinMode(inPin, INPUT);
  pinMode(outPin, OUTPUT);
}

void loop()
{
  reading = digitalRead(inPin);

  // se acabamos de pressionar o interruptor (isto é, se a entrada
  // foi de LOW para HIGH), e esperamos o bastante desde o
  // último toque de forma a ignorar o ruído...  
  if (reading == HIGH && previous == LOW && millis() - time > debounce)
 {
    // ... inverta a saída
    if (state == HIGH)
      state = LOW;
    else
      state = HIGH;

  // ... e lembre-se do momento do último toque
    time = millis();    
  }

  digitalWrite(outPin, state);

  previous = reading;
}

Controle um círculo de LEDs com um joystick

Circuito completo

Detalhe do cabeamento dos LEDs

Detalhe do cabeamento ao Arduino

Como funciona?

O joystick fornece coordenadas (x,y) ao Arduino de acordo com a sua posição. Como pode se ver, o espaço no qual o joystick se move é um círculo. Esse círculo será o que chamaremos de agora em diante de 'Torta' (veja a parte inferior direita da primeira imagem).
A única coisa que precisamos entender é que a Torta está dividida em 8 fatias. A cada fatia há um LED correspondente. (Veja a figura abaixo). Dessa forma, quando o joystick fornece-nos uma coordenada, ela necessariamente pertencerá a uma dessas fatias. O programa então acende o LED correspondente à fatia.

Código

 /* Controle_CírculodeLED_com_joystick
  * ------------
  * Este esboço controla um círculo com 8 LEDs
  * via joystick
  *
  * Primeiro lê-se os dois pinos analógicos conectados
  * ao joystick feito com dois potenciômetros
  *
  * Essa entrada é interpretada como coordenadas (x,y)
  *
  * Em seguida, calcula-se qual das 8 zonas possíveis 
  * faz parte das coordenadas (x,y)
  * 
  * Finalmente acende-se o LED que está na zona detectada
  *
  * @authors: Cristina Hoffmann and Gustavo Jose Valera
  * @hardware: Cristina Hofmann and Gustavo Jose Valera
  * @context: Arduino Workshop at medialamadrid
  */

  // Declaração de variáveis

  int ledPins [] = { 2,3,4,5,6,7,8,9 };
 // Matriz com 8 LEDs organizados em círculo
  int ledVerde = 13;
  int espera = 40;     // Tempo necessário para ligar o LED
  int joyPin1 = 0;   // variável deslizante conectada ao pino analógico 0
  int joyPin2 = 1;   // variável deslizante conectada ao pino analógico 1
  int coordX = 0;  // variável para ler o valor no pino analógico 0
  int coordY = 0;    // variável para ler o valor no pino analógico 1
  int centerX = 500;  // valor para a posição central do joystick
  int centerY = 500;
  int actualZone = 0;
  int previousZone = 0;

  // delegação dos pinos
  void setup()
  {
    int i;
    beginSerial(9600);
    pinMode (ledVerde, OUTPUT);
    for (i=0; i< 8; i++)
    {
      pinMode(ledPins[i], OUTPUT);
    } 
  }

  // função que calcula a inclinação da linha que passa pelos pontos
  // x1, y1 e x2, y2
  int calculateSlope(int x1, int y1, int x2, int y2)
  {
    return ((y1-y2) / (x1-x2));
  }

  // função que calcula em qual das 8 zonas possíveis
  // estão as coordenadas x, y dado o centro cx, cy
  int calculateZone (int x, int y, int cx, int cy)
  {
    int alpha = calculateSlope(x,y, cx,cy); 
// inclinação do segmento entre o ponto e o centro

    if (x > cx)
    {
      if (y > cy) // 1o quadrante
      {
        if (alpha > 1) // Inclinação > 1, portanto parte mais alta do 1o quadrante
          return 0;
        else
          return 1;    // Caso contrário, parte mais baixa do 1o quadrante
      }
      else // 2o quadrante
      {
        if (alpha > -1)
          return 2;
        else
          return 3;
      }
    }

    else
    {
      if (y < cy) // 3o quadrante
      {
        if (alpha > 1)
          return 4;
        else
          return 5;
      }
      else // 4o quadrante
      {
        if (alpha > -1)
          return 6;
        else
          return 7;
      }
    }
  } 

   void loop() {
    digitalWrite(ledVerde, HIGH); 
// flag para sabermos que se entrou em loop(), é opcional

    // leia o valor dos potenciômetros
    coordX = analogRead(joyPin1);   
    coordY = analogRead(joyPin2);   

    // calcule em qual x
    actualZone = calculateZone(coordX, coordY, centerX, centerY); 

    digitalWrite (ledPins[actualZone], HIGH);     

    if (actualZone != previousZone)
      digitalWrite (ledPins[previousZone], LOW);

   // imprima no terminal o valor cartesiano da coordenada
   // e a zona ao qual faz parte
   //não é necessário caso o Arduino rode em modo autônomo
    serialWrite('C');
    serialWrite(32); // imprima espaço
    printInteger(coordX);
    serialWrite(32); // imprima espaço
    printInteger(coordY);
    serialWrite(10);
    serialWrite(13);

    serialWrite('Z');
    serialWrite(32); // imprima espaço
    printInteger(actualZone);
    serialWrite(10);
    serialWrite(13);

  // Não apague a linha abaixo, ela é necessária!
    previousZone = actualZone;
   // delay (500);

 }

2.1) Seu Primeiro Programa

 Essa é a tela do VisuALG comentado nos últimos posts como opção para desenvolvimento.


Onde encontramos uma ótima base para programação inicial...


Bom, para início vamos definir o que fazer, que problema resolver...

DICA: Crie uma pasta em um local de sua preferência com nome EXERC_EXEMPLO e vá posteriormente salvando cada exercício que fez a fins de estudo, organização e ajuda se precisar relembrar algo.

O QUE ESTIVER ASSIM É SEMPRE UM CÓDIGO
//comentários não compilados pelo computador

A mensagem acima só para exemplificar como separo código de texto normal!

Problema_Exemplo1: Mostrando uma Mensagem na tela :



algoritimo "Problema_Exemplo"//aqui define-se o nome do programa

var 
//aqui definimos o nome e tipo de cada variavél
exemplo : Caracter
inicio 
//aqui vai as intruções e comandos
escreva('Olá Mundo')




fimalgoritimo



Explicação dos Comandos Usados

escreva: Escreve uma mensagem na tela
escreval: Escreve uma mensagem e pula uma linha
Uso:

escreva('escreva aqui sua mensagem')

Tudo que estiver entre as ' ' não vai ser executado e sim apenas Mostrado.
Se você não colocar por exemplo as aspas e tivesse uma variavel para mostrar iria usar assim

escreva(variavel) ou
escreva('Mensagem que voce deseja escrever',variavel)


Perceba que a parte entre aspas é uma mensagem não compilada e sim mostrada e a variavel é o valor que deseja mostrar.


Vamos para o próximo?

Problema_Exemplo2 - Lêr um Nome e mostrar!


algoritimo "Problema_Exemplo"//aqui define-se o nome do programa

var 
//aqui definimos o nome e tipo de cada variavél
nome: Caracter

inicio 
//aqui vai as intruções e comandos
leia(nome)
escreva('O nome digitado Foi ',nome)
fimalgoritimo




Explicação dos Comandos Novos Usados:


leia: Lê algo digitado no teclado, espera o enter ser pressionado confirmando o fim da digitação e armazena como variavel pré definida.

No exemplo pede-se leia(nome) ele le a variável NOME declarada como caracter, então mesmo que você digite números como seu nome ele vai aceitar mas os números serão apenas demonstrativos pois não podem ser usados para contas pois a variável foi declarada como Caracter.


Resultados Obtidos:

O que obteve do código foi provavelmente  +- isso:

Visualg 2.5 Beta ...


Marcelo 

O Nome digitado foi Marcelo _ 



                                                                                   
htge
http://geekDevTeam.blogspot.com


Bom Basicamente você ja criou um programa, agora é esperar o próximo post e tentar variações em casa, brinque... tente fazer ler números,faça ele ler mais coisas criando mais variais e depois vá testando qualquer dúvida poste seu código nos comentários...

2. Praticando em Portugol Com VISUALG

Vamos partir para prática, exercitar seu lobo frontal!
Apartir daqui não tem mais volta, você vai entrar no mundo real da programação e concerteza se apaixonar, assim como eu, amante dessa prática.




Para não implicar seu aprendizado em nenhuma linguagem específica pois isso pode atrapalhar e você acabar não se adequando com específicas linguagens fazemos isso com VisuALG, um compilador em portugol a base de PASCAL.



Um programa que interpreta e executa algoritmos como um "programa" normal de computador. Baseado em uma linguagem parecida com o "Portugol" ensinado em cursos em todo o Brasil, possui recursos como simulação da "tela" do computador, visualização de variáveis, impressão dos fontes e outras características que auxiliam o aprendizado das técnicas de programação.

Pode Ser baixado Aqui: DOWNLOAD Direto do servidor do baixaki.com.br



1.5) Variáveis


São os nomes que utilizamos para referenciar as posições de memória. A memória de um computador pode ser entendida como um conjunto ordenado e numerado de palavras. Na maioria dos PCs que usamos diariamente a memória pode ser considerada como um conjunto ordenado e numerado de bytes (8 bits). As linguagens de programação de alto nível atribuem nomes as posições de memória que armazenam os dados a serem processados. Deste modo os programadores tem mais facilidade para construir seus algoritmos. Na linguagem a-- um nome de variável é contruído da seguinte maneira: uma letra seguida por um conjunto de letras ou algarismos. Por exemplo, os nomes seguintes são nomes de variáveis válidos:
  • i
  • valor
  • nome
  • nota1
Como nomes inválidos podemos dar os seguintes exemplos:
  • 2nota (nome começado por algarismo)
  • nome de aluno (nome com espaços em branco no meio)
Durante a apresentação da linguagem iremos fazer referências a listas de variáveis. Uma lista de variáveis é um conjunto de nomes de variáveis separados por vírgulas, por exemplo: Ex. nota1, nota2, media

Na linguagem a-- uma variável não precisa ser definida antes de ser usada em um algoritmo. A variável irá assumir, dinamicamente, o tipo do dado que estiver sendo atribuído a esta variável. Por exemplo se armazenarmos o valor 5 em uma variável ela passará a ser do tipo inteiro. Caso resolvamos trocar o valor para 3.14 a variável passará a ser real.


Por que usar estrutura Inteiro, Real...?

Imagine Você criando um programa que lê quantos anos a pessoa tem e ela coloca 14,6 anos, acabou seu programa, com essa limitação de variaveis possibilita que se bloqueie esse tipo de erro.