Biblioteca de programação: mudanças entre as edições
Criou página com '=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. 600px Essas s...' |
|||
(14 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 38: | Linha 38: | ||
Estas entradas suportam tensões de até 10V | Estas entradas suportam tensões de até 10V | ||
=Instalação= | |||
Fazer o dowload do arquivo bibprg neste link: [http://db.tt/17JRNYpK 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 | |||
<syntaxhighlight lang=c> | |||
#include <stdio.h> | |||
#include "bibprg.h" | |||
main (){ | |||
char saida='1', estado='0'; | |||
conectar (); | |||
enviar_digital ('1','1'); | |||
sleep (1); | |||
enviar_digital (saida,estado); | |||
} | |||
</syntaxhighlight> | |||
Lembrando que o dois parâmetros são do tipo CHAR | |||
Saída analógica | |||
<syntaxhighlight lang=c> | |||
#include <stdio.h> | |||
#include "bibprg.h" | |||
main (){ | |||
char saida='1', estado[3]="000"; | |||
conectar (); | |||
enviar_analogica('1', "130"); | |||
sleep(2); | |||
enviar_analogica(saida, estado); | |||
} | |||
</syntaxhighlight> | |||
Os dois parâmetros são do tipo CHAR, sendo o segundo uma cadeia de caracteres que varia de 000 á 255 | |||
Entrada digital | |||
<syntaxhighlight lang=c> | |||
#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)); | |||
} | |||
</syntaxhighlight> | |||
Parâmetro do tipo CHAR | |||
Entrada analógica | |||
<syntaxhighlight lang=c> | |||
#include <stdio.h> | |||
#include "bibprg.h" | |||
main (){ | |||
conectar (); | |||
printf("%f\n",receber_analogica('1')); | |||
sleep (2); | |||
printf("%f\n",receber_analogica('1')); | |||
} | |||
</syntaxhighlight> | |||
Parâmetro do tipo CHAR | |||
Display | |||
<syntaxhighlight lang=c> | |||
#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); | |||
} | |||
} | |||
</syntaxhighlight> | |||
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 | |||
{{collapse bottom}} | |||
=Comunicação bluetooth (Appinventor e C)= | |||
Fonte: [http://wiki.sj.ifsc.edu.br/index.php/Uso_do_Bluetooth_com_App_Inventor_e_programa_C Uso do Bluetooth com App Inventor e programa C] | |||
[http://www.jstuber.net/lego/nxt-programming/bluetooth-linux.html 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) | |||
<syntaxhighlight lang=c> | |||
#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; | |||
} | |||
</syntaxhighlight> | |||
Para compilar o programa: | |||
gcc rcomm-server.c -lbluetooth -o rcomm-server | |||
APPINVENTOR: | |||
[https://db.tt/d0mglOhQ baixe] o [https://lh4.googleusercontent.com/-lnTOmtSJ7bM/UnVqI9Tj-dI/AAAAAAAAEYE/AqVSAyralPs/w1043-h450-no/app.jpg projeto] do aplicativo, e faça o upload em sua conta no [http://appinventor.mit.edu/ site] do App Invetor. | |||
[[Arquivo:Appinvetorblue.jpg]] | |||
Note que a variável MAC deverá conter o endereço MAC do computador em uso. | |||
[[Arquivo:MACappinventor.jpg|300px]] | |||
Para saber o seu endereço MAC: | |||
hcitool dev | |||
{{collapse bottom}} |
Edição atual tal como às 18h16min de 2 de novembro de 2013
1 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
2 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.
3 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();
4 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
|}
5 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
|}