Pages: [1]   Go Down
Author Topic: Controlling Arduino Pins over Serial - How i did  (Read 446 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 476
what?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello All,
This isn't a request for help, just how it took 2 days to figure out a simple and stupid mistake.
Using 2 XRF modules i wanted to control AT328's pin states, sending 2 bytes, pin number and state on|off

using this line
Code:
if (Serial.available()>0)
the led was switching on regardless of what bytes it received because it didn't wait for the 2nd byte

So the answer was
Code:
if (Serial.available()>1)
which does wait for 2 bytes before doing anything, and thats what took 2 days to figure out, Dumb huh?

The result is now by sending pin number and state i can control any pin on AT328, eventually relays,
I'm open to surgestions for improvements, like should i send 3 bytes, the first being a command byte?

TX Code - Turn on pin 13
Code:
Serial.println("P13"); // debug
Serial1.print(13,BYTE);  // Send Pin Number
Serial1.print(HIGH,BYTE);// Send Pin state ON

TX Code - Turn off pin 13
Code:
Serial.println("p13");  // debug
Serial1.print(13,BYTE);  // Send Pin Number
Serial1.print(LOW,BYTE); // Send Pin state OFF

RX Code
Code:
int cPin;  // Control Pin
int state; // Pin State, on | off

void setup()
{
  Serial.begin(9600);  // Start Serial
  pinMode(13,OUTPUT);  // Set Pin 13 led OUTPUT
}

void loop()
{
  if (Serial.available()>1) // wait for 2 bytes
  {
     cPin = Serial.read();  // First Byte is Pin Number
     state = Serial.read(); // 2nd Byte is Pin state on | off
     digitalWrite(cPin, state);  // Do it
  }
}
« Last Edit: August 04, 2012, 08:09:41 pm by P18F4550 » Logged

Pages: [1]   Go Up
Jump to: