Ir ao conteúdo
  • Cadastre-se

Ivan (eletronic)

Membro Pleno
  • Posts

    417
  • Cadastrado em

  • Última visita

  1. Então no NRF eu to tentando usar o codigo deste video, entendi e to tentando melhor. Mas ainda nao consegui testar por falta de tempo e dos componentes
  2. Cara não estou achando aqui esse tuto que comentou, o unico link que encontro abre uma pagina de um forum com dois posts vazios. Poderia enviar novamente pf? O codigo que eu tenho hoje para o BMP085 é: //************************************************ // BMP085 Barometric Pressure Sensor // // - Datasheet: http://www.bosch-sensortec.com/content/language1/downloads/BST-BMP085-DS000-05.pdf // // - Written in CCS PCH C using floating point math // - Several integer math versions of this driver exist but the speed improvement is // not warranted in typical weather station type applications // // - Based on a paper posted to thebackshed.com by DuinoMiteMegaAn // http://www.thebackshed.com/forum/forum_posts.asp?TID=4768&PN=9 // // - Usage: // Call once: bmp085Calibration(); // P_mBar_float = BMP085Pressure(true); // calls for temperature first // P_mBar_float = BMP085Pressure(false); // skips temperature reading, assumes done previously // T_Cent_float = BMP085Temperature(); // t_reading = _Temp; _Temp set on every temperature reading // Note: pressure reading is temp compensated so call for temp reading prior to pressure reading periodically or on each reading // // Al Testani // 08/17/12 //************************************************ // place a #use i2c statement in the main program and comment this out if not applicable #use i2c(master, sda=PIN_C4, scl=PIN_C3, FAST, FORCE_HW) #include <math.h> const int8 OVS_S = 3; // Oversampling Setting (0,1,2,3 from ultra low power, to ultra hi-resolution) #define BMP085_ADDRESS_W 0xEE // I2C Write address of BMP085 #define BMP085_ADDRESS_R 0xEF // I2C Read address of BMP085 #define P_CORRECTION 1.5 // in mBars - factor to adjust for elevation to match local weather station pressure // this value for 14' above sea level (in Boca Raton, Florida) // Calibration values signed int16 ac1; signed int16 ac2; signed int16 ac3; int16 ac4; int16 ac5; int16 ac6; signed int16 b1; signed int16 b2; signed int16 mb; signed int16 mc; signed int16 md; // floating point cal factors float _c3; float _c4; float _b1; float _c5; float _c6; float _mc; float _md; // polynomomial constants float _x0; float _x1; float _x2; float _y0; float _y1; float _y2; float _p0; float _p1; float _p2; float _s; // T-25, used in pressure calculation - must run temperature reading before pressure reading float _Temp; // set after every temperature or temperature/pressure reading int8 BMP085_Read_Byte(int8 add) { int8 data; i2c_start(); i2c_write(BMP085_ADDRESS_W); i2c_write(add); i2c_start(); i2c_write(BMP085_ADDRESS_R); data=i2c_read(0); i2c_stop(); return(data); } int16 BMP085_Read_Int(int8 add) { int8 msb, lsb; int16 retval; i2c_start(); i2c_write(BMP085_ADDRESS_W); i2c_write(add); i2c_start(); i2c_write(BMP085_ADDRESS_R); msb = i2c_read(); lsb = i2c_read(0); i2c_stop(); retval = make16(msb, lsb); return (retval); } void BMP085_Write_Byte(int8 add, int8 data) { i2c_start(); i2c_write(BMP085_ADDRESS_W); i2c_write(add); i2c_write(data); i2c_stop(); } void bmp085Calibration() { // read BMP085 EEPROM cal factors ac1 = BMP085_Read_Int(0xAA); ac2 = BMP085_Read_Int(0xAC); ac3 = BMP085_Read_Int(0xAE); ac4 = BMP085_Read_Int(0xB0); ac5 = BMP085_Read_Int(0xB2); ac6 = BMP085_Read_Int(0xB4); b1 = BMP085_Read_Int(0xB6); b2 = BMP085_Read_Int(0xB8); mb = BMP085_Read_Int(0xBA); mc = BMP085_Read_Int(0xBC); md = BMP085_Read_Int(0xBE); // calculate floating point cal factors _c3 = 0.0048828125 * ac3; // 160 * pow2(-15) * ac3; _c4 = 0.000000030517578125 * ac4; // 1E-3 * pow2(-15) * ac4; _c5 = 0.00000019073486328125 * ac5; // (pow2(-15)/160) * ac5; _c6 = (float)ac6; _b1 = 0.00002384185791015625 * b1; // 25600 * pow2(-30) * b1; _mc = 0.08 * mc; // (pow2(11) / 25600) * mc; _md = (float)md / 160; // calculate polynomial constants _x0 = (float)ac1; _x1 = 0.01953125 * ac2; // 160 * pow2(-13) * ac2; _x2 = 0.000762939453125 * b2; // 25600 * pow2(-25) * b2; _y0 = _c4 * 32768; //_c4 * pow2(15); _y1 = _c4 * _c3; _y2 = _c4 * _b1; _p0 = 2.364375; _p1 = 0.992984; _p2 = 0.000004421; } // Read the uncompensated temperature value int16 BMP085ReadUT() { int16 ut; // Write 0x2E into Register 0xF4 BMP085WriteByte(0xF4, 0x2E); delay_ms(5); // Wait at least 4.5ms // Read two bytes from registers 0xF6 and 0xF7 ut = BMP085ReadInt(0xF6); return((float)ut); } // Read the uncompensated pressure value int32 bmp085ReadUP() { int8 msb, lsb, xlsb; float p; // Write 0x34+(OSS<<6) into register 0xF4 // Request a pressure reading w/ oversampling setting BMP085WriteByte(0xF4, (0x34 + (OVS_S<<6)) ); // Wait for conversion, delay time dependent on OSS switch (OVS_S) { case 0: delay_ms(5); break; case 1: delay_ms(8); break; case 2: delay_ms(14); break; case 3: delay_ms(26); break; } // Read register 0xF6 (MSB), 0xF7 (LSB), and 0xF8 (XLSB) msb = BMP085ReadByte(0xF6); lsb = BMP085ReadByte(0xF7); xlsb = BMP085ReadByte(0xF8); p = (256*msb) + lsb + (xlsb/256); return(p); } float BMP085GetTemp(float _tu) { float alpha, T; alpha = _c5 * (_tu - _c6); T = alpha + (_mc/(alpha + _md)); _s = T - 25; return(T); } float BMP085GetPressure(float _pu) { float x, y, z; float P; x = _x2*_s*_s + _x1*_s + _x0; y = _y2*_s*_s + _y1*_s + _y0; z = ((float)_pu - x) / y; P = _p2*z*z + _p1*z + _p0; P += P_CORRECTION; return(P); } float BMP085Pressure(boolean getTemp) { if (getTemp) _Temp = BMP085GetTemp(BMP085ReadUT()); // creates _s required for pressure calculation return(BMP085GetPressure(BMP085ReadUP())); } float BMP085Temperature(void) { _Temp = BMP085GetTemp(BMP085ReadUT()); return(_Temp); } [spoiler/] Mas não sei to suspeitando um pouco desses calculos Ps: se alguem puer me lembrar como usa aquele comando spoiler pra "fechar" o codigo postado agradeço.
  3. Putz aphawk, assim vai parecer que to te perseguindo né cara...rsrsrrs Mas nao estou. você poderia nos passar o codigo desse BMP085?? Peguei um codigo no forum da CCS mas to achando ele muito simples e queria dar uma olhada no seu. E caso ja tenha trabalhado com: HMC5883L, MPU9250 e MMA7455L tambem to aceitando. To tentando trabalhar com todos esses sensores. Att, Ivan H.
  4. aphawk você fez bibloteca no CCS para esse ESP8266?? Se sim poderia nos passar? Hoje estou lutando pra fazer o NRF24L01 funcionar, assim que eu conseguir esse feito seria legal conseguir com esse também. Att, Ivan H.
  5. Nosso amigo Mateus ja postou um codigo exemplo cara. segue abaixo: #include <16F628A.h> #FUSES NOWDT //No Watch Dog Timer #FUSES INTRC_IO //Internal RC Osc, no CLKOUT #FUSES NOPUT //No Power Up Timer #FUSES NOPROTECT //Code not protected from reading #FUSES NOBROWNOUT //No brownout reset #FUSES MCLR //Master Clear pin used for I/O #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOCPD //No EE protection #use delay(clock=4000000) int16 time; float distance; #define trig pin_B1 #define echo pin_B0 void main() { delay_ms(1000); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); while(true) { output_high(trig); delay_us(20); output_low(trig); while(!input(ECHO)) {} set_timer1(0); while(input(ECHO)) {} time=get_timer1(); distance =(time*340)/2.0 ; delay_ms(1000); } }
  6. Ola pessoal, Estou tentando encontrar um biblioteca para ccs que faça o display do nokia 3310 funcionar com um pic. No entanto tenho testado alguns que não chegam a compilar como o do link abaixo: http://www.ccsinfo.com/forum/viewtopic.php?p=150398 link do display: http://www.dx.com/pt/p/replacement-1-6-lcd-screen-with-blue-backlight-for-nokia-5110-blue-145860 Alguem teria ou saberia me auxiliar a encontrar o erro????
  7. Encontrei o erro, estou usando o 18F4550 onde as portas SCL e SDA tambem são entradas analogicas. Como eu estava "setando" todas as portas como analogicas dava um conflito tremendo que inpedia que fizesse tanto a conversão AD quanto se comunicar com o RTC. Grato pela ajuda pessoal.
  8. Ax() é uma função cria para fazer a leitura do canal Ad. Em testes aqui agora pouco percebi que chamo a rotina e o programa fica preso dentro dele, preciso fazer o codigo executar uma vez e sair dessa rotina. lcd_putc é uma função da biblioteca do display para colocar os caracteres na tela do lcd, qto ao printf aparentemente ele nao esta consumindo memoria. Com esses testes percebi tambem que o programa trava quando eu chamo ele pra ler o RTC, ou seja quando faço isso: ds1307_get_date(day,month,yr,dow); ds1307_get_time(hrs,min,sec); ...qto a isso eu não sei o que fazer... while(true) { set_adc_channel(1); // Prepara o canal leitura da Temperatura delay_us(10); temperatura = read_adc(); T = (0.08145 * temperatura); // Converte em graus Celsius lcd_gotoxy(1,3); // Coloca Temperatura no Display printf(lcd_putc,"%.1f%cC",T,0xDF); output_high(pin_A4); delay_ms(100); botao_enter = input(pin_b5); if(!botao_enter && !db_3) { menu = 1; if(filtro != 0) { filtro--; } else { db_3 = 1; valor = 1; menu = 1; } } else { filtro = t_filtro; db_3 = 0; } if(menu == 1) { Menu_principal(); } else menu = 0; if(sensor == 1) { Menu_sensor(); } if(acionamento == 1) { Menu_acionamento(); } if(data == 1) { Menu_data(); } ds1307_get_date(day,month,yr,dow); ds1307_get_time(hrs,min,sec); output_low(pin_a4); lcd_gotoxy(1, 1); printf(lcd_putc,"%s %02d:\%02d:\%02d",dia_da_semana[dow-1],hrs,min,sec); lcd_gotoxy(1, 2); printf(lcd_putc,"%02d/\%02d/\%02d",day,month,yr); }
  9. URGENTE Problemas com AD pic Senhores a algum tempo deixei esse codigo funcionando perfeitamente, hoje quando terminei um outro codigo gigante fui testar esse novamente para então junta-los. No entanto esse codigo parece nao funcionar mais, quando o fiz era pro 16f877 hj é pro 18f4550 mas nao funciona em nenhum dos dois. O display fica travado em dois valores e nao sai disso .... como se nao tivesse executando o programa #include <18f4550.h> #device adc = 10 //Habilitar ADC de 10 bits #use delay(clock = 20000000) #fuses HS //Clock > 4Mhz #fuses NOWDT //No Watch Dog Timer #fuses PUT //Power Up Timer #fuses NOBROWNOUT //No brownout reset #fuses NOLVP //No low voltage progming, B3(PIC16)or B5(PIC18)used for I/O #fuses NOPROTECT //Code not protected from reading #fuses NOCPD //No EE protection #FUSES NODEBUG // No Debug mode for ICD #FUSES NOWRT // Program memory not write protected #include "C:\Users\ivan\Desktop\Codigos\Bibliotecas\4550\Flex_lcd_20x4_4550.c" #include "C:\Users\ivan\Desktop\Codigos\Bibliotecas\4550\DS1307 - 4550.c" #include <internal_eeprom.c> #include <stdlib.h> /************************** Variaveis do Track ********************************/ float An; // Variável da Conversão do Angulo float T; // Variável da Conversão de Temperatura float C; // Variável da Conversão da Corrente de Saída float Ten; // Variável da Conversão da Corrente de Saída int16 ldr1, ldr2, ldr3, ldr4; // Variáveis da Conversão do LDR int1 fim_dir; int1 fim_esq; int16 A0() // Leitura da Inclinação { int16 angulo = 0; int j; set_adc_channel(0); // Prepara o canal leitura da Inclinação delay_us(10); for (j=0; j<16; j++) // Faz a leitura 15x { angulo = angulo + read_adc(); } angulo = (angulo/16); return(angulo); } int16 A1() // Leitura da Temperatura { int16 temperatura = 0; int j; set_adc_channel(1); // Prepara o canal leitura da Temperatura delay_us(10); for (j=0; j<16; j++) // Faz a leitura 15x { temperatura = temperatura + read_adc(); } temperatura = (temperatura/16); return(temperatura); } int16 A2() // Leitura LDR1 { int16 ldr1 = 0; int j; set_adc_channel(2); // Prepara o canal leitura do ldr1 delay_us(10); for (j=0; j<16; j++) // Faz a leitura 15x { ldr1 = ldr1 + read_adc(); } ldr1 = (ldr1/16); return(ldr1); } int16 A3() // Leitura LDR2 { int16 ldr2 = 0; int j; set_adc_channel(3); // Prepara o canal leitura do ldr2 delay_us(10); for (j=0; j<16; j++) // Faz a leitura 15x { ldr2 = ldr2 + read_adc(); } ldr2 = (ldr2/16); return(ldr2); } int16 A4() // Leitura LDR3 { int16 ldr3 = 0; int j; set_adc_channel(4); // Prepara o canal leitura do ldr1 delay_us(10); for (j=0; j<16; j++) // Faz a leitura 15x { ldr3 = ldr3 + read_adc(); } ldr3 = (ldr3/16); return(ldr3); } int16 A5() // Leitura LDR4 { int16 ldr4 = 0; int j; set_adc_channel(5); // Prepara o canal leitura do ldr1 delay_us(10); for (j=0; j<16; j++) // Faz a leitura 15x { ldr4 = ldr4 + read_adc(); } ldr4 = (ldr4/16); return(ldr4); } int16 A6() // Leitura LDR5 { int16 ldr5 = 0; int j; set_adc_channel(6); // Prepara o canal leitura do ldr1 delay_us(10); for (j=0; j<16; j++) // Faz a leitura 15x { ldr5 = ldr5 + read_adc(); } ldr5 = (ldr5/16); return(ldr5); } int16 A7() // Leitura Corrente do PFV { int16 corrente = 0; int j; set_adc_channel(7); // Prepara o canal Corrente do PFV delay_us(10); for (j=0; j<16; j++) // Faz a leitura 15x { corrente = corrente + read_adc(); } corrente = (corrente/16); return(corrente); } int16 A8() // Leitura Tensão do PFV { int16 tensão = 0; int j; set_adc_channel(8); // Prepara o canal leitura tensão PFV delay_us(10); for (j=0; j<16; j++) // Faz a leitura 15x { tensão = tensão + read_adc(); } tensão = (tensão/16); return(tensão); } void main() { ds1307_init(); lcd_init(); data_hora = read_eeprom(0x07); // Variavel para informar se o RTC ja foi ajustado pela primeira vez delay_ms(10); lcd_putc("\f"); //Limpa display db_1 = db_2 = db_3 = 0; while(true) { //Medida do Angulo de Inclinação (AN0) An = ((0.28325 * A0())-185.573); lcd_gotoxy(1,3); // Coloca Angulo no Display printf(lcd_putc,"%.2f%c",An,0xDF); //Medida da Temperatura (AN1) T = (0.08145 * A1()); // Converte em graus Celsius lcd_gotoxy(1,4); // Coloca Temperatura no Display printf(lcd_putc,"%.1f%cC",T,0xDF); } } [/code][/spoiler]
  10. COnsegui finalmente usar o biblioteca interna do CCS. É tão simples que nao me passou pela cabeça. write_int16_eeprom( adress, data); data = read_int16_eeprom(adress);
  11. Ola pessoal, estou tentando gravar uma variavel do tipo int16 na eeprom do pic e nao estou conseguindo. Ja tentei usar a biblioteca internal_eeprom mas eu nao consegui faze-la funcionar. Estou usando o CCS
  12. Então senhores, por causa de alguns fatores que vão surgir em breve preciso usar aquela estrutura com microcontroladores. Por isso insisto na ajuda com aquele metodo de processamento. Mas fico grato pelas dicas de circuitos
  13. Então estou usando esse sensor mencionado com dois conjuntos de LDR e to trabalhando no codigo do RTC, vide link abaixo: http://forum.clubedohardware.com.br/forums/topic/944761-problemas-com-ds1307-pic-em-c/page-3#entry5950024 onde mais pra frente ele me dira o horario de começo e fim do "rastreamento solar" e outras funçoes tambem. Ja a questão do motor fazer uma varredura ja não acho muito necessario mas vou pesquisar um pouco. Mas nesse codigo que postei acham que deveria mudar alguma coisa?
  14. Nao, o circuito esta sendo feito com base em um PIC16F877. Toda a comparação da luminosidade esta sendo feita com as entradas AD do Pic.
  15. Bom dia senhores, desculpe a sumida que dei do meu proprio topico...mas não deixei de trabalhar no mesmo nem um segundo. Bom quanto ao post do aphawk, eu sou de Campinas e nesse tempo visitei empresas que trabalham com esta tecnologia, laboratorios que fabricam e pesquisam as mesmas e fui tambem na Usina Tanquinho. Nessas visitas ficou claro que a inclinação é um fator primordial sim, pois na Usina Tanquinho por exemplo a quantidade de paineis fixos sã0 3x maior que a dos moveis e eles produzem a mesma coisa. Quanto ao CI de medição de luminosidade, eu pesquisei um bocado e não o encontrei, então ainda estou usando o LDR, rsrsrsrrsrsrs. Abaixo segue codigo que estou fazendo agora para o track, paralelamente estou desenvolvendo codigos para implementa-lo mas ainda não é o caso de posta-los. /*****************************************************************************/ /* Trabalho de Curso 2014 - UNIP - Swift */ /* Solar Track */ /* Autor: Ivan Henrique */ /* Compilado com o PICC-CCS */ /* */ /* Notas: */ /* Lado 1, LDR1, In = An4, Out = B7 | Acelerometro AN0 */ /* Lado 2, LDR2, In = An5, Out = B6 | LM35 AN1 */ /* Direita, LDR3, In = An6, Out = B5 | Corrente PV AN2 */ /* Esquerda, LDR4, In = An7, Out = B4 | Tensão PV AN3 */ /* Fim de Curso direita D0 | */ /* Fim de Curso direita D1 | */ /*****************************************************************************/ #include <16f877a.h> #device adc=10 //Habilitar ADC de 10 bits #use delay(clock=20000000) #fuses HS //Clock > 4Mhz #fuses NOWDT //No Watch Dog Timer #fuses PUT //Power Up Timer #fuses NOBROWNOUT //No brownout reset #fuses NOLVP //No low voltage progming, B3(PIC16)or B5(PIC18)used for I/O #fuses NOPROTECT //Code not protected from reading #fuses NOCPD //No EE protection #include "C:\Users\ivan.aguiar\Desktop\Codigos\Bibliotecas\Flex_lcd_16x4_877.c" #include "C:\Users\ivan.aguiar\Desktop\Codigos\Bibliotecas\DS1307.c" #include <stdlib.h> /*****************************************************************************/ /* Variaveis */ /*****************************************************************************/ int16 angulo; // Variáveis da Conversão do Angulo float An; int16 temperatura; // Variáveis da Conversão de Temperatura float T; int16 corrente; // Variáveis da Conversão da Corrente de Saída float C; int16 tensão; // Variáveis da Conversão da Corrente de Saída float Ten; int16 ldr1, ldr2, ldr3, ldr4; // Variáveis da Conversão do LDR int precisao; // Variaveis para correção do PFV int1 fim_dir; int1 fim_esq; /*****************************************************************************/ /* Sub Rotinas de Leitura do conversor AD */ /*****************************************************************************/ void A0() //Leitura da Inclinação { int16 a, b,c; set_adc_channel(0); // Prepara o canal leitura da Inclinação delay_us(10); a = read_adc(); b = read_adc(); c = read_adc(); angulo = ((a + b+ c)/3); } void A1() //Leitura da Temperatura { int16 a, b,c; set_adc_channel(1); // Prepara o canal leitura Temperatura delay_us(10); a = read_adc(); b = read_adc(); c = read_adc(); temperatura = ((a + b+ c)/3); } void A2() // Leitura Corrente do PFV { int16 a, b,c; set_adc_channel(2); // Prepara o canal Corrente do PFV delay_us(10); a = read_adc(); b = read_adc(); c = read_adc(); corrente = ((a + b+ c)/3); } void A3() // Leitura Tensão do PFV { int16 a, b,c; set_adc_channel(3); // Prepara o canal leitura tensão PFV delay_us(10); a = read_adc(); b = read_adc(); c = read_adc(); tensão = ((a + b+ c)/3); } void A4() // Leitura LDR1 { int16 a, b,c; set_adc_channel(4); // Prepara o canal leitura do ldr1 delay_us(10); a = read_adc(); b = read_adc(); c = read_adc(); ldr1 = ((a + b+ c)/3); } void A5() // Leitura LDR2 { int16 a, b,c; set_adc_channel(5); // Prepara o canal leitura do ldr1 delay_us(10); a = read_adc(); b = read_adc(); c = read_adc(); ldr2 = ((a + b+ c)/3); } void A6() // Leitura LDR3 { int16 a, b,c; set_adc_channel(6); // Prepara o canal leitura do ldr1 delay_us(10); a = read_adc(); b = read_adc(); c = read_adc(); ldr3 = ((a + b+ c)/3); } void A7() // Leitura LDR4 { int16 a, b,c; set_adc_channel(7); // Prepara o canal leitura do ldr1 delay_us(10); a = read_adc(); b = read_adc(); c = read_adc(); ldr4 = ((a + b+ c)/3); } /*****************************************************************************/ /* Programa Principal */ /*****************************************************************************/ void main() { setup_adc_ports(ALL_ANALOG); // Define as entradas analógicas setup_adc(ADC_CLOCK_INTERNAL); // Define clock da conversão A/D output_a(0x00); //Zerando todas as saidas output_b(0x00); output_c(0x00); output_d(0x00); output_e(0x00); lcd_init(); lcd_putc("\f"); lcd_gotoxy(3,1); //Inicialização do Sistema printf(lcd_putc,"Solar Track"); lcd_gotoxy(1,2); printf(lcd_putc,"Eng. Mecatronica"); lcd_gotoxy(2,3); printf(lcd_putc,"UNIP - Swift"); lcd_gotoxy(2,4); printf(lcd_putc,"Carregando..."); delay_ms(5000); while(true) { precisao = 10; lcd_putc("\f"); //Medida do Angulo de Inclinação (AN0) A0 (); An = ((0.28325 * angulo)-185); //((0.5665 * (angulo/2)-185.573)); lcd_gotoxy(1,1); // Coloca Angulo no Display printf(lcd_putc,"%.2f%c",An,0xDF); //Medida da Temperatura (AN1) A1(); // Lê canal 1 do ADC T = (0.08145 * temperatura); // Converte em graus Celsius lcd_gotoxy(1,2); // Coloca Temperatura no Display printf(lcd_putc,"%.1f%cC",T,0xDF); //Medida da Corrente de Entrada das PV (AN2) A2(); // Lê canal 2 do ADC C= (0.01953125 * corrente); // Converte a corrente para Amperes. 0.03 é fator de correção visto em testes empiricos. lcd_gotoxy(10,1); // Coloca corrente no Display printf(lcd_putc,"%.2fA",C); //Medida da Tensão de Entrada das PV (AN3) A3(); // Lê canal 2 do ADC Ten= (0.020507812 * tensão); // Converte a tensão para Volts, tensão maxima de 21V. lcd_gotoxy(10,2); // Coloca corrente no Display printf(lcd_putc,"%.2fV",Ten); /*****************************************************************************/ /* Sensor de Luminosidade ON/OFF */ /*****************************************************************************/ A0(); //An A4(); //ldr1 A5(); //ldr2 A6(); //ldr3 A7(); //ldr4 if((490 <= An) && (An <= 815)) // Fim de curso digital em -45º e 45º { if((ldr1 - ldr2) > precisao) { output_high(pin_b7); } else output_low(pin_b7); if((ldr2 - ldr1) > precisao) { output_high(pin_b6); } else output_low(pin_b6); } else { if(An < 490) //S { output_low(pin_b7); if((ldr2 - ldr1) > precisao) { output_high(pin_b6); } else output_low(pin_b6); } if(An > 815) { output_low(pin_b6); if((ldr1 - ldr2) > precisao) { output_high(pin_b7); } else output_low(pin_b7); } } fim_dir = input(pin_d0); fim_esq = input(pin_d1); if((fim_dir == 1) && (fim_esq ==1)) { if((ldr3 - ldr4) > precisao) { output_high(pin_b5); } else output_low(pin_b5); if((ldr3 - ldr4) > precisao) { output_high(pin_b4); } else output_low(pin_b4); } else { if(!fim_dir) { if((ldr4 - ldr3) > precisao) { output_high(pin_b4); } else output_low(pin_b4); } if(!fim_esq) { if((ldr3 - ldr4) > precisao) { output_high(pin_b5); } else output_low(pin_b5); } } /*============================================================================*/ delay_ms(50); } }

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...