Ir ao conteúdo
  • Cadastre-se

Tecprogram

Membro Júnior
  • Posts

    10
  • Cadastrado em

  • Última visita

Tudo que Tecprogram postou

  1. Estou fazendo um app com conexão bluetooth e ele captura as mensagens ou dados que são enviados pelo arduino via Bluetooth, estou enviando essas mensagens via Bluetooth, a cada chamada envia um dado e cada dado deveria ser mostrado no seu Textview específico, então como faço para direcionar esse dado para seu TextView específico? A troca de informações já acontece só que o único dado é enviado e aparece em todos os Textview não aparece em apenas um, e gostaria que fosse as informações separadas por exemplo temperatura em um e umidade em outro. /* * Função que envia a mensagem do celular para o módulo Bluetooth, exibindo no monitor serial. */ private void enviar(String str) { if(connected != Connected.True) { Toast.makeText(getActivity(), "Não conectado", Toast.LENGTH_SHORT).show(); return; } try { String msg; byte[] data; msg = str; data = (str + newline).getBytes(); SpannableStringBuilder spn = new SpannableStringBuilder(msg+'\n'); spn.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.colorSendText)), 0, spn.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); receiveText.append(spn); service.write(data); } catch (Exception e) { onSerialIoError(e); } } //Envia a mensagem para o receptor, ou seja, o celular... do arduino para o celular private void receptor(byte[] data) { String msg = new String(data); /* if(newline.equals(newline_crlf) && msg.length() > 0) { // não mostra CRLF como ^M se diretamente antes de LF msg = msg.replace(newline_crlf, newline_lf); // tratamento especial se CRLF e LF vierem em fragmentos separados if (pendingNewline && msg.charAt(0) == '\n') { Editable edt = receiveText.getEditableText(); if (edt != null && edt.length() > 1) edt.replace(edt.length() - 2, edt.length(), ""); } pendingNewline = msg.charAt(msg.length() - 1) == '\r'; }*/ humidadeSolo.append(TextUtil.toCaretString(msg, newline.length() != 0)); receiveText.append(TextUtil.toCaretString(msg, newline.length() != 0)); } Este outro Trecho de código trata a informação recebida para ser exibida no Textview, mais qual tratamento eu deveria empregar para fragmentar essa mensagem em duas partes ou mais e eu destina-la para seus TextViews respectivos, Me ajudem por favor... static CharSequence toCaretString(CharSequence s, boolean keepNewline) { return toCaretString(s, keepNewline, s.length()); } static CharSequence toCaretString(CharSequence s, boolean keepNewline, int length) { boolean found = false; for (int pos = 0; pos < length; pos++) { if (s.charAt(pos) < 32 && (!keepNewline ||s.charAt(pos)!='\n')) { found = true; break; } } if(!found) return s; SpannableStringBuilder sb = new SpannableStringBuilder(); for(int pos=0; pos<length; pos++) if (s.charAt(pos) < 32 && (!keepNewline ||s.charAt(pos)!='\n')) { sb.append('^'); sb.append((char)(s.charAt(pos) + 64)); sb.setSpan(new BackgroundColorSpan(caretBackground), sb.length()-2, sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else { sb.append(s.charAt(pos)); } return sb; } Fico muito agradecido se alguém puder me dar essa luz...
  2. @Isadora Ferraz Infelizmente não posso utilizar função de delay, porque ela trava o processamento do Arduíno e impede ele de executar outras tarefas, necessito que enquanto ele mostra uma mensagem na tela ele possa executar outras funções, e a finção millis() possibilita isso, utilizei millis mais na minha implementação estou tendo problemas.
  3. Pessoal estou necessitando urgentemente de uma ajudinha de vocês, estou querendo imprimir algumas mensagens no meu display, não posso usar a função delay, (pois ela para o Arduino e não pode no meu projeto) usando a função milllis, queria imprimir de 2 em 2 segundos uma informação diferente no display ou seja: Temperatura: passa 2 segundos apaga a mensagem e imprime a velocidade do vento passa 2 segundos apaga a mensagem e imprime a umidade do ar passa 2 segundos e imprime outra mensagem assim por diante. Estou tendo o problema que não consigo apagar a mensagem e imprimir outra. Abaixo coloco um trecho do código. Me ajudem por favor, como faço essa impressão? #include <Wire.h> #include <LiquidCrystal_I2C.h> //Declaração de Variáveis... LiquidCrystal_I2C lcd(0x27, 16, 2); //Função com o endereço do I2C e a quantidade de colunas e linhas do display respectivamente. int tempodemensagem = 2000; unsigned long tempodedelay = 0; void setup() { lcd.begin(); //Inicializando o LCD. } void loop() { lcd.setCursor(0,0); lcd.print("Umidade: "); lcd.setCursor(0,0); lcd.print("Temperatura: "); lcd.setCursor(0,0); lcd.print("Pressão ATM: "); lcd.setCursor(0,0); lcd.print("V. Vento: "); conta_tempo(); } void conta_tempo(){ if((millis() - tempodedelay) >= tempodemensagem){ lcd.setCursor(0,0); lcd.print("Temperatura"); } if((millis() - tempodedelay) < tempodemensagem){ lcd.setCursor(0,0); lcd.print("Vel. do Vento"); } if((millis() - tempodedelay) >= 4000){ tempodedelay = millis(); } }
  4. Pessoal estou tentando fazer uma função para calcular a altura de uma árvore AVL, meu programa esta com este problema devido uma implementação que não estou sabendo como fazer que tipo de função desenvolver, abaixo coloco o código, não está completo eu queria mesmo era concluir a função de inserção, que estou enfrentando este problema, quem puder me ajudar ficarei grato, concluir a inserção lembrando que o tipo de arquivo é uma estrutura do tipo Paciente*. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <conio.h> #include "arv_avl.h" struct paciente{ char nome[100]; char sexo; int idade; float peso; float altura; }; struct arvno{ Paciente* info; int alt; ArvNo* esq; ArvNo* dir; }; struct arv{ ArvNo* raiz; }; //Função para criar a árvore como valor NULL. Arv* abb_cria(){ Arv* a = (Arv*)malloc(sizeof(Arv)); a->raiz = NULL; return a; } //===================================Funções auxxiliáres ============================; //Função para cadastro de um novo paciente na pilha. static Paciente* cadastra_paciente(){ int peso, idade,i = 0, validacao = 0; float altura; char sexo = 0, c; Paciente* PA; char* nome = (char*)malloc(100*sizeof(char)); //Abertura de vetor dinamicamente para captura do nome. if(nome == NULL) { printf("Erro ao tentar alocar espaço de memória.\n Por favor tente novamente.\n"); exit(1); } system("cls"); printf("Por favor informe o seu nome: (apenas letras)\n"); printf("* "); do { c = getch(); //Captura os dados digitados pelo o usuário. if(isalpha(c) != 0 || c == 32) { //Verifica se o os dados é uma letra. nome[i] = c; //Armazena no vetor de caractere. i++; //Incrementa o índice do vetor. printf("%c",c); //Mostra na tela o caractere digitado pelo usuário. }// end if else if(c == 8&&i){ //Se for pressionada a tecla BACKSPACE e houver caracteres já digitados nome[i] = '\0'; //O índice atual do vetor de caracteres recebe a terminação da string i--; //O índice do vetor de caracteres é decrementado printf("\b \b"); //O caractere digitado é apagado da tela }// end else i }while(c != 13); //O loop vai ser executado até que a tecla pressionada seja o ENTER (código 13 na tabela ASCII) nome[i] = '\0'; //O índice atual do vetor de caracteres recebe a terminação da string system("cls"); do { printf("\nPor favor agora informe o seu Sexo: (M) ou (F): \n"); printf("* "); c = getch(); //Captura o caractere armazenado pelo úsuario. if(isdigit(c)!=0) { //Se for um número. printf("\a"); //Emite um sinal sonoro pra acusar um eero de entrada. printf("\a"); printf("Entrada de dados inválida! Por favor digite apenas letras! Ex: (M) ou (F)\n\n"); }// end if else { validacao = 1; //Setando a variável validacao em 1 para condição de parada do while. printf("%c\n",c); //Mostra na tela o conteúdo de c. sexo = c; //Atribui o conteúdo de c para a variável sexo. }// end else. }while(validacao != 1); //Condição de parada do while system("cls"); do{ printf("Por favor informe a sua idade: \n"); printf("* "); validacao = scanf("%d", &idade); rewind(stdin); system("cls"); if(validacao == 0) { printf("\a"); printf("\a"); printf("Entrada de dados inválida! Por favor digite apenas números! Exemplo(20)\n\n"); } }while(validacao != 1); system("cls"); do{ printf("Por favor informe o seu peso(Kg): \n"); printf("* "); validacao = scanf("%d", &peso); //A variável validacao recebe o retorno do scanf. rewind(stdin); //Função que limpa o buffer. system("cls"); //Função que limpa tela if(validacao == 0) { //Condição que avalia se o retorno do scanf obteve sucesso printf("\a"); printf("\a"); printf("Entrada de dados inválida! Por favor digite apenas números! Ex:(70)\n\n"); }// end if. }while(validacao != 1); //Condição de parada do while system("cls"); do { printf("Por favor informe a sua altura(m): \n\n"); printf("* "); printf("#### Utilize vírgula para separar casas decimais!####\n"); validacao = scanf("%f", &altura); rewind(stdin); system("cls"); if(validacao == 0) { printf("\a"); printf("\a"); printf("Entrada de dados inválida! Por favor digite apenas números! Exemplo(1,70)\n\n"); }// end if }while(validacao != 1); PA = (Paciente*)malloc(sizeof(Paciente)); if(PA == NULL) { printf("Erro ao tentar criar um paciente!\nTente novamente.\n"); exit(1); } PA->altura = altura; // Copiando conteúdo da altura parâmetro para a estrutura. PA->idade = idade; // Copiando conteúdo da idade parâmetro para a estrutura. PA->peso = peso; // Copiando conteúdo do peso parâmetro para a estrutura. PA->sexo = sexo; // Copiando conteúdo do sexo parâmetro para a estrutura. strcpy(PA->nome, nome); // Copiando conteúdo do nome parâmetro para a estrutura. return PA; // Retornando o paciente já criado. }// end paciente_cria //Calcula o maior valor. static Paciente* maior(Paciente* pa, ArvNo* r){ if(strcmp(r->info->nome, pa->nome) > 0) return r; else return pa; } //Calcula a altura da árvore para o balanceamento se necessário. static int altura(ArvNo* r){ if(r == NULL){ return -1; }else{ return 1 + max2(altura->(r->esq), altura(r->dir)); } } int arv_altura(Arv* a){ return altura(a->raiz); } //Calcula o fator de balanceamento de um nó static int fator_balanceamento_no(ArvNo* a){ return labs(alt_no(a->esq) - alt_no(a->dir)); } //Função que realiza as rotação LL, rotação simples a direita. static void rotacaoLL(ArvNo* r){ ArvNo* n = r->esq; r->esq = n->dir; n->dir = r; r->alt = maior(r->esq, alt_no((r)->dir)) + 1; } static ArvNo* insere(ArvNo* r, Paciente* pa){ ArvNo* atual; if(r == NULL){ r = (ArvNo*)malloc(sizeof(ArvNo)); r->info = pa; r->alt = 0; r->esq = r->dir = NULL; } else if(strcmp(pa->nome, r->info->nome) < 0){ atual = r; r->esq = insere(r->esq, pa); //Faz a chamada inserindo na esquerda da árvore. if(fator_balanceamento_no(atual) >= 2){ if(strcmp(pa->nome, r->esq->info->nome) < 0){ rotacaoLL(r); }else{ // rotacaoLR(r); } } } else{ r->dir = insere(r->dir, pa); //Faz a chamada da função para inserir na direita da árvore. if(fator_balanceamento_no(atual) >= 2){ if(strcmp(pa->nome, r->esq->info->nome) > 0){ // rotacaoRR(r); }else{ //rotacaoLR(r); } }else{ printf("Paciente já existe no cadastro!"); return 0; } } atual->alt = maior(alt_no(atual->esq), alt_no(atual->dir)) + 1; return r; } void aa_insere(Arv* a, Paciente* pa){ a->raiz = insere(a->raiz, pa); } void arv_libera(Arv* a); void arv_imprime(Arv* a); int arv_pertence(Arv* a, char nome); ta dando o seguinte erro.
  5. De fato essa forma de implementação deu certo a tabela se manteve construída e a ordenação se efetivou. adicionado 3 minutos depois @Flávio Pedroza De fato essa forma de implementação deu certo a tabela se manteve construída e a ordenação se efetivou, na verdade o índice dos vetores que estavam faltando fornecer no meu código tem, acho que deve ter sido quando eu trouxe para cá saiu, mais ainda sim obrigado.
  6. Só que eu ia fazer assim, mais ai não da para fazer assim porque iria destruir a tabela, e fugiria do conceito de tabela Hash. adicionado 1 minuto depois Só que eu ia fazer assim, mais ai não da para fazer assim porque iria destruir a tabela, e fugiria do conceito de tabela Hash.
  7. Como eu faço para imprimir as informações dessa tabela Hash em ordem alfabética, já tentei várias implementações, mais ela só imprime de forma aleatória, no momento ela esta imprimindo mais não em ordem alfabética e eu queria em ordem alfabética, alguém poderia me dar essa força. Obs: É uma TAD, e essa parte é a .c <CODE> #include<stdio.h> #include<stdlib.h> #include<string.h> #include "hash.h" #define N 101 struct funcionario { int matricula; char nome[21]; char departamento; float salario; }; struct hash { Funcionario* v[N]; }; Hash* hash_cria(void){ Hash* tab = (Hash*)malloc(sizeof(Hash)); int i; for(i = 0; i < N; i++){ tab->v = NULL; } return tab; } static int hash(int matricula){ return(matricula % N); } Funcionario* hash_insere(Hash* tab, int matricula, char* nome, char departamento, float salario){ int h = hash(matricula); while(tab->v[h] != NULL){ h = (h + 1) % N; } Funcionario* a = (Funcionario*)malloc(sizeof(Funcionario)); a -> matricula = matricula; strcpy(a->nome, nome); a -> departamento = departamento; a -> salario = salario; tab->v[h] = a; return (a); } void hash_imprime (Hash* tab){ int i; for(i = 0; i < N; i++){ if(tab->v != NULL){ printf("Matricula: %d | Nome: %s | Departamento: %c | Salário: %.1f\n", tab->v->matricula, tab->v-> nome, tab->v->departamento, tab->v-> salario); } } } Funcionario* hash_busca(Hash* tab, int matricula){ int h = hash(matricula); while(tab->v[h] != NULL){ if(tab->v[h]->matricula == matricula){ return tab->v[h]; } h = (h+1) % N; } return NULL; } void hash_libera(Hash* tab){ int i; for(i = 0; i< N; i++){ free(tab->v); } free(tab); }
  8. Vou testar os capacitores dele para cer se tem algum com defeito, o professador pode esta folgado no local?
  9. É o seguinte, meu microonda (panasonic Style NN-ST674S) não funciona o teclado depois de um tempo ligado na tomada, ele para. Tenho que deligar da tomada ai apos um tempo em torno de meia hora desligado da tomada que liga ele funciona de boa, mais depois que vai colocar outro cozimento ele já não aceita mais o cozimento tem que desligar da tomada e passar um tempo desligado pra depois funcionar bem. Quando desligo que passa uma meia hora desligado da tomada que ligo na tomada novamente ele volta a funcionar, mais no momento que o teclado funciona que coloco um tempo de cozimento ele não conta simplesmente liga, começa a rodar mais com 3 segundos mais ou menos ele para sozinho, isso sem mostrar a contagem no dysplay, o que será? Me ajudem por favor!

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!