Ir para conteúdo
Fórum Script Brasil

Edu666

Membros
  • Total de itens

    3
  • Registro em

  • Última visita

Sobre Edu666

Edu666's Achievements

0

Reputação

  1. Edu666

    Como "quebrar" uma string?

    Obrigado Marcelo, problema resolvido!
  2. Pessoal, preciso "quebrar" uma string em 3 em C.Estou enviando 3 parâmetros (x,y,z) a um PIC nessa string, tentei dividi-la pelas posições mas não funcionou. Se envio 123456789 x=123456789, y=456789 e z=789 ou seja, embora tenha definido o tamanho delas como 3 este valor não é respeitado. Se alguém tiver outra sugestão, é bem-vinda. Posso colocar espaço, vírgula ou qualquer caracter entre os 3 valores, mas preciso que estejam em uma única string. Segue o código que tentei: #include <16F877A.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #use delay(clock=20000000) #use rs232 (baud = 9600, xmit=pin_c6, rcv=pin_c7) #fuses HS,NOWDT,NOLVP char val[9]; char x[3],y[3],z[3]; void main() { printf("Selecione os parametros\n\r"); gets(val); x[0]=val[0]; x[1]=val[1]; x[2]=val[2]; y[0]=val[3]; y[1]=val[4]; y[2]=val[5]; z[0]=val[6]; z[1]=val[7]; z[2]=val[8]; printf("x é %s \n",x); printf("y é %s \n",y); printf("z é %s \n",z); }
  3. Pessoal, montei o programa em C com meus poucos conhecimentos e um pouco de pesquisa. Preciso controlar a temperatura e o nível de um reservatório de água, para a disciplina de microcontroladores. Entradas do sistema: duas chaves de nível e a leitura da temperatura (LM35 ligado ao AD0804). Saídas: resistência para aquecimento e válvula para entrada de água. Preciso mostrar no Pc através do Hyper Terminal a temperatura atual e modificar o set point de temperatura. O programa compila sem erros, mas quando executo, não mostra na tela a temperatura, e se desconecto os terminais na porta P0, enche a tela de [[[[, o comando para alterar o set point também não funciona! Agradeço se puderem me ajudar, abaixo o código: #include <at89x52.h> #include <paulmon2.h> #include <stdlib.h> #include <stdio.h> // Saidas e Entradas #define baixo P1_0 #define alto P1_2 #define valv P1_4 #define resist P1_6 #define enter 0x0D // "enter" em ASCII // Declaração das variaveis globais int ch1; // (0-100ºC) int setpoint; // set point de temperatura char teclado; // variável recebida pelo teclado // seleciona AD volatile xdata at 0x0001 unsigned int inicia_ad1; //Lê o AD volatile xdata at 0x0002 unsigned char ad1; // Declaração das funções void delay100u(void); // Delay de 100 uS. void delayms(unsigned char); // Delay multiplo de 1ms. void delays(unsigned char); // Delay multiplo de 1s. void le_ad(void); // Lê o AD selecionado. char cin(void); // Receba caractere pela serial. void testa_cin(void); // Verifica se o caractere recebido é útil. int numero(void); // Lê setpoint e converte para inteiro. void testa_cin (void); // testa caracteres //############################################################################################################################################################# // Funçao Principal void main(void) { setpoint=0; pm2_pstr("digite S para setpoint:"); // habilita no hiper terminal o set point pm2_newline(); // vai para nova linha for(;;) { le_ad(); // lê AD pm2_pstr(ch1); // indica no hiper terminal a temperatura if (setpoint > ch1) // controla temperatura { resist = 1; } else { resist = 0; } if (baixo == 1 && alto == 1) // tanque cheio { valv = 0; } if (baixo == 0 && alto == 0) // tanque nivel baixo { valv = 1; } P1_4 = baixo; // para testar entrada, tirar do programa depois } } //############################################################################################################################################################# // Sub-rotinas //-------------------------------------------------------------------------------------------------------------------------------------------------------------- void delay100u(void) { _asm mov r2,#8 0200$: mov r1,#55 0300$: djnz r1,0300$ djnz r2,0200$ _endasm; } //-------------------------------------------------------------------------------------------------------------------------------------------------------------- void delayms(unsigned char numero_ms) { numero_ms; _asm mov r0,dpl 0100$: mov r2,#8 0200$: mov r1,#55 0300$: djnz r1,0300$ djnz r2,0200$ djnz r0,0100$ _endasm; } //-------------------------------------------------------------------------------------------------------------------------------------------------------------- void delays(unsigned char numero_s) { numero_s; do { int i = 4; do { delayms(250); } while(--i); } while(--numero_s); } //-------------------------------------------------------------------------------------------------------------------------------------------------------------- void le_ad(void) // Lê o AD { inicia_ad1 = 1; // inicia conversão do AD delay100u(); // espera conversão ch1 = ad1 / 2; // lê o AD1 e ajusta escala if (ch1 > 99) // limita em 100ºC ch1 = 100; } //-------------------------------------------------------------------------------------------------------------------------------------------------------------- int numero (void) { char S[3]; int i; int k = 0; int j = 0; char X; do { X = pm2_cin(); if (X >= '0' && X <= '9') // somente salva no vetor se for número { S[j] = X; pm2_cout(S[j]); // retorna caractere lido pela serial j++; } k++; } while (X != enter && j < 3); // fica no laço até ler 3 caracteres numéricos ou até pressionar "enter" switch (j) // desloca digitos conforme a quantidade digitada { case 3: break; case 2: S[2] = S[1]; S[1] = S[0]; S[0] = '0'; break; case 1: S[2] = S[0]; S[1] = '0'; S[0] = '0'; break; default: S[2] = '0'; S[1] = '0'; S[0] = '0'; break; } i = atoi(S); // converte string para int if (i < 0) i = 0; if (i > 100) i = 100; pm2_newline(); // vai para nova linha pm2_pstr("digite o setpoint"); // indica no hiper terminal o modo selecionado pm2_newline(); // vai para nova linha return(i); // retorna o valor numérico tipo inteiro } //-------------------------------------------------------------------------------------------------------------------------------------------------------------- void testa_cin (void) // verifica se o caractere recebido é útil { teclado = pm2_cin(); // recebe dado da serial if (teclado == 's' || teclado == 'S') // seleciona set point { pm2_cout(teclado); // retorna ao hiper terminal a tecla pressionada pm2_newline(); // vai para nova linha pm2_newline(); // vai para nova linha pm2_pstr("Digite o setpoint: "); // indica no hiper terminal a espera de um comando setpoint = numero(); // lê setpoint digitado pm2_pstr(" C"); // coloca unidade pm2_newline(); // vai para nova linha pm2_newline(); // vai para nova linha pm2_newline(); // vai para nova linha pm2_newline(); // vai para nova linha pm2_pstr("digite S para setpoint: "); // indica no hiper terminal a espera de um comando } }
×
×
  • Criar Novo...