私はスマート ホーム オートメーション デバイスを作成しようとしています。部屋に入るとライトが自動的に点灯し、その逆も同様です。私のプロジェクトでは 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;
}
}
}
問題はないと思いますが、ここで何が問題なのかわかりません。これを解決しようとしている返信者に事前に感謝します。それは本当に私にとって大きな助けになるでしょう