-
Posts
82 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
Tudo que Thiago Felipe Soares Gonçalves postou
-
Escolher um PIC
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Microcontroladores
Ele precisa de bootload pra gravar? E que não tenho muita habilidade com ele AVR. -
Tenho um projeto no qual ando trabalhando, fiz ele funcionar com o PIC16F688, porém agora quero expandir porém os perifericos e a memoria deste microcontrolador não permite isso. Preciso de um PIC que tenha pelo menos as seguintes características: 1- Ser barato e acessível. 2- Ter no minimo 3 interrupções externas, quanto mais melhor!!! 3- Ter no minimo 8k de memoria flash. 4- Tensão de operação 5V 5- Controlar Display de 7 segmentos (opcional). Se alguém tem conhecimento de algum microcontrolador que atenda isso ficarei muito feliz.
-
Lista encadeada
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em C/C#/C++
Estou reescrevendo o código e estou com um problema para colocar dados na minha lista, estou usando o mesmo struct agenda. E o código em cpp é: #include <iostream> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include "ex1.h" using namespace std; typedef struct node{ Agenda data; struct node* next; }Node; typedef struct list{ int size; Node* head; }List; List* createList(); // cria uma lista void push(List* list, Agenda data); // adicia a lista void printList(List* list); // imprime a lista void pop(List* list); // retira o ultimo nó da lista bool isEmpty(list* list); // verifica se a lista não é vazia. Node* atPos(List* list, int index); // retorna o no int indexOf(List* list, Node* node); // retorna index void erase(List* list, int index); // Apaga um no void insert(List* list, Agenda data, int index); // insere um no void xchgNodes(List* list, Node* nodeA, Node* nodeB); // trocar nos Node* min(List* list, int index); // achar o minimo da lista Node* max(List* list, int index); // achar o maximo da lista void incSort(List* list); // ordenar em ordem crescente void decSort(List* list); // ordenar em ordem decrescente List* createList(){ List* list = (List*) malloc(sizeof(List)); list->size = 0; list->head = NULL; return list; } void push(list* list, Agenda data){ Node* node = (Node*) malloc(sizeof(Node)); node->data = data; node->next = list->head; list->head = node; list->size++; } void printList(List* list){ Node* pointer = list->head; if(isEmpty(list)){ printf("Lista vazia\n"); return; } while(pointer != NULL){ printf("Nome: %s \n", pointer->data.nome); printf("DDD: %d \n", pointer->data.DDD); printf("Telefone: %d \n", pointer->data.tel); cout << "Nascimento: " << pointer->data.dia << "/" << pointer->data.mes << "/" << pointer->data.ano << "\n\n"; pointer = pointer->next; } printf("\n"); } bool isEmpty(List* list){ return (list->size == 0); } void pop(List* list){ if(!isEmpty(list)){ Node* pointer = list->head; list->head = pointer->next; free(pointer); list->size--; } } Node* atPos(List* list, int index){ if(index >= 0 && index < list->size){ Node* node = list->head; int i; for(i=0;i<index;i++){ node = node->next; } return node; } printf("Indice invalido\n"); return NULL; } int indexOf(List* list, Node* node){ if(node != NULL){ Node* pointer = list->head; int index = 0; while(pointer != node && pointer != NULL){ pointer = pointer->next; index++; } if(pointer != NULL){ return index; } } printf("No não pertencente a lista.\n"); return -1; } void insert(List* list, Agenda data, int index){ if(index == 0){ push(list, data); }else{ Node* current = atPos(list, index); if(current != NULL){ Node* previous = atPos(list, index - 1); Node* newNode = (Node*) malloc(sizeof(Node)); newNode->data = data; previous->next = newNode; newNode->next = current; list->size++; } } } void erase(List* list, int index){ if(index == 0){ pop(list); }else{ Node* current= atPos(list, index); if(current != NULL){ Node* previous = atPos(list, index - 1); previous->next = current->next; free(current); list->size--; } } } void xchgNodes(List* list, Node* nodeA, Node* nodeB){ if(nodeA == nodeB){ return; } int indexA = indexOf(list, nodeA); int indexB = indexOf(list, nodeB); if(indexA == -1 || indexB == -1){ return; } if(indexA > indexB){ nodeA = nodeB; nodeB = atPos(list, indexA); indexA = indexB; indexB = indexOf(list, nodeB); } Node* pb = atPos(list, indexB - 1); if(nodeA == list->head){ list->head = nodeB; }else{ Node* pa = atPos(list, indexA - 1); pa->next = nodeB; } pb->next = nodeA; Node* pointer = nodeA->next; nodeA->next = nodeB->next; nodeB->next = pointer; } Node* min(List* list, int index){ Node* pointer = atPos(list, index); if(pointer != NULL){ Node* minNode = pointer; while(pointer != NULL){ if(pointer->data.ano < minNode->data.ano){ minNode = pointer; } pointer = pointer->next; } return minNode; } return NULL; } Node* max(List* list, int index){ Node* pointer = atPos(list, index); if(pointer != NULL){ Node* maxNode = pointer; while(pointer != NULL){ if(pointer->data.ano > maxNode->data.ano){ maxNode = pointer; } pointer = pointer->next; } return maxNode; } return NULL; } void incSort(List* list){ int i; for(i=0;i<list->size - 1;i++){ xchgNodes(list, atPos(list, i), min(list, 1)); } } void decSort(List* list){ int i; for(i=0;i<list->size - 1;i++){ xchgNodes(list, atPos(list, i), max(list, 1)); } } int main(int argc, char** argv) { List* l = createList(); Agenda data; data.nome = "Thiago"; data.DDD = 41; data.tel = 998349123; data.dia = 14; data.mes = 02; data.ano = 1992; push(l, data); printList(l); return 0; } A unica variável que não consigo passar é o data.nome, sempre da erro de todas as formas alguém pode me ajudar? -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
Isso ai. -
Estou com o seguinte problema, tenho um exercício que não consigo terminar segue o enunciado. O que consegui fazer do main até agora foi isso: #include<iostream> #include<stdlib.h> #include<string.h> #include"Exercicio 1.h" struct agenda *insere(struct agenda *L, char nome[], int ddd, int tel, int ano, int mes, int dia); int main(){ struct agenda *ini; ini = NULL; int x = 0; char nome1[30]; int ddd1 = 0; int tel1 = 0; int ano1 = 0; int mes1 = 0; int dia1 = 0; printf("Lista de Comandos:\n\n"); printf("1 - Criar Novo Contato.\n"); printf("2 - Editar Conato.\n"); printf("3 - Excluir Contato.\n"); printf("4 - Mostar todos os Contatos em ordem Alfabetica.\n"); printf("5 - Buscar o Contato pelo Nome.\n"); printf("6 - Buscar o Contato pelo Aniversario.\n"); printf("7 - Imprimir todos os contatos.\n\n"); while(1){ printf("Comando: "); scanf("%d", &x); printf("\n\n"); switch(x){ case 1: printf("Inserir novo contato:\n\n"); printf("Nome: "); fflush(stdin); gets(nome1); printf("\n\n"); printf("DDD: "); scanf("%d", &ddd1); printf("Telefone: "); scanf("%d", &tel1); printf("Data de Nasc.: "); scanf("%d %d %d", &dia1, &mes1, &ano1); ini = insere(ini, nome1, ddd1, tel1, ano1, mes1, dia1); break; } } } struct agenda *insere(struct agenda *L, char nome[], int ddd, int tel, int ano, int mes, int dia){ struct agenda *novo = (struct agenda *) malloc(sizeof(struct agenda)); strcpy(novo->nome,nome); novo->ddd = ddd; novo->tel - tel; novo->ano = ano; novo->mes = mes; novo->dia - dia; novo->prox = L; return novo; } E meus struct com as variáveis da lista: struct agenda{ char nome[30]; int ddd; int tel; int ano; int mes; int dia; struct agenda* prox; }; Alguém pode me ajudar a terminar o exercício.
-
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
você não acredita mas usando um biblioteca chamada customStep.h ele funcionou direitinho sem precisa fazer a troca dos pinos. -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
você não vai acreditar mas era isso mesmo, mas é estranho né porque teoricamente você deve seguir as cores para para fazer a ligação, mas em fim deu certo, obrigado pela força. -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
Vou tentar isso e te aviso se der certo. -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
Testei o que você me pediu até com os leds, mas deu na mesma girando para o mesmo lado. Isso ta zoado demais. -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
Então eu já testei com portas diferentes, vários uln2003 que tenho aqui, e ainda testei com dois motores de passo que tenho e os dois estão dando o mesmo problema, esses dois motores de passo eu tenho faz 6 anos e utilizei muito pouco tipo umas de 3 ou 4 vezes, tipo esta muito estranho. Tipo um problema bem zoado. -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
Sim, exatamente montei o circuito utilizando as portas 13,12,11,10 pois ainda vou usar as portas 7,6,5,4 para outro motor de passo. -
Servo Motor girando em um único sentido
Thiago Felipe Soares Gonçalves postou um tópico em Eletrônica
Boa Tarde, eu estou montando uma plotter e estou com um problema que nunca tinha visto. O meu motor de passo esta girando em um único sentido, mesmo fazendo a inversão do sentido na programação ele continua por girar no mesmo sentido, até se eu inverter a posição dos pinos ele continua fazendo a mesma coisa sempre girando no sentido horário. O modelo do meu motor de passo é 28BYJ-48. Segue a programação utilizada: // Interação Arduino com Motor de Passo #include <Stepper.h> // Incluindo a biblioteca do Motor de Passo const int stepsPerRevolution = 200; // Numero de passo por volta Stepper myStepper(stepsPerRevolution, 13,12,11,10); // Faz a inicialização da Biblioteca usando as portas 13,12,11,10 // setup (executado apenas uma vez) void setup() { myStepper.setSpeed(60); // velocidade do motor definida em 60 } // laço principal (executado indefinidamente) void loop() { // Estrutura de repetição usada para limitar o tempo que o motor vai girar no sentido anti-horário for (int i = 0; i < 10; i++){ myStepper.step(stepsPerRevolution); // sentido anti-horario } delay(5000); // Estrutura de repetição usada para limitar o tempo que o motor vai girar no sentido horário for (int i = 0; i < 10; i++){ myStepper.step(-stepsPerRevolution); // sentido horario } delay(5000); } Segue também a imagem com as ligações entre o arduino o shield ULN2003 e o motor de passo. Se alguém poder me ajudar acho que não fiz nada errado, então isso pode significa que o problema são os motores no pior cao podem estar queimados. -
Como achar caracteres específicos numa string?
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em C/C#/C++
Então encontrei a resposta da pergunta. A maneira mais simples de fazer é assim: #include<stdio.h> #include<string.h> #include<iostream> int main(){ char palavra[30]; char comp[6] = "aeiou"; int x = 0; int y = 0; printf("Digite a frase ah criptografar:\n"); gets(palavra); for(x=0;x<30;x++){ for(y=0;y<5;y++){ if(palavra[x]==comp[y]){ palavra[x] = '*'; } } } printf("%s", palavra); } Muito obrigado a todos que responderam. -
Como achar caracteres específicos numa string?
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em C/C#/C++
Não muito. -
Como achar caracteres específicos numa string?
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em C/C#/C++
Sim, eu pensei em fazer isso mas não consigo pegar carácter por carácter, ou melhor, acho que não sei como fazer isso. -
Como achar caracteres específicos numa string?
Thiago Felipe Soares Gonçalves postou um tópico em C/C#/C++
Faça um programa para criptografar o conteúdo de uma frase digitada pelo usuário, ou seja, a criptografia troca as vogais da frase por *. A frase resultante deverá ser apresentada ao usuário. Exemplo: Frase: EU ESTOU NA UNIVERSIDADE. Saída: ** *ST** N* *N*V*RS*D*D*. -
Dimmer com PIC16F688
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Microcontroladores
Descobri qual era o problema, o registrador TRISA devia esta com as flags assim 0x05, pois estou usando como entrada os pinos RA0 e RA2,respectivamente para o potenciômetro e para interrupção pelo zero-cross. -
Dimmer com PIC16F688
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Microcontroladores
É basicamente isso, mas estou usando o angulo de disparo de um tiristor, quando pego o AD do potenciômetro comparo ele com uma regra de 3 com o angulo de disparo, posteriormente faço uma rega de 3 para achar o tempo que devo dar o pulso para acionar o triac. Os ifs no código é pra limitar o min e max tempo de disparo para não dar problemas com chaveamento na passagem por zero. O meu problema realmente é que meu AD não esta lendo o pino com o potenciômetro nesse código e não consegui descobrir porque. -
Boa noite, estou tentando implementar um Dimmer com o PIC16F688, mas estou com problema quando coloco a leitura de um potenciômetro no programa. Segue o programa. bit control; float rad = 0.00; float T1 = 0.00; float T2 = 0.00; int Tempo = 0; char msbyte = 0; char lsbyte = 0; int ADPOT = 0; void Interrupt() { if (INTF_bit) { lsbyte = Tempo; msbyte = (Tempo & 0xFF00) >> 8; TMR1H = msbyte; TMR1L = lsbyte; TMR1ON_bit = 0x01; control = ~control; INTF_bit = 0x00; if(control) INTEDG_bit = 0x01; else INTEDG_bit = 0x00; } if(TMR1IF_bit) { TMR1IF_bit = 0x00; RC1_bit = 0x01; delay_us(10); RC1_bit = 0x00; TMR1ON_bit = 0x00; } } void main() { CMCON0 = 0x07; T1CON = 0x00; TMR1H = 0x00; TMR1L = 0x00; TMR1IF_bit = 0x00; TMR1IE_bit = 0x01; INTCON = 0xD0; INTEDG_bit = 0x00; TRISA = 0x01; TRISC = 0x00; ANSEL = 0x01; ADCON0 =0x01; PORTA = 0x01; PORTC = 0x00; control = 0x00; while(1) { delay_us(100); ADPOT =ADC_Read(0); rad = (3.14*ADPOT)/1023; T1 = (rad*8333.33)/3.14; if(T1<100) { T1 = 100; } if(T1>8233) { T1 = 8233; } T2 = 65536 - T1; Tempo = (int)T2; } } Se alguém conseguir me ajudar fico muito agradecido.
-
Mini Trafos
Thiago Felipe Soares Gonçalves respondeu ao tópico de Thiago Felipe Soares Gonçalves em Eletrônica
Sera que existe só a placa do carregador para comprar? -
Boa Tarde, pessoal to com o seguinte problema, estou procurando um fornecedor de mini trafos preciso de um que tenho algo no secundario de 7V / 150mA aproximadamente, queria algo do tamanho daqueles trafos de carregador de celular, pois pretendo montar meu circuito para ser alimentado pela rede dentro de uma caixa de fonte um pouco maior que um carregador.
-
Não deu boa, continua não identificando a expressão, olha o que estou fazendo: bit control; float rad = 0.00; float T1 = 0.00; int Tempo = 0x00; void Interrupt() { if (INTF_bit) { Tempo = (int) T1; lsbyte_int8 = Tempo; msbyte_int8 = (Tempo & 0xFF00) >> 8; TMR1H = msbyte_int8; TMR1L = lsbyte_int8; TMR1ON_bit = 0x01; control = ~control; INTF_bit = 0x00; if(control) INTEDG_bit = 0x01; else INTEDG_bit = 0x00; } if(TMR1IF_bit) { TMR1IF_bit = 0x00; RC1_bit = 0x01; delay_us(10); RC1_bit = 0x00; TMR1ON_bit = 0x00; } } void main() { CMCON0 = 0x07; ANSEL = 0x00; T1CON = 0x00; INTCON = 0xD0; INTEDG_bit = 0x00; TMR1IF_bit = 0x00; TMR1H = 0xEF; TMR1L = 0xB9; TMR1IE_bit = 0x01; TRISC = 0x00; RC0_bit = 0x00; RC1_bit = 0x00; RC2_bit = 0x00; control = 0x00; while(1) { while(rad>3.14) { rad = rad + 0.01; T1 = (rad*8333.33)/3.14; delay_us(100); } rad = 0.00; } }
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