Jag har en gjort en funktion kallad delay somhittar på ngt skumt om jag sätter in a till tex 600 eller lägre så skickas ordet men sätter jag det tex 1200 så vägrar det funka. Har inte gjort ngra mätningar ännu och inte heller testat fram exkat vid vilken värde det ballar ut men koden är så enkel att jag inte bergriper alls vad som kan fela?
Kod: Markera allt
#define RF_en PORTA.F4
#define Switch PORTA.F5
int i=0,k=0;
int Vadc;
//Set 4Mhz clk
//Set digital I/O registers and analog I/O
//Disable ccm
//Enable uart module with 9600baud
//Disable RF module to save power
void initMain(){
OSCCON=0b01101000;
TRISA=0b00100100;
ANSELA=0b00000100;
C1ON_bit=0;
SRLEN_bit=0;
UART1_Init(9600);
RF_en=1;
delay_ms(100);
RF_en=0;
}
// Enables sleep mode after sending data to achive power save
void Sleep(){
RF_en=0;
ADON_bit=0;
asm sleep;
}
//sec_Delay is used to avoid false triggering depending on user case
//Int a sets delay time in sec. 60sec, 3600sec, etc
void sec_Delay(int a){
while(k<a){
delay_ms(1000);
k++;
}
k=0;
}
//When used as mail trigger, (do not use Sleep() here)
void PostTX(){
while(1){
if(Switch==1){
RF_en=1;
delay_ms(1000);
for(i=0;i<11;i++){
UART1_Write_Text("Post\n");
delay_ms(500);
}
RF_en=0;
}
}
}
//Enable RF module and sent trigger word 10 times
//Disble RF module to save power and set PIC in sleep mode
//Also set proper sec_Delay(a) time
/*Trigger words
1 1Brunn
2 2Brunn
3 Badkar
4 Kyl
5 Frys
6 3Kok
7 Toalett
8 Dusch
9 4Tvattstuga
10 Garage
*/
void WaterHeatTX(){
sec_Delay(600); //ÄNDRA DELAY HÄR!!!!
RF_en=1;
delay_ms(1000);
for(i=0;i<11;i++){
UART1_Write_Text("Garage\n"); //ÄNDRA TRIGGER <ORD HÄR!!!!
delay_ms(500);
}
}
//Read channel 2 from adc. ADC_Read initializes adc with internal Vref and clk
//Check if the value is less then 13dec. Converted to INT
// Vx=(1024/Vref)*Vth, Vth=5,5/2=2,75V, Vx=(1024/5)*2,75= 563 (int) calculated
//Blink LED if Vbat is low!
void Vbat(){
Vadc=ADC_Read(2);
if(Vadc<580){
while(1){
RF_en=1;
delay_ms(100);
RF_en=0;
delay_ms(1000);
}
}
}
//Initiate registers
//Execute WaterHeatTX OR Post TX
//Execute Sleep mode, (only used with WaterHeatTX!!!!)
void main(){
initMain();
WaterHeatTX();
//PostTX();
Vbat();
Sleep();
}