Acendedor de leds pela porta paralela

Publicado por Angelito Monteiro Goulart (última atualização em 11/03/2010)

[ Hits: 17.499 ]

Homepage: http://angelitomg.com

Download led.c

Download 1267842472.led.c (versão 2)




Programa com um simples menu onde o usuário pode escolher entre acender ou apagar os leds conectados à porta paralela. Nos comentários do programa segue a dica de como montar o circuito.

  



Versões atualizadas deste script

Versão 2 - Enviado por Marcelo Paiva em 05/03/2010

Changelog: Segue pequena alteração para carregar numero decimal e acender leds, vai pedir numero em decimal, apos segue sequencia do programa original com menus 1,2, e 3, se digitar 5 vai acender metade dos leds 15 é igual a 0F em hexa e é igual a 00001111 em binario acendendo leds conforme sequencia binaria, vou tentar mandar fotos, tenho pouco tempo e não sei usar ainda ferramentas do site, enfim o mais importante é que a base do programa é 10 e funciona, consegui sucesso no Mandriva 2009 com Gnome e pacotes essential, agora as fotos que vou tentar mandar são no ubuntu9.10 com buid-essential.

/*
* Acendedor de leds pela porta paralela
* Angelito M. Goulart
* Setembro/2009
*
* Esquema Eletrico
*
* Pino2 -> 470R -> LED1
* Pino3 -> 470R -> LED2
*
* Pode-se usar do pino 2 ate o pino 9 para ligar os LEDs
* GND -> Do pino 18 ao pino 25
*
*/

#include
#include
int main(void)
{
int opcao;
int altdec; //variavel adicionada para armazenar numero decimal a ser enviado para porta
ioperm(0x378,3,1); //inicializa a porta paralela
outb(0x00, 0x378);
do
{
printf ("\n=====Entre número em decimal=====\n");

scanf ("%d", &altdec); //carrega decimal


printf ("\n=====Acendedor de Leds=====\n");
printf (" 1.Acender Leds\n");
printf (" 2.Apagar Leds\n");
printf (" 3.Sair\n\n");
printf (" Selecione uma opcao: ");
scanf ("%d", &opcao);
if (opcao == 1)
{
//seta porta com decimal carregado em altdec
outb(altdec, 0x378); //caso a opcao seja 1, acende todos os leds,alterado para altdec
}
if (opcao == 2)
{
outb(0x00, 0x378); //caso a opcao seja 2, apaga todos os leds
}
}while (opcao != 3);
outb(0x00, 0x378);
return (0);
}

Marcelo Paiva

Download 1267842472.led.c


Esconder código-fonte

/*
* Acendedor de leds pela porta paralela
* Angelito M. Goulart
* Setembro/2009
*
* Esquema Eletrico
*
* Pino2 -> 470R -> LED1
* Pino3 -> 470R -> LED2
*
* Pode-se usar do pino 2 ate o pino 9 para ligar os LEDs
* GND -> Do pino 18 ao pino 25
*
*/
#include <stdio.h>
#include <sys/io.h>
int main(void)
{
   int opcao;
   ioperm(0x378,3,1); //inicializa a porta paralela
   outb(0x00, 0x378);
   do
    {
       printf ("\n=====Acendedor de Leds=====\n");
       printf (" 1.Acender Leds\n");
       printf (" 2.Apagar Leds\n");
        printf (" 3.Sair\n\n");
       printf (" Selecione uma opcao: ");
       scanf ("%d", &opcao);
       if (opcao == 1)
       {
      outb(0xFF, 0x378); //caso a opcao seja 1, acende todos os leds
       }
       if (opcao == 2)
        {
      outb(0x00, 0x378); //caso a opcao seja 2, apaga todos os leds
        }
   }while (opcao != 3);
   outb(0x00, 0x378);
   return (0);
}

Scripts recomendados

Velha reversa

ASCII

funcsoma2.c - Soma 2 pontos flutuantes

Cálculo do M.M.C

Script para calcular raizes de uma equacao do 2 grau


  

Comentários
[1] Comentário enviado por mpv2505 em 26/02/2010 - 16:31h

Angelito,
sou iniciante em Linux, parabéns, excelente seu programa consegui executar ele com Mandriva 2009 e codeblocks, mas nao precisa codeblocks, compilei também na linha de comando, excelente, nota 10, liguei 8 leds a paralela com resistor para proteger leds, acende todas e desliga, alterei o programa e fiz entrada com scanf armazendo numero decimal em variavel que coloquei no lugar do numero 0xFF hexa no comando outb, e carreguei ele com numero em decimal acendou as luzes na sequencia conforme numero binario correspondente, esquema dos leds pode ser encontrado em www.rogercom.com.

excelente parabens

Marcelo Paiva
Quilombo Santa Catarina
[email protected]

[2] Comentário enviado por mazinsw em 09/03/2010 - 23:56h

valeu muito obrigado, eu só sabia fazer no Windows, mas agora vou fazer utilizando uma interface gráfica com um botão para cada led, usando GTK+, mas ainda tenho uma duvida como obtenho o valor que está ajustado na porta?

[3] Comentário enviado por angelito em 10/03/2010 - 00:13h

Otimo. Assim que fizer, se possivel, poste o codigo. :D Compartilhando e aprendendo :D abraço

[4] Comentário enviado por EnzoFerber em 14/03/2010 - 06:55h

@mazinsw

Cara, acho que com inb() você pega o valor atual da porta.... da uma olhada na função no 'man' ai, muito tempo que não uso, esqueci os argumentos, mais deve ser inb (porta, variavel), algo do tipo... :)

[5] Comentário enviado por removido em 11/11/2010 - 15:33h

Depois de horas pesquizando em russo, alemão, inglês, italiano... eu acho algo exatamente da forma que eu queria e em português!? Caramba meu! AHAHHAHahahAhaha


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts