CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

urgent..<<remote control>>...

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
luna



Joined: 11 Aug 2010
Posts: 3
Location: MALAYSIA

View user's profile Send private message

urgent..<<remote control>>...
PostPosted: Fri Nov 26, 2010 6:49 am     Reply with quote

Hi Everyone,


I'm trying to make software UART work that received data from remote control through Zigbee (XBee OEM RF) wireless comm.

In my project, I have one remote control and one slave. …at the slave equipped lamp (at RB0) and motor (RB1). Besides at the slave also consist 2 manual switches to control ON/OFF for the device (lamp and motor)

the problem here:

when I send a command to on lamp, it will blink due to the switch at slave in off mode.
Anyone knows how to solve this problem? Plzz… I really appreciate who can help me..

Here I post my coding.


remote control:

Code:

#include <18f2455.h>
#fuses HS,NOLVP,NOWDT,NOPROTECT       
#use delay(clock=8000000)          // 20 MHz crystal on PCB
#use rs232(baud=9600, UART1,ERRORS)       
#include <stdlib.h>

#define LED_0 PIN_B4

void main()
{

set_tris_a(0b01111111);
set_tris_b(0b00000000);

   while (TRUE)
   {
      if (input(PIN_A2)==1)
      {
         output_high(LED_0);
         printf("x");            //sends signal x
       }
       if (input(PIN_A1)==1)
      {
         output_high(LED_0);
         printf("y");            //sends signal x
       }
        if (input(PIN_A0)==1)
      {
         output_high(LED_0);
         printf("z");            //sends signal z-off
       }

       }
   }


program at slave
Code:

#include <18F4550.h>
#fuses HS,NOLVP,NOWDT,NOPROTECT   
#define use_portb_kbd TRUE
#use delay(clock=20000000)       // 20 MHz crystal on PCB
#use rs232(baud=9600, UART1,ERRORS)       // hardware uart much better; uses  RC6/TX and RC7/RX
#include <stdlib.h>

#DEFINE lamp  PIN_B0
#DEFINE motor  PIN_B1

void manual_switch (void); //define a function
char x;

void main()
{

 /*initialize*/
output_low(lamp);
output_low(motor);
delay_ms(100);

while (true)
{
manual_switch ();
if (kbhit())
{
 x = getc();

        if (x=='x')
       {
         output_high(lamp);
         delay_ms(500);
       }
        if (x=='y')
       {
        output_high(motor);
        delay_ms(500);
       }
        if (x=='z')
       { 
         output_low(lamp);
         output_low(motor);
         delay_ms(500);
      }

}
}
}


void manual_switch (void) //define a function
{
/////if button pressed(S1)/////
if(input(pin_a0)==1)
{
output_high(lamp);
delay_ms(500);
}
else if (input(pin_a0)==0)
{
output_low(lamp);
delay_ms(500);
}

/////if button pressed(S2)///////

if(input(pin_a1)==1)
{
output_high(motor);
delay_ms(500);
}
else if (input(pin_a1)==0)
{
output_low(motor);
delay_ms(500);
}

}

plz... help me..  :cry:
Ttelmah



Joined: 11 Mar 2010
Posts: 19541

View user's profile Send private message

PostPosted: Fri Nov 26, 2010 8:51 am     Reply with quote

This is not really a remote control or programming problem, but a 'logic' problem.

You need to think 'who is master'. Your slave device has two possible control sources. Which one are you going to treat as 'ruling'. Currently, both have equal priority, so that when the master device turns the lamp 'on', the code then looks at the switch, and responds to this to turn it back 'off'.

A number of possible solutions (by no means all....):
Have the switch 'ignored' once a software control is received, until the software and switch are again in agreement.
Alternatively, change the hardware of the switch to be a 'momentary' type. then have the switch operation at the slave, instead of being on/off, become 'toggle' If the light is on, pushing the switch turns it off, and vice-versa. The master can switch the light on or off when required, and at any time, pushing the switch reverses the current setting.
Have a 'timer'. When the master operates the light, the switches are ignored for (say) 30 seconds. Have the master automatically send a command every 25 seconds. Then the switch only becomes useable if the master is _not_ talking to the slave.

Personally, I'd probably go for the 'toggle' option. Easy to implement, and effective.

Best Wishes
Kerron



Joined: 16 Nov 2010
Posts: 5

View user's profile Send private message

PostPosted: Tue Dec 28, 2010 8:58 pm     Reply with quote

What are you trying to accomplish exactly? I have code that might help
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group