0

私はスマート ホーム オートメーション デバイスを作成しようとしています。部屋に入るとライトが自動的に点灯し、その逆も同様です。私のプロジェクトでは 2 つのレーザーを使用して、部屋に人が入るか出るかを指定します。また、写真で人数を数えたいと考えています。部屋に入って、部屋に入る最後の人がこれを行うために去った後、電気を消します。私はpic16f877a icとmplabをxc8コンパイラのIDEとして使用しています。これまでのところ、プログラムは非常にうまく機能しますが、入った人はカウントされません部屋は冷静ではなく、自分のコードがどこに問題があるのか​​ よくわかりません。コードは次のとおりです。

            /* 
             * File:   main.c
             * Author: Fady
             *
             * Created on September 23, 2014, 9:56 PM
             */

            #include <stdio.h>
            #include <stdlib.h>

            /*
             * 
             */


            // PIC16F877A Configuration Bit Settings

            // 'C' source line config statements

            #include <xc.h>

            // #pragma config statements should precede project file includes.
            // Use project enums instead of #define for ON and OFF.

            // CONFIG
            #pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
            #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
            #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
            #pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
            #pragma config LVP = ON         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
            #pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
            #pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
            #pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

            #define _XTAL_FREQ 4000000
            #define laser1 PORTBbits.RB0
            #define laser2 PORTBbits.RB1
            #define isOn ==0
            #define isOff ==1

            int x1 = 0;
            int x2 = 0;

            int main() {
                char people = 0;
                nRBPU = 0;
                TRISBbits.TRISB0 = 1;   //laser 1 for input
                TRISBbits.TRISB0 = 1;   //laser 2 for input
                TRISCbits.TRISC0 = 0;   //output LED for output
                PORTCbits.RC0 = 0;
                while(1){
                    beginning:
                    if(( laser1 isOn && laser2 isOn ) || ( laser1 isOff && laser2 isOff )){                     //if both lasers are on
                       goto beginning;
                    }else if(laser1 isOff && laser2 isOn){               //if laser1 is off and laser2 is on
                        readO:
                        if(laser2 isOff){
                            if(people == 0){
                                people = 1;
                                PORTCbits.RC0 = 1;
                            }if(people >= 1){
                                people++;
                            }

                        }else{
                            for(; x2 <= 1000; x2++){
                                __delay_ms(1);
                                goto readO;
                            }
                        }
                        x2 = 0;

                    }else if(laser1 isOn && laser2 isOff){               //if laser1 is on and laser2 is off
                        readC:
                        if(laser1 isOff){
                            people--;
                            if(people == 0){
                                PORTCbits.RC0 = 0;
                            }
                        }else{
                            for(; x1 <= 1000; x1++){
                                __delay_ms(1);
                                goto readC;
                            }
                        }

                        x1 = 0;

                    }
                }

            }

問題はないと思いますが、ここで何が問題なのかわかりません。これを解決しようとしている返信者に事前に感謝します。それは本当に私にとって大きな助けになるでしょう

4

2 に答える 2