Upload
saulo
View
2
Download
0
Embed Size (px)
DESCRIPTION
Lasd
Citation preview
#include "C:\LASD\Saulo Lucena Vidal de Negreiros\projeto\PAINEL SOLAR imp\PS.h"
#include "LCD_16x2_lib_Placa_velha.c"
#include "math.h"
//Definindo os pinos dos servos como pinos D1 e D2, respectivamente
#define SERVO1_PIN PIN_D1
#define SERVO2_PIN PIN_D2
// Variáveis
long ldr1=0,ldr2=0,ldr3=0,ldr4=0; // leitura dos fotoresistores
long tensao; // leitura de tensão do painel fotovoltáico
// Largura de pulsos para o "PWM" dos servos motores
int16 largura_pulso1=1500,largura_pulso2=1500; // para começar na posição de 90º
int i;
int flag_tens;
float tensvolt;
#int_TIMER1
void TIMER1_isr(void)
{
}
void main()
{
setup_adc_ports(AN0_AN1_AN2_AN3_AN4); // utilizou-se 5 canais adc
setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
ini_lcd_16x2();
delay_ms(100);
while(1)
{
//Leitura da tensão
set_adc_channel(4);
delay_us(20);
tensao=read_adc();
// Setando flag de funcionamento geral
// Caso a tensão esteja baixa, comece as leituras e movimento dos servos
if(tensao<=1000)
{
flag_tens=1;
}
else // fique parado até que a tensão baixe
{
flag_tens=0;
}
if(flag_tens==1)
{
//Leitura da tensão na divisão do fotoresistor com o resistor de 10kohms
set_adc_channel(0);
delay_us(20);
ldr2=read_adc();
set_adc_channel(1);
delay_us(20);
ldr1=read_adc();
set_adc_channel(2);
delay_us(20);
ldr3=read_adc();
set_adc_channel(3);
delay_us(20);
ldr4=read_adc();
/////Rotacionamento dos servos a cada 0,5 segundos cada um
for(i=1;i<=50;i++)
{
output_high(PIN_D1);
delay_us(largura_pulso1);
output_low(PIN_D1);
delay_ms(10);
}
for(i=1;i<=50;i++)
{
output_high(PIN_D2);
delay_us(largura_pulso2);
output_low(PIN_D2);
delay_ms(10);
}
///// comparação da luminosidade
// ROTAÇÃO DIÁRIA
if(ldr1>ldr2+10)
{
//virar na direção do ldr2
largura_pulso1=largura_pulso1+10;
//Limitação de rotação dos servos motores
if(largura_pulso1==1610)
{
largura_pulso1=1600;
}
}
if(ldr1==ldr2)
{
//ficar parado
largura_pulso1=largura_pulso1+0;
}
if(ldr1<ldr2-10)
{
//virar na direção do ldr1
largura_pulso1=largura_pulso1-10;
//Limitação de rotação dos servos motores
if(largura_pulso1==1390)
{
largura_pulso1=1400;
}
}
//// ROTAÇÃO REFERENTE AS ESTAÇÕES
if(ldr3>ldr4+10)
{
//virar na direção do ldr3
largura_pulso2=largura_pulso2+10;
if(largura_pulso2==1610)
{
largura_pulso2=1600;
}
}
if(ldr3==ldr4)
{
//ficar parado
largura_pulso2=largura_pulso2+0;;
}
if(ldr3<ldr4-10)
{
//virar na direção do ldr4
largura_pulso2=largura_pulso2-10;
if(largura_pulso2==1390)
{
largura_pulso2=1400;
}
}
}
else
{
largura_pulso1=largura_pulso1+0;
largura_pulso2=largura_pulso2+0;
}
//Usado para analisar as variações dos fotoresistores das primeiras montagens
//printf(exibe_lcd,"\fL1=%luL2=%lu\n",ldr1,ldr2);
//printf(exibe_lcd,"L3=%luL4=%lu",ldr3,ldr4);
//mostra tensão no LCD
printf(exibe_lcd,"\fTENSAO=%5.2f\n",tensao*5.0/1023.0);
delay_ms(100);
}
}