예제 #1
0
inline void motor_step (uint8_t motor) {
    if (motor == 0) { output_toggle(MOTOR0_PORT, MOTOR0_STEP); }
    else if (motor == 1) { output_toggle(MOTOR1_PORT, MOTOR1_STEP); }
    else if (motor == 2) { output_toggle(MOTOR2_PORT, MOTOR2_STEP); }
    else if (motor == 3) { output_toggle(MOTOR3_PORT, MOTOR3_STEP); }
    else if (motor == 4) { output_toggle(MOTOR4_PORT, MOTOR4_STEP); }

    return;
}
예제 #2
0
void main()
{
clock_int_4MHz(); //Função necessária para habilitar o dual clock (48MHz para USB e 4MHz para CPU)

   disparo=read_eeprom(10);  //carrega o último valo ajustado
   if (disparo==0xff) {disparo=0; write_eeprom(10,0);} //inicio de operação após gravação

   enable_interrupts(GLOBAL);
   enable_interrupts(INT_EXT);
   //enable_interrupts(INT_EXT1);
   ext_int_edge(L_TO_H);

 while(true)
   {
   ++i; if (i>=50000) {i=0; output_toggle(pin_b7);} //Led de visualização

      if(!input(botao))//botão de incremento de fase
      {  delay_ms(100);   while(!input(botao))  delay_ms(100); //filtro botão
         disparo++; // na prática está identificando o zero só uma vez por ciclo
         if(disparo>=7) {disparo=7;} //o botão no pino E3 regula o ângulo de disparo
         write_eeprom(10, disparo);
         
      }

    if(!input(botao1))
      {  delay_ms(100);   while(!input(botao1))  delay_ms(100);
         disparo--;
         if(disparo<=1) {disparo=1;}
         write_eeprom(10, disparo);
        }

   }
}
예제 #3
0
void RTCC_isr() //function interrupción TMR0
   {  set_TIMER0(5); //inicializa el timer0 para que cuente 0.2 us 
   output_toggle(PIN_B2);
   set_TIMER0(5); //inicializa el timer0 para que cuente 0.2 us
   cont++;
   //Giro en un sentido
   if(input(PIN_B0)==1){
      if ((int16)cont==(int16)10){ cont=0;
            output_high(PIN_B3);}
      if((int16)comp1==(int16)cont){
            output_low(PIN_B3);}
   }
   if (input(PIN_B0)==0)
   output_low(PIN_B3);
    //--------------Giro opuesto----------------
       if(input(PIN_B1)==1){
      if ((int16)cont==(int16)10){ cont=0;
            output_high(PIN_B4);}
      if((int16)comp1==(int16)cont){
            output_low(PIN_B4);}
   }
   if (input(PIN_B1)==0)
   output_low(PIN_B4);
    
   }
void  RTCC_isr(void) {

	//output_toggle(PIN_B6);

   
   switch(levelEnable){
      case 0:output_a(level_0_Enable);
          output_c(cubeLevelC0);
             output_d(cubeLevelD0); 
      break;
      case 1:output_a(level_1_Enable);
          output_c(cubeLevelC1);
             output_d(cubeLevelD1);
      break;
      case 2:output_a(level_2_Enable);
          output_c(cubeLevelC2);
             output_d(cubeLevelD2);
      break;
      case 3:output_a(level_3_Enable);
          output_c(cubeLevelC3);
             output_d(cubeLevelD3);
      break;
   }
   
   if (levelEnable == 3){
      levelEnable = 0;
   }else{
       levelEnable++;
   }
   
   output_toggle(PIN_B6);
}
예제 #5
0
void recepcao_serial()
{
comando[n]=RCREG; m=n;comand[n]= comando[n];

   if (comando[0]!='L' && flagstart==0) {flagstart=1; flagBD=1; zeit=1; n=0;}

   if (comando[0]==65) {flag=1;pisca=0;zeit=1; }
++n;

switch (comando[0])
   {
      case  79 : { chegou=1; flag=0; m=0; flagBD=0;}
            break;

     /* case 'R' : { if (n>=4)  {comand[1]=255-comando[1]; //Led RGB anodo comum//
         comand[2]=255-comando[2];comand[3]= 255-comando[3]; n=0; comando[0]=32;
         output_toggle(pin_b7); chegou=0; zeit=0;}} //Anodo comum
          break; */

        case 'R' : { if (n>=4)  {comand[1]=comando[1]; //Led RGB catodo comum//
        comand[2]=comando[2];comand[3]= comando[3]; n=0; comando[0]=32;
        output_toggle(pin_b7); chegou=0; zeit=0;}} //Catodo comum
         break;

      case 'L' : {flag=0; n=0; c=1; chegou=0; zeit=1;output_high(pin_B7);pisca=0;}
            break;
      case 'D' : {flag=0; n=0; chegou=0; zeit=1;output_low(pin_B7);pisca=0;}
            break;
      case 'P': { pisca=1; flag=0; n=0; chegou=0; zeit=1; }
            break;
   }
}
예제 #6
0
파일: main.c 프로젝트: carranzafp/PSGrooPIC
void timer() {
	set_timer0(0x8ad0);

	if(DelayCount) {
		--DelayCount;
	}

	//Blink
	if(BlinkMode == 0) {
		if(cnt == 20) {
			output_toggle(LEDR);
			cnt = 0;
		}
		else {
			cnt++;
		}
	}

	//Chirp
	if(BlinkMode == 2) {
		if(!cnt) {
			output_low(LEDR);
		}
		else {
			cnt--;
		}
	}
}
void TIMER0_isr(void) {
    set_timer0 (0x00);
    cont_tiempo++;
    if (cont_tiempo == 2023) {
        output_toggle(PIN_D0);
        cont_tiempo = 0;
    }
}               //Se recarga el timer0
예제 #8
0
void main(void)
{	
	printf("System enabled\n\r");
	Motor_Init(PWM_PERIOD);
    enable_interrupts(INT_RDA);		
	//enable_interrupts(INT_EXT0);
	//ext_int_edge(L_TO_H);
    while(true)
	{
		Set_Motor_Duty(0,0);
		while(!input_state(PIN_F6)&&!RUN )//&& !RUN)   //While loop used for waiting an input high  in D8 to start
   		{
			output_toggle(PIN_E2);
      		delay_ms(15);
			Read_Sensors_Digital(sensors_BIN);
			Get_Average_Center_Digital(sensors_BIN,2,12,&center); 
			printf("%c\n\r",(center+65));
   		}
		output_high(PIN_E2);
		delay_ms(2000);
		if(!RUN) RUN=0xFF;
		while(RUN){
			//output_toggle(PIN_E2); 
         	Read_Sensors_Digital(sensors_BIN);
         	Get_Average_Center_Digital(sensors_BIN,2,12,&center); 
         	if(center==-1)	center=last_center;
			Print_Center(center);
		 	last_center=center;
      	 	error=SET_POINT-center;
		 	derivative=error-last_error;
			//if(derivative<-6||derivative>6) {derivative=0; error=last_error;}
		 	if(error>4 || error<-4) integral=integral+error;
			else integral=0;
			if(integral>100) integral=100;
			if(integral*(-1)>100) integral=-100;
	     	correction=error*(KP)+derivative*(KD)+integral*(KI);
		 	last_error=error;

		   	if(center>13 && center<19 && BoostCounter<24) 
			{
				BoostCounter++;
				if(BoostCounter>3) base_speed=1400; //set_motor_pwm_duty(3,3,2500);correction=0 ;//Boost=499-BaseSpeed;
			}	
		    else
			{
				BoostCounter=0; base_speed=1000;//set_motor_pwm_duty(3,3,2650);}
			}

         	left_correction=(base_speed)-correction;
     	 	right_correction=(base_speed)+correction;      
			Set_Motor_Duty(left_correction,right_correction);
	  		delay_us(delay_time);
			printf("%c\n\r",(center+65));
			//for(i=2;i<=12;i++)printf("%d",Sensors_BIN[i]);
			//printf("%c\n",(center+65));
		}
   }
}
예제 #9
0
void main()
{

while (1)
   {
   output_toggle(pin_B7); // comuta Led na função principal
   delay_ms(500);
   }
}
예제 #10
0
void interruption()
{
	set_timer0(6);
	Contador--;
	if(Contador == 0)
	{
		output_toggle(PIN_A0);
		Contador = 250;	
	}	
}
예제 #11
0
파일: timer.c 프로젝트: cukier/Timer
void isr_tmr0() {
	clear_interrupt(INT_TIMER0);
	output_toggle(pos_mstr);
	if (!ctrlFusoM)
		if (mstr_sobe)
			fuso_mstr++;
		else
			fuso_mstr--;
	ctrlFusoM = !ctrlFusoM;
}
예제 #12
0
void main()
{
//clock_int_4MHz();

while (1)
   {
   output_toggle(pin_B7); // comuta Led na função principal
   delay_ms(500);
   }
}
예제 #13
0
파일: timer.c 프로젝트: cukier/Timer
void isr_tmr1() {
	clear_interrupt(INT_TIMER1);
	set_timer1(0x7FFF);
	output_toggle(pos_slv);
	if (!ctrlFusoE)
		if (slv_sobe)
			fuso_slv++;
		else
			fuso_slv--;
	ctrlFusoE = !ctrlFusoE;
}
예제 #14
0
void MotorE(void){
   for(;;){
      OS_Wait(numPulsosE>0);
      if(dirMotorE==1)     output_high(dirE);
      if(dirMotorE==2)     output_low(dirE);
      if(--numPulsosE!=0)  output_toggle(clockE);  
      else  output_low(clockE);     
      OS_Delay(periodoPulsosE);
      OS_Yield();
   }
}
예제 #15
0
void MotorZ(void){
   for(;;){
      OS_Wait(numPulsosZ>0);
      if(dirMotorZ==8)     output_high(dirZ);
      if(dirMotorZ==4)     output_low(dirZ);
      if(--numPulsosZ!=0)  output_toggle(clockZ);  
      else  output_low(clockZ);     
      OS_Delay(periodoPulsosZ);
      OS_Yield();
   }
}
예제 #16
0
void MotorY(void){
   for(;;){
      OS_Wait(numPulsosY>0);
      if(dirMotorY==32)    output_high(dirY);
      if(dirMotorY==16)    output_low(dirY);
      if(--numPulsosY!=0)  output_toggle(clockY);  
      else  output_low(clockY);
      OS_Delay(periodoPulsosY);
      OS_Yield();
   }
}
예제 #17
0
void MotorX(void){
   for(;;){
      OS_Wait(numPulsosX>0);
      if(dirMotorX==64)    output_high(dirX);
      if(dirMotorX==128)   output_low(dirX);
      if(--numPulsosX!=0)  output_toggle(clockX);  
      else  output_low(clockX);     
      OS_Delay(periodoPulsosX);
      OS_Yield();
   }
}
void  TIMER1_isr(void) 
{   
	set_timer1(timer1StartValue);
	//output_toggle(PIN_B7);

	
	
	if(stateControl < 3){
		stateControl++;
	}else{
		stateControl = 0;
	}
	
	
	switch (modeControl){
		case 0:
			cubeLevelC0 = Mode1_CubeLevelC0[stateControl];
			cubeLevelC1 = Mode1_CubeLevelC1[stateControl];
			cubeLevelC2 = Mode1_CubeLevelC2[stateControl];
			cubeLevelC3 = Mode1_CubeLevelC3[stateControl];
			cubeLevelD0 = Mode1_CubeLevelD0[stateControl];
			cubeLevelD1 = Mode1_CubeLevelD1[stateControl];
			cubeLevelD2 = Mode1_CubeLevelD2[stateControl];
			cubeLevelD3 = Mode1_CubeLevelD3[stateControl];

		break;
		
		case 1:
			cubeLevelC0 = Mode2_CubeLevelC0[stateControl];
			cubeLevelC1 = Mode2_CubeLevelC1[stateControl];
			cubeLevelC2 = Mode2_CubeLevelC2[stateControl];
			cubeLevelC3 = Mode2_CubeLevelC3[stateControl];
			cubeLevelD0 = Mode2_CubeLevelD0[stateControl];
			cubeLevelD1 = Mode2_CubeLevelD1[stateControl];
			cubeLevelD2 = Mode2_CubeLevelD2[stateControl];
			cubeLevelD3 = Mode2_CubeLevelD3[stateControl];

		break;
		
		case 2:
			cubeLevelC0 = rand ();
			cubeLevelC1 = rand ();
			cubeLevelC2 = rand ();
			cubeLevelC3 = rand ();
			cubeLevelD0 = rand ();
			cubeLevelD1 = rand ();
			cubeLevelD2 = rand ();
			cubeLevelD3 = rand ();
		break;

	}
	
	output_toggle(PIN_B7);
}
예제 #19
0
void main()
{
enable_interrupts(GLOBAL); // Possibilita todas interrupcoes
enable_interrupts(INT_RDA); // Interrupcao da serial

output_toggle(pin_B7);// pisca Led
delay_ms (500);

while(1)
{
   if (!input(pin_e3))
   {
      reset_cpu();
   } //se pressionar o botão no pino 1 sem retirar o cabo, reseta e entra em estado de gravação
   
while (pisca==1)
{
output_toggle(pin_B7);
delay_ms(300);
}//pisca rápido
}
}
예제 #20
0
파일: main.c 프로젝트: EPSA-Legacy/RISM
void isr_timer2()
{
  
	 	ms++;

     if(ms==250)
	 {
		sec++;
		ms=0;
		printf("%Lu",sec);
		output_toggle(PIN_B1);
	 }
}
예제 #21
0
void Gla(void){
   for(;;){      
      OS_Wait(GlaoGlc==3);
      //OS_Bsem_Wait(BS_GLAGLC_FREE); 
      output_toggle(PIN_B7);
      
      //-- 1023/255=4.012, necesita adaptarse al mismo rango 
      //-- porque el valorR que llega desde el GUI tiene max=255
      r=(float)(valorR*4.012);   
      control=(unsigned int16)r;
      set_pwm1_duty(control);
      
      OS_Delay(1000);
      //OS_Bsem_Set(BS_GLAGLC_FREE); 
      OS_Yield();            
   }
}
예제 #22
0
void Glc_PIDdiscreto(void){
   for(;;){  
      OS_Wait(GlaoGlc==2); //2
      //OS_Bsem_Wait(BS_GLAGLC_FREE); 
      output_toggle(PIN_B7);
    
      valorY=read_adc(ADC_READ_ONLY);
      //-- debido al ADC 10bits, la conversion se realiza con 10bits, 
      //-- entonces valorY tiene rango de 0 a 1023
      y=(float)valorY;
      //-- 1023/255=4.012, necesita adaptarse al mismo rango 
      //-- porque el valorR que llega desde el GUI tiene max=255
      r=(float)(valorR*4.012);
      //----------------------------------------------------------------------
      //-- Calculo PID por metodo tustin para termino integral 
      //-- y metodo de diferencias hacia atras para termino derivativo
      //-- Sea e(kT)=e; e(kT-T)=e1
      e=r-y;               
      //Sea p(kT)=p; i(kT)=i; i(kT-T)=i1; d(kT)=d
      p=Kpz*e;        
      //i=i1+Kiz*e;    //diferencia hacia atras
      i=i1+Kiz*(e+e1);  //tustin
      d=Kdz*(e-e1);  //diferencia hacia atras
      
      //Sea u(kT)=u
      u=p+i+d;   
       
      //-- Anti-windup solo al termino integral para evitar que se infle
      //-- y se haga muy grande si la accion de control se satura, por tanto
      //-- es necesario impedir que cambie i
      //if((u>max) | (u<min)) {i=i-Ki*T*e;}      //diferencia hacia atras
      //if((u>max) | (u<min)) i=i-Kiz*(e+e1);     //tustin
      if(u>max)u=max;
      if(u<min)u=min;
                    
      //-- realizar la conversion final
      control=(unsigned int16)u;
      set_pwm1_duty(control);           
      e1=e;
      i1=i;
      
      OS_Delay(5000);
      //OS_Bsem_Set(BS_GLAGLC_FREE);
      OS_Yield();
   }
}
예제 #23
0
//------------------------------------------------------------------------------
void main(){
   int i;
   
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_0);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   disable_interrupts(INT_TIMER0);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   setup_oscillator(OSC_8MHZ|OSC_TIMER1|OSC_31250|OSC_PLL_OFF);

   output_low(PIN_C5);
	
   while(TRUE){

      if(f_process){
         f_process=0;
         output_toggle(PIN_C5);
         disable_interrupts(INT_RDA);
			printf("\n\r");
         for(i=0;i<(cont-2);i++){
         	printf("vector[%u]=%c\n\r",i,p[i]); //muestro los datos recibidos
         }
         procesar_guardar();
         cont=0;
         printf("Fin programacion\n\r");
         enable_interrupts(INT_RDA);
      }
   }
}
예제 #24
0
void main()
{
   setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_256);
   setup_timer_1 (T1_INTERNAL|T1_DIV_BY_8);
   setup_timer_2(T2_DIV_BY_16,155,1);
   setup_ccp1(CCP_PWM);
   set_pwm1_duty(0);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts (int_TIMER1);
   enable_interrupts (GLOBAL);

   config ();

   while (true)
   {
      if (ReceberComando ()==1)
      {
         output_toggle (led) ;
         verificaComando (cmd[2]);
      }
   }
}
예제 #25
0
void  EXT_isr(void) 
{
   output_toggle(PIN_B7);
}
예제 #26
0
void main()
{
  taxa_serial(9600);
  enable_interrupts(GLOBAL);
  enable_interrupts(INT_RDA);
  #priority rda //serial

   for(k=0;k<=25;k++){comando[k]=32;}
   for(k=0;k<=25;k++){comand[k]=32;}

 //Es vesucht mindestens einmal shreiben, wenn es lehr ist.
   SPBRGH = 0x02; SPBRG = 0x70;

   while(1)
   {
while (pisca==1){output_toggle(pin_B7);delay_ms (300);n=0;m=0;}

while (chegou==1){ output_toggle(pin_B7);delay_ms(200); if(flagBD==0 && c1==3){ c1=2; write_eeprom(251,2);}
                   serial_putc(79);serial_putc(75);serial_putc(32);n=0; }

if (flagBD==1 && chegou==0 && c==0){
  SPBRGH = 0x04; SPBRG = 0xE1;
  serial_putc(S);serial_putc(a);serial_putc(an);serial_putc(u);serial_putc(us);
  serial_putc(b);serial_putc(x);serial_putc(z);
  delay_ms(1000); output_toggle(pin_b7);
  SPBRGH = 0x02; SPBRG = 0x70;
                                    }

        if (flag==1) { flag=0; output_toggle(pin_b7);

                  if (m==12) {comand[1]=a;comand[3]=78;comand[5]=77;comand[8]=S;comand[10]=b;comand[12]=u;
                  for(k=0;k<=m;k++){serial_putc(comand[k]);}
                  for(k=m+1;k<25;k++){serial_putc(32);}
                   ++j;if(j>=5){j=0;flagBD=1;}
                             }
      write_eeprom(250,m); //PLatz von m-Byte-Zaeler

      if (c==1){ 
      for(k=0;k<=25;k++){serial_putc(comand[k]);}
      for(k=0;k<=25;k++){comando[k]=32;comand[k]=32;}
      n=0;m=0; }

       delay_ms(1000); }

if(chegou==0 && zeit==1){
      c1=read_eeprom(251);if(c1==255){++c2;if(c2>3){write_eeprom(251,3);}}//Das erste Lesen ist 255
      if (c==0 && c1==3 && flagBD==0){output_toggle(pin_b7);//write_eeprom(251,3);
      if(m<=12 || m==255){flag=1; m=12;
      comand[0]=S;comand[2]=an;comand[4]=S;comand[6]=69;comand[7]=83;comand[9]=78;comand[11]=83;
                         }
                                              }

      delay_ms(1000);n=0;}


delay_us(30);
++i; //if(i>255) {i=0;}
if(i>=comand[1]){output_low(pinored);} else {output_high(pinored);}
if(i>=comand[2]){output_low(pinoblue);} else {output_high(pinoblue);}
if(i>=comand[3]){output_low(pinogreen);} else {output_high(pinogreen);}

   }}
예제 #27
0
파일: rx.c 프로젝트: castro732/X-Weather
void main()
{

   
   
   enable_interrupts(INT_RDA);
   enable_interrupts(INT_EXT1);
   enable_interrupts(global);
   
   setup_psp(PSP_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   setup_adc( ADC_OFF );


   //setup_adc_ports(NO_ANALOGS|VREF_VREF);


  // setup_oscillator(OSC_8MHZ|OSC_TIMER1|OSC_PLL_OFF);   
   
   
   glcd_init(ON);    
   
   
   
         int8 axt,axp,axv;
         axt = read_eeprom(0x01);
         axp = read_eeprom(0x02);
         axv = read_eeprom(0x03);
   
         if(axt==1)
         {
            UniTemp[0]="C";
         }
         if(axt==2)
         {
            UniTemp[0]="F";
         }
         if(axp==1)
         {
            UniPres[0]="Pa";
         }
         if(axp==2)
         {
            UniPres[0]="mBa";
         }
         if(axv==1)
         {
            UniVel[0]="m/s";
         }
         if(axv==2)
         {
            UniVel[0]="km/h";
         }
         if(axv==3)
         {
            UniVel[0]="Nud";
         }
         
         
         
   
  
   
   int16 auxi;
   int8 type,z;
   int8 string[10];
   int16 tt;
   int32 pp;
   char tprint [15];
   char pprint [15];
   char ttt[10];
   char ppp[10];
      char temp[] = "T:";
      char pres[] = "P:";
      
   for (z=0;z<15;z++)
      {
         tprint[z]=0;
         pprint[z]=0;
      }
   //firstrun = read_eeprom(0x00);      
  

      draw_sect();
   while (1)
   {
     
      
      
      
      if (firstrun==71)
      {
         glcd_loadscreen();
         glcd_showlogo();
         delay_ms(1500);
         menu_mainmenu();
         firstrun = 0;
         write_eeprom(0x00, firstrun);
      }
      
      if (config==1)
      {
        
        
        
        
        
         menu_mainmenu();
         if(UniTemp[1]=="C")
         {
            write_eeprom(0x01, 1);
         }
         else if(UniTemp[1]=="F")
         {
            write_eeprom(0x01, 2);
         }
         if(UniPres[1]=="P")
         {
            write_eeprom(0x02, 1);
         }
         else if(UniPres[1]=="m")
         {
            write_eeprom(0x02, 2);
         }
         if(UniVel[1]=="m")
         {
            write_eeprom(0x03, 1);
         }
         else if(UniVel[1]=="k")
         {
            write_eeprom(0x03, 2);
         }
         else if(UniVel[1]=="N")
         {
            write_eeprom(0x03, 3);
         }
         
        
         
         pressed=0;
         config=0;
      }
      
      if (try==1)
      {
         
               try=0;
               output_toggle(PIN_C2);
      }
      
      while(bkbhit) 
      {
         auxi = bgetc();
         if (auxi==0x54)
         {
            type=1;
            for(i=0;i<15;i++)
            {                   
               string[i]=0x00;                          
            }
            i = 0;
         }
         if (auxi==0x50)
         {
            type=2;
            for(i=0;i<15;i++)
            {                   
               string[i]=0x00;                          
            }
            i = 0;
         }
         if (auxi!=0x0D)
         {
            
         }
         if (type==1)      //Temperatura
         {
         
            if ((auxi!=0x0D)&&(auxi!=0x54))
            {
               string[i] = auxi;
               i++;
            }
            if (auxi==0x0D)
            {
               str_init(tprint);
               tt = atol(string);  
               sprintf(ttt,"%3.1w",tt);
               strcat(tprint,temp);
               strcat(tprint,ttt);
               strcat(tprint,UniTemp);
                draw_sect();
               glcd_text_sec(1, 1, tprint, OFF);
               glcd_update();
               
            }
         }
         if (type==2)      //Presion
         {
            if ((auxi!=0x0D)&&(auxi!=0x50))
            {
               string[i] = auxi;
               i++;
            }
            if (auxi==0x0D)
            {
               str_init(pprint);
               pp = atoi32(string);
               sprintf(ppp,"%3.1w",pp);
               strcat(pprint,pres);
               strcat(pprint,ppp);
               strcat(pprint,UniPres);  
                draw_sect();
               glcd_text_sec(1, 2, pprint, OFF);
               glcd_update();
            }
         }
         
         glcd_update();
         //END KBHIT
      }
      
      
      glcd_update();
      //ENDWHILE
   }
//ENDMAIN
}
예제 #28
0
파일: main.c 프로젝트: PTDreamer/Domotica
void main()
{
   mydevices.numberOfInputs=0;
   mydevices.numberOfOutputs=0;
   clock = 0;
   ledErrorCounter=0;   
   hw_setup();
   //TODO: User Code
   //struct switches array[NUMBER_OF_SWITCHES];
  /*
   button_test();
   dimmer_test();
   */
   
   
   ///////////////SALA//////////////////////////////
 /*  eeprom_on_off_init(20,21,6);//2 int Grande a comecar da esquerda
   eeprom_on_off_init(22,23,0);//2 
   //eeprom_dimmer_init(40,41,42,7);//2
   eeprom_on_off_init(41,42,7);//2
   eeprom_on_off_init(26,27,3);//2
   
   
   
   ///Sanca parede grande
   unsigned int on_adr[8]={20,255,255,255,255,255,255,255};
   unsigned int off_adr[8]={21,255,255,255,255,255,255,255};
   eeprom_onOff_out_init(on_adr,off_adr,3);//Sanca parede grande
   eeprom_onOff_out_init(on_adr,off_adr,5);//Sanca parede grande
   
   ///Sanca parede rosa
   unsigned int on_adrr[8]={22,255,255,255,255,255,255,255};
   unsigned int off_adrr[8]={23,255,255,255,255,255,255,255};
   eeprom_onOff_out_init(on_adrr,off_adrr,7);//Sanca parede grande
   on_adrr[1]=26;
   off_adrr[1]=27;
   eeprom_onOff_out_init(on_adrr,off_adrr,4);//Sanca parede grande
   
    ///VARANDA
   unsigned int dimmer_dim_adr[8]={40,255,255,255,255,255,255,255}; 
   unsigned int dimmer_on_adr[8]={41,255,255,255,255,255,255,255};
   unsigned int dimmer_off_adr[8]={42,255,255,255,255,255,255,255};
   //eeprom_dimmer_out_init(dimmer_dim_adr,dimmer_on_adr,dimmer_off_adr,6);//varanda
   eeprom_onOff_out_init(dimmer_on_adr,dimmer_off_adr,6);//varanda
   
   eeprom_button_init(28,29,4,true);//estores down
   eeprom_button_init(30,31,5,true);//estores up
   unsigned int up_adr[8]={30,255,255,255,255,255,255,255};
   unsigned int down_adr[8]={28,255,255,255,255,255,255,255};
   unsigned int x_adr[8]={255,255,255,255,255,255,255,255};
   eeprom_shutter_out_init(up_adr,down_adr,x_adr,x_adr,8,9,0,10);
   eeprom_shutter_out_init(up_adr,down_adr,x_adr,x_adr,10,11,0,10);
   eeprom_shutter_out_init(up_adr,down_adr,x_adr,x_adr,12,13,0,10);
   eeprom_shutter_out_init(up_adr,down_adr,x_adr,x_adr,14,15,0,10);
   */
   /////////////////////////////////////////////////7
   
   /*
   ///////////////QUARTO GRANDE//////////////////////////////
   eeprom_on_off_init(1,2,2);//2 on_adr off_adr real_button inicia botao
   unsigned int on_adr[8]={1,255,255,255,255,255,255,255};
   unsigned int off_adr[8]={2,10,255,255,255,255,255,255};
 
   unsigned int nill_adr[8]={255,255,255,255,255,255,255,255};  
   unsigned int ventax_off_adr[8]={16,255,255,255,255,255,255,255};

   unsigned int x_adr[8]={1,255,255,255,255,255,255,255};
   eeprom_onOff_out_init(on_adr,off_adr,4);//SANCA?
   
   //outputs 4=sanca 3=casabanho 2=casa de banho 9=ventax 1=corredor
   ///casa de banho
   eeprom_on_off_init(3,4,4);//interruptor casa de banho??  
   off_adr[0]=4;
   on_adr[0]=3;
   eeprom_timer_init(off_adr,on_adr,15,16,time_off,60);
   eeprom_onOff_out_init(on_adr,off_adr,3); //luz casa de banho
   eeprom_onOff_out_init(on_adr,off_adr,2); //luz2 casa de banho
   eeprom_onOff_out_init(on_adr,ventax_off_adr,9);//VENTAX
   ///fim casa de banho
   
   //corredor
   eeprom_on_off_init(17,18,5);//interruptor luz corredor
   unsigned int corredor_on_adr[8]={17,255,255,255,255,255,255,255};
   unsigned int corredor_off_adr[8]={18,255,255,255,255,255,255,255};
   eeprom_onOff_out_init(corredor_on_adr,corredor_off_adr,1); //luz corredor
   //fim corredor
   
   eeprom_button_init(5,6,0,true);//2 //estores
   eeprom_button_init(7,8,1,true);//2
   
   off_adr[0]=255;
   off_adr[1]=255;
   on_adr[0]=5;
   x_adr[0]=7;
   eeprom_shutter_out_init(on_adr,x_adr,off_adr,off_adr,11,10,0,10);//up down fullup full down
   
   eeprom_on_off_init(9,10,6);
   eeprom_on_off_init(20,21,7);
   unsigned int cama_on_adr[8]={9,255,255,255,255,255,255,255};
   unsigned int cama_off_adr[8]={10,255,255,255,255,255,255,255};
   eeprom_onOff_out_init(cama_on_adr,cama_off_adr,7);
   cama_on_adr[0]=20;
   cama_off_adr[0]=21;
   eeprom_onOff_out_init(cama_on_adr,cama_off_adr,6);
   /////////////////////////////////////////////////7
   */ 
   /////////////////////QUARTO RENATA///////////////
   //
   // INPUTS 
   // 0,1 cozinha
   // 2,3 quarto
   //
   // OUTPUTS
   // 5 quarto renata economica
   // 6 janela hologeneo
   // 7 entrada
   // 2 cozinha fluorescente
   // 3 cima balcao halogeneo
   // 4 divisoria halogeneo
   // 10 balcao baixo verde
   // 11 balcao cima verde
   // 12 balcao cima vermelho
   // 13 balcao cima azul
   // 14 balcao baixo azul
   // 15 balcao baixo vermelho
   //INPUT INIT
   eeprom_on_off_init(60,61,0);//on_adr off_adr real_btn interruptor cozinha 1
   eeprom_on_off_init(62,63,1);//on_adr off_adr real_btn interruptor cozinha 2  
// eeprom_dimmer_init(68,62,63,1);//dim_adr on_adr off_adr
   eeprom_on_off_init(64,65,2);//on_adr off_adr real_btn interruptor quarto renata 1
//   eeprom_on_off_init(66,67,3);//on_adr off_adr real_btn interruptor quarto renata 2  
   eeprom_dimmer_init(68,66,67,3);//dim_adr on_adr off_adr
  
   //OUTPUT INIT
   unsigned int on_adr[8]={60,255,255,255,255,255,255,255};
   unsigned int off_adr[8]={61,10,255,255,255,255,255,255};
   unsigned int dim_adr[8]={68,255,255,255,255,255,255,255};
   eeprom_onOff_out_init(on_adr,off_adr,2); //luz cozinha fluorescente
   on_adr[0]=62;
   off_adr[0]=63;
   eeprom_onOff_out_init(on_adr,off_adr,3); //luz cozinha cima balcao halogeneo
   eeprom_onOff_out_init(on_adr,off_adr,4); //luz cozinha divisoria
   eeprom_onOff_out_init(on_adr,off_adr,15); //luz balcao baixo vermelho
   eeprom_onOff_out_init(on_adr,off_adr,12); //luz balcao cima vermelho
   //eeprom_dimmer_out_init(dim_adr,on_adr,off_adr,3); //luz cozinha cima balcao halogeneo
   //eeprom_dimmer_out_init(dim_adr,on_adr,off_adr,4); //luz cozinha divisoria
   //eeprom_dimmer_out_init(dim_adr,on_adr,off_adr,15); //luz cozinha divisoria
   
   on_adr[0]=64;
   off_adr[0]=65;
   eeprom_onOff_out_init(on_adr,off_adr,5); //luz quarto renata economica
   on_adr[0]=66;
   off_adr[0]=67;
  // eeprom_onOff_out_init(on_adr,off_adr,7); //luz quarto renata entrada
  // eeprom_onOff_out_init(on_adr,off_adr,6); //luz quarto renata janela
   eeprom_dimmer_out_init(dim_adr,on_adr,off_adr,7); //luz quarto renata entrada
   eeprom_dimmer_out_init(dim_adr,on_adr,off_adr,6); //luz quarto renata janela
   
  
   readDevices();
#ifdef DEBUG  
    printf("inputs:%d outputs:%d %d %d\n\r",mydevices.numberOfInputs,mydevices.numberOfOutputs,((struct outputs)mydevices.myoutputs[0]).type,((struct outputs)mydevices.myoutputs[1]).type);
#endif
   dimmer_outputs_init();
   // printf("start %Lu %Lu %Lu\n\r",fpointer(N_LUZES,0),delays1[N_LUZES][0],delays2[N_LUZES][0]); 
   /*((struct light)mydevices.myoutputs[0].device).dim_value.value=50;
   ((struct light)mydevices.myoutputs[0].device).dim_value.needs_update=true;
   ((struct light)mydevices.myoutputs[0].device).off.value=1;
   ((struct light)mydevices.myoutputs[0].device).off.needs_update=true;
 */
 
   write_outputs();
// printf("start %Lu\n\r",fpointer(N_LUZES,0)); 
 interrupts_enable();

   while(true){
   restart_wdt();
   if(syncError || oscError)
   {  
      ++ledErrorCounter;
      if(ledErrorCounter>1000)
      {
         output_toggle(LED);
         ledErrorCounter=0;
      }
   }
#ifdef DEBUG
   if(kbhit())
   {
      setup_wdt(WDT_OFF);
      disable_interrupts (GLOBAL) ;
      goDebug();
   }
#endif
   process_outpoints();
   write_outputs();
   if(secondFlag)
   {
      secondFlag=false;
      processTimedEvents();
      if(!syncError && !oscError) output_toggle(LED);
   }
  // print_inputs(false);
  
}
}
예제 #29
0
void main(void)
{
   init();
   splash();
   

   while (TRUE) {
      restart_wdt();

     #if STACK_USE_SERIAL
      if (kbhit(USER)) {
         ui_handle();
      }
     #endif

      //every second: refresh current IP, blink LED
      if (second_counter>=1) {
         display_ip_lcd();
        #if defined(USER_LED3)
         output_toggle(USER_LED3);
        #endif
         second_counter=0;
      }

      //just something to test the buttons
     #if STACK_USE_CCS_PICNET
      if (BUTTON_PRESSED(USER_BUTTON1))
      {
         output_low(USER_LED1);
      }
      else
      {
         if (g_LEDState[0])
            output_low(USER_LED1);
         else
            output_high(USER_LED1);
      }
      if (BUTTON_PRESSED(USER_BUTTON2))
      {
         output_low(USER_LED2);
      }
      else
      {
         if (g_LEDState[1])
            output_low(USER_LED2);
         else
            output_high(USER_LED2);
      }
     #elif STACK_USE_CCS_PICENS
      if (g_LEDState[0])
         output_low(USER_LED1);
      else
         output_high(USER_LED1);
      if (g_LEDState[1])
         output_low(USER_LED2);
      else
         output_high(USER_LED2);
      if (BUTTON_PRESSED(USER_BUTTON1)) output_low(USER_LED3);
     #endif

      #if STACK_USE_PPP
      if (ppp_is_connected()) {
      #endif
      StackTask();            //Microchip's TCP/IP stack handler.  Must be called routinely.
      #if STACK_USE_PPP
      }
      #endif
   }
}
예제 #30
0
파일: main.c 프로젝트: ednspace/EAR
void main(){
   setup_oscillator( OSC_8MHZ );
   //setup_adc_ports(sAN6|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL);
   //setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
   //setup_timer_1(T1_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

state0 = read_eeprom (0);
state1 = read_eeprom (1);
state2 = read_eeprom (2);

//Test the LEDs
/*
while (1){
output_low(LED0);
output_low(LED1);
output_low(LED2);
delay_ms(1000);
output_high(LED0);
output_high(LED1);
output_high(LED2);
delay_ms(1000);
}
*/

//The LEDs are an active High because of the NPN transistor driving the low side
if (state0 == 1)
output_high(LED0);

if (state1 == 1)
output_high(LED1);

if (state2 == 1)
output_high(LED2);

//The buttons are an active high to avoid problems with powerdown causing false triggers
//
   while(true)
   {
   
      if(input(button0)){
         //Toggle the LED
         output_toggle(LED0);
         while (input(button0)){} //Stay right here until button is released
         //We know button was pressed and released
         state0 = !state0;
         write_eeprom(0, state0);
        
      }
   
      if(input(button1)){
         //Toggle the LED
         output_toggle(LED1);
         while (input(button1)){} //Stay right here until button is released
         //We know button was pressed and released
         state1 = !state1;
         write_eeprom(1, state1);
         
      }
      
      if( input(button2) ){
         output_toggle(LED2);
         while (input(button2)){} //Stay right here until button is released
         //We know button was pressed and released
         state2 = !state2;
         write_eeprom(2, state2);
         
         
      }
   }

}