Biblioteca de programação
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.
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.
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.
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
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.
Para saber o seu endereço MAC:
hcitool dev
|}