⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cradle.c

📁 Firmware of the Cradle I have made
💻 C
字号:
/* This Code is used to implement the function required for the
robotic cradle unit
I/O declarations
Input
PORTA. F3 or RA3 = enable/disable button
RA1 = motion sensor
RA0 = wetness sensor
Output
RB0 = armed button
RB1 = disarmed button
RB3 = motor
RB4 = wireless transmitter
*/

#include "Utilities.c"
unsigned int speed;
char flag;

alarm ()
      {
      INTCON.GIE = 0;                   // Disable interrupts
      while (PORTA.F3 != 1)
           {
           PORTB.F4 = 1;
           PORTB.F1 = 1;
           Delay_ms(500);
           PORTB.F4 = 0;
           PORTB.F1 = 0;
           Delay_ms(500);
           }                        // Wait for a while
                            PORTB.F4 = 0;
      PORTB.F1 = 1;
      }

void Stop_motor()
     {
     while (speed != 120)
           {
           delay_ms(30);
           PWM_Duty (speed);
           speed--;
           }
     Stop_PWM();
     Delay_ms (5000);
     }

void Start_motor()
     {
     speed = 120;
     PWM_Duty (speed);
     Start_PWM();
     while ((speed != 240) && (PORTA.F3 != 1) && (CMCON.C1OUT == 1))
           {
           delay_ms (30);
           PWM_Duty (speed);
           speed++;
           }
     if (PORTA.F3 == 1)
        {
        Stop_PWM();
        flag = 1;
        }
     else if (CMCON.C1OUT == 0)
        {
        PORTB.F3 = 0;Stop_PWM();
        alarm();
        flag = 1;
        }
     else
        {
        flag = 0;
        }
     }
     
void main()
     {
     PORTA = 0;
     PORTB = 0;
     TRISA = 0x1f;
     TRISB = 0;
     CMCON = 3;
     PWM_Period(250);
     while (1)
           {
             if (PORTA.F3 == 1)
                {
                PORTB.F0 = 0;
                PORTB.F1 = 1;
                Delay_ms (1000);
                while (PORTB.F1 !=0)
                      {
                      if (CMCON.C2OUT == 0) // Motion sensor triggered
                         {
                         Start_motor();
                         if (flag == 1)
                            {
                            goto sub1
                            }
                         while (CMCON.C2OUT == 0)
                               {
                               if (CMCON.C1OUT == 0)
                                  {
                                  Stop_motor();
                                  alarm();
                                  goto sub1
                                  }
                               else if ((PORTA.F3 == 1) || (flag == 1))
                                  {
                                  flag = 1;
                                  Stop_motor();
                                  goto sub1
                                  }
                               }
                         Stop_motor();
                         }
                      else if (CMCON.C1OUT == 0)// Wetness sensor triggered
                         {
                         alarm();
                         break;
                         }
                      else if ((PORTA.F3 == 1) || (flag == 1))
                         {
                      sub1: PORTB.F0 = 1;
                         PORTB.F1 = 0;
                         Delay_ms (1000);
                         break;
                         }
                      }
                flag = 0;
                }
            PORTB.F0 = 1;
            PORTB.F1 = 0;
           }
     }



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -