Biblioteca de programação

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Placa de aquisição de dados

  • Saídas digitais

Existem 3 saídas digitais na placa, e essas são chamadas de OUT1, OUT2 e OUT3.

Saida digital.jpg

Essas saídas são energizadas, e quando estão ligadas enviam 5V a saída escolhida.


  • Entradas digitais

Existem, também, 3 entradas digitais, que são nomeadas INP1, INP2 e INP3.

Entrada digital.jpg

Essas entradas são do tipo seco, o que significa que elas ficam ativas quando aterradas(GND).


  • Saídas analógicas

Existem 2 saídas analógicas, e essas nomeadas DA1 e DA2.

Saida analogica.jpg

Essas saídas podem ser ajustadas para mandar tensões entre 0V e 5V.


  • Entradas analógicas

As 8 entradas analógicas existentes na placa são nomeadas como AD1, AD2, AD3...AD8

Entrada analogica.jpg

Estas entradas suportam tensões de até 10V


Instalação

Fazer o dowload do arquivo bibprg neste link: Download

Intruções para instalação:

Na pasta make:

-Dentro do arquivo shell.sh, no campo "SENHA". Botar senha de root do PC em uso;

-Dentro do arquivo Perm-Cerne.rules, na segunda linha, no campo OWNER="Aluno". Mudar "Aluno" para o nome do usuário do computador.

feito isso, basta que, a partir do terminal, seja feito o comando make dentro da pasta make.

Criando programas em C utilizando a biblioteca prg

As seguintes funções estão disponíveis nesta biblioteca:

  • função conectar:

esta função conecta a plaquinha ao host PC

Parâmetros: não possui

como utilizar:

conectar (); 


  • Função "info"

esta função retorna informações da placa. Pode retornar o nome do fabricante e o string do produto.

Parâmetros: não possui

como utilizar:

info (); 


  • Função "enviar_digital"

Envia um sinal para uma das 3 saídas digitais da placa de aquisição

como utilizar:

Parâmetros: 2 parâmetros do tipo char, onde o primeiro representa uma saída digital (1, 2 ou 3) e o segundo representa o estado da saída, podendo ser 1(nível alto) ou 0(nível baixo).

enviar_digital (saída, estado); 

/*IMPORTANTE: as varíaveis saída e estado, sao do tipo CHAR*/ ou

enviar_digital (‘1’, ‘1’)

/*saída 1 é colocada em nivel alto(5V)*/


  • Função "enviar_analogica"

função utilizada para enviar um sinal para uma das 2 saídas analógicas da placa de aquisição

como utilizar: Parâmetros: 2 parâmetros do tipo char, onde o primeiro representa uma saída analógica (1 ou 2) e o segundo é uma string que representa o estado da saída, podendo esta variar de “000” a “255”. Onde “000” é 0V e 255 é 5V. Outras tensões podem ser encontradas através de calculos simples, como 2,5V “127”

enviar_analogica (saida, estado);

/*Onde a variavel saida e estado sao do tipo CHAR*/

ou

enviar_analogica (‘1’, “127”);

/*onde a saída analógica 1 está sendo energizada com aproximadamente 2.5V*/


  • Função "receber_digital"

Função utilizada para receber informações das entradas digitais;

A entrada digital desta placa é do tipo seco. Ela retornará 0 caso a entrada NÃO estiver aterrada, e 1 se estiver.


como utilizar:

Parâmetros: receber(nº da saída); Retorno: o retorno desta função é um inteiro (int)

receber_digital (char saida) ;

ou

receber_digital (‘1’) ;

/*onde a função retornará 0 ou 1 da entrada 1 */ /*Existem 3 entradas digitais, portanto a variavel saída pode ser 1, 2 ou 3*/


  • Função "receber_analogica"

Função utilizada para receber informações das entradas analógicas;

As entradas analógicas retornam valores de 0,00V a 9,99V;

como utilizar:

Parâmetros: receber(nº da saída); Retorno: o retorno desta função é um número real (float)

receber_analogica (char saida) ;

ou

receber_analogica (‘1’) ;

/*onde a função retornará retornará um valor entre 0,00 e 9,99 */ /*Existem 8 entradas analogicas, portanto a variavel saída pode ser 1, 2, 3, 4, 5, 6, 7 ou 8*/


  • Função "print_display"

/*Função utilizada para imprimir um mensagem no display lcd*/

como utilizar:

//Parâmetros: print_display(linha,"mensagem");

print_display (int linha, char mensagem[]); 


  • Função "limpar_display" limpa o display

/*Função utilizada para limpar o display*/

como utilizar:

//Parâmetros: não possui

limpar_display();

Exemplos

Sempre lembrando do arquivo de cabeçalho "bibprg.h" que está dentro da pasta que foi baixada

Saída digital

#include <stdio.h>
#include "bibprg.h"

main (){

 char saida='1', estado='0';
 
 conectar ();
 
 enviar_digital ('1','1');
 sleep (1);
 enviar_digital (saida,estado);
 }

Lembrando que o dois parâmetros são do tipo CHAR


Saída analógica

#include <stdio.h>
#include "bibprg.h"

main (){

 char saida='1', estado[3]="000";

 conectar ();
 
 enviar_analogica('1', "130");
 sleep(2);
 enviar_analogica(saida, estado);
 }

Os dois parâmetros são do tipo CHAR, sendo o segundo uma cadeia de caracteres que varia de 000 á 255


Entrada digital

#include <stdio.h>
#include "bibprg.h"

main (){

 char saida='1';

 conectar ();
 
 printf ("%d\n", receber_digital ('1'));
 sleep (3);
 printf ("%d\n", receber_digital (saida));
}

Parâmetro do tipo CHAR


Entrada analógica

#include <stdio.h>
#include "bibprg.h"

 main (){

 conectar ();
 
 printf("%f\n",receber_analogica('1'));
 sleep (2);
 printf("%f\n",receber_analogica('1'));
}

Parâmetro do tipo CHAR

Display

#include <stdio.h>
#include "bibprg.h"

main(){

 int i=12;
 char mensagem[50]="Fim";
 
 conectar();
 
 for(;;){
    print_display (1,"Linha 1 display LCD");
    sleep(1);
 
    print_display (2,"Linha 2 display LCD");
    sleep(1);

    print_display (12,"Linhas 1 e 2 display LCD");
    sleep(1);

    print_display (i, mensagem);
    sleep(1);

 }
}

Onde a variável "i" é do tipo inteiro e a "mensagem" é uma cadeia de caracteres

Ao fim, basta compilar da seguinte forma:

gcc arquivo.c -lprg -lusb-1.0 -o arquivo


|}

Comunicação bluetooth (Appinventor e C)

Fonte: Uso do Bluetooth com App Inventor e programa C

How to play with Bluetooth under Linux

Comandos iniciais:

instalar ferramentas e bibliotecas

 sudo apt-get install bluez-utils
 sudo apt-get install libbluetooth3-dev

Configurar a porta serial (SP), neste exemplo o canal 3 :

sdptool add --channel=3 SP

Código C, funcionando, (com o canal 3, pode ser mudado, se necessário, na linha 33)

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/rfcomm.h>
#include <errno.h>
#include <sys/types.h>
#include <netinet/in.h>
 
 
int main(int argc, char **argv)
{
    struct sockaddr_rc loc_addr = { 0 } , rem_addr = { 0 };
    char buf[1024] = { 0 };
    int s, client, bytes_read;
    socklen_t opt = sizeof(rem_addr);
 
    // allocate socket http://www.br-c.org/doku.php?id=socket
    if ((s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM))==-1){
		printf("Problemas na criação do socket\n");
		exit(-1);
    }
 
    // bind socket to port 1 of the first available 
    // local bluetooth adapter
    //http://www.br-c.org/doku.php?id=bind
    
    loc_addr.rc_family = AF_BLUETOOTH;
    loc_addr.rc_bdaddr = *BDADDR_ANY;
    //str2ba( endereco, &loc_addr.rc_bdaddr );
    loc_addr.rc_channel = (uint8_t) 3;
    if (bind(s, (struct sockaddr *)&loc_addr, sizeof(loc_addr))==-1){
		printf("Problemas no bind\n");
		exit(-1);
    }
    
 
    //listen http://www.br-c.org/doku.php?id=listen
    printf("Preparando para listen..\n");
    // put socket into listening mode
    if (listen(s, 1)<0)
		printf("Problemas de listen...\n");
 
    //http://www.br-c.org/doku.php?id=accept
    printf("Preparando para accept..\n");
    // accept one connection

    if ((client = accept(s, (struct sockaddr *)&rem_addr, &opt))<0){
         perror("accept: ");
         exit(1);
    }
 
    printf("Preparando para leitura..\n");
   // ba2str( &rem_addr.rc_bdaddr, buf );
    fprintf(stderr, "accepted connection from %s\n", buf);
    memset(buf, 0, sizeof(buf));
 
    // read data from the client
    bytes_read = read(client, buf, sizeof(buf)+1);
    if( bytes_read > 0 ) {
        printf("received [%s]\n", buf);
    }
 
    //envia uma resposta
    strcpy(buf,"ALO CELULAR!");
    write (client, buf, sizeof(buf));
    sleep(10);
    // close connection
    close(client);
    close(s);
    return 0;
}

Para compilar o programa:

 gcc rcomm-server.c -lbluetooth  -o rcomm-server


APPINVENTOR:

baixe o projeto do aplicativo, e faça o upload em sua conta no site do App Invetor. Arquivo:Appinvetorblue.jpg

Note que a variável MAC deverá conter o endereço MAC do computador em uso.

MACappinventor.jpg

Para saber o seu endereço MAC:

 hcitool dev


|}