Vou tentar explicar o que esta acontecendo, eu tenho um aparelho com um LCD e 4 botões, estou criando um menu com eles. O quarto botão eu quero fazer o seguinte, se eu apertar ele por mais de 10 segundos eu reinicio o aparelho.
Tentei utilizar o seguinte código:
#include<stdio.h>
#include<curses.h>
int main()
{
char tecla;
initscr();
clear();
keypad(stdscr, TRUE);
noecho();
timeout(2000); //a função já garante a execução do bloco com ou sem entrada de teclado; // Espera 2 segundos
tecla=getch();
endwin();
}
compilei o codigo acima da seguinte maneira:
cc meuprograma.c -o meuprograma -lncurses
Compilou sem problemas, porem não obtive sucesso em o que eu preciso fazer.
Não posso passar o código que eu já fiz pois é para a empresa que eu trabalho, então se alguém já tiver passado por uma experiência parecida com essa e puder me dar uma ajuda.
Valeu pessoal!
Esse aparelho retorna algum valor apertando o botão ?
Se sim , essa não é a opção correta
Espero ter ajudado
[]'s
T+
3. Re: Duvida em C para hardware
thyagoopusa Fedora
Post recolhido
Enviado em 22/01/2015 - 09:47h
Opa de novo :D
Retorna sim, um valor em hexa.
Você saberia de alguma forma cara?
_______________________________________________________________________
“I have promises to keep, and miles to go before I sleep.” - Robert Frost
4. Re: Duvida em C para hardware
mulatinhousa Slackware
Post recolhido
Enviado em 22/01/2015 - 10:26h
Talvez seja possível fazer com NCURSES, mas... a forma mais simples de fazer isso é usando um multiplexador,
Funções para fazer isso:
- select()
- poll()
- epoll()
5. Re: Duvida em C para hardware
thyagoopusa Fedora
Post recolhido
Enviado em 22/01/2015 - 10:29h
mulatinho escreveu:
Talvez seja possível fazer com NCURSES, mas... a forma mais simples de fazer isso é usando um multiplexador,
Funções para fazer isso:
- select()
- poll()
- epoll()
Muito obrigado amigo, vou dar uma pesquisada nessas funções e ver se resolve meu problema.
Qualquer coisa eu aviso aqui..
Mas se souberem de algo mais que pode me ajudar, pode ir postando aqui.
vlw!
_______________________________________________________________________
“I have promises to keep, and miles to go before I sleep.” - Robert Frost
6. Re: Duvida em C para hardware
thyagoopusa Fedora
Post recolhido
Enviado em 22/01/2015 - 13:39h
Eu preciso que faça o seguinte, quando eu apertar e segurar o quarto botão preciso que faça uma contagem regressiva de 10 segundos, se caso o cliente soltar o botão o aparelho não é reiniciado. Somente se ele mantiver pressionado durante 10 segundos o botão é que ele é reiniciado.
Vou postar o código, pra ver se ajuda...
int botao1 = 1, botao2 = 1, botao3 = 1, botao4 = 1, inicio = 1;
unsigned char Keypad_Value = 0, Pre_Value = 0, Counter = 0, count = 0;
unsigned char Ret_Message1[40] = ""; //variavel que vai salvar o que esta escrito na primeira linha do lcd
unsigned char Ret_Message2[40] = ""; //variavel que vai salvar o que esta escrito na segunda linha do lcd
unsigned char Keypad_Message[40] = "";
goto principal;
/*
printf("O valor de detect_dir e: %x\n", detect_dir);
printf("O valor de detect_press e: %x\n", detect_press);
printf("O valor de Keypad_Value e: %x\n", Keypad_Value);
*/
while (1) {
plcm.amg = 0;
ioctl(devfd, PLCM_IOCTL_GET_KEYPAD, &plcm); // Get keypad
Keypad_Value = plcm.key_value; // Add the value to our local variable
detect_press = (Keypad_Value & 0x40);
detect_dir = (Keypad_Value & 0x28);
switch (Keypad_Value) {
case 0x87:
if (Pre_Value != Keypad_Value) {
/*printf("\nO valor de detect_dir dento do case 0 e: %x\n", detect_dir);
printf("O valor de detect_press dento do case 0x0 e: %x\n", detect_press);*/
strcpy(Keypad_Message, "Status de Firewall ");
read_1(devfd, plcm, &saida_read, Ret_Message1);
inicio = 0;
while (botao2 == 0) {
botao2 = 1;
escreve_linha_1(plcm, devfd);
//strcpy(Keypad_Message, "Status de Firewall ");
write(devfd, " Status de Firewall ", 40);
sleep(2);
//inicio = 1;
goto principal;
}
}
break;
case 0x8f:
if (Pre_Value != Keypad_Value) {
// printf("\nO valor de detect_dir dento do case 0x08 e: %x\n", detect_dir);
// printf("O valor de detect_press dento do case 0x08 e: %x\n", detect_press);
strcpy(Keypad_Message, "Status de Rede ");
while (botao3 == 0) {
botao3 = 1;
escreve_linha_1(plcm, devfd);
write(devfd, " Status de Rede ", 40);
Ta ai a forma que eu fiz primeiramente...
_______________________________________________________________________
“I have promises to keep, and miles to go before I sleep.” - Robert Frost
if (ret == -1) {
fprintf(stdout, "yeahhh\n");
} else {
if (FD_ISSET(0, &rfds)) {
bytes = read(STDIN_FILENO, buffer, sizeof(buffer));
fprintf(stdout, "saida do usuario: %s\n", buffer);
}
}
fprintf(stdout, "10 segundos se passaram e nada...\n");
sleep(1);
}
return 0;
}
mlt@slack:~/codez/c$ ./test-select
select: 0
10 segundos se passaram e nada...
select: 0
10 segundos se passaram e nada...
buffer
select: 1
saida do usuario: buffer
if (ret == -1) {
fprintf(stdout, "yeahhh\n");
} else {
if (FD_ISSET(0, &rfds)) {
bytes = read(STDIN_FILENO, buffer, sizeof(buffer));
fprintf(stdout, "saida do usuario: %s\n", buffer);
}
}
fprintf(stdout, "10 segundos se passaram e nada...\n");
sleep(1);
}
return 0;
}
mlt@slack:~/codez/c$ ./test-select
select: 0
10 segundos se passaram e nada...
select: 0
10 segundos se passaram e nada...
buffer
select: 1
saida do usuario: buffer
Muito obrigado pela resposta, mas não estou conseguindo entender muito bem como funciona esta função select...
Você poderia me dar uma breve explicação?
_______________________________________________________________________
“I have promises to keep, and miles to go before I sleep.” - Robert Frost
9. Re: Duvida em C para hardware
mulatinhousa Slackware
Post recolhido
Enviado em 23/01/2015 - 10:30h
Opa, a função select multiplexa síncronamente descritores de arquivo.
Os descritores de arquivo como sabemos podem ser: sockets, arquivos, e dispositivos de entrada e saída.
Nesse caso como você colocou no seu código, usei o descritor 'STDIN_FILENO' e como você pode vêr utilizou-se também a struct timeval que define os segundos em que a função 'select()' irá esperar para que algum evento aconteça utilizando o descritor, o primeiro argumento da função select corresponde a quantidade de descritores que serão tratados, eu aconselho a você a lêr um pouco mais sobre a manpage [1] da função e também exemplos do beej [2];
Com isso você pode facilmente adaptar esse pedaço de código, espero ter ajudado.
10. Re: Duvida em C para hardware
thyagoopusa Fedora
Post recolhido
Enviado em 23/01/2015 - 10:40h
Muitíssimo obrigado cara!
Vou estudar mais aqui e qualquer coisa eu posto aqui de novo!
_______________________________________________________________________
“I have promises to keep, and miles to go before I sleep.” - Robert Frost
Usamos cookies essenciais para manter o site funcionando e Google Analytics para métricas de audiência. Cookies de anúncios só serão carregados se você permitir.