I have a Arduino Uno, and a Linksys wrt54gs v4 router that is running OpenWRT, i am having a issue, i need to send serial data from the router to the arduino, i have the arduino conencted up to the router, the serial pin header on the router is conencted dirrectly to the arduino
router gnd <-----> arduino gnd
router TX <------> Arduino RX
router RX <------> Arduino TX
it was working perfectly, with my script before i had to reflash the firmware on the router..
the serial port on the router is fine, if i connect the routers RX and TX lines together and open up 2 SSH sessions, one with the command "cat /dev/tts/1" and on the other "echo test > /dev/tts/1" i get the text "test" on the cat window
on the arduino, same deal, serial works fine.
when i have this sketch running on the arduino, the arduino easily recieves the serial data
void setup () {
}
void loop () {
}
but when i have this sketch running on the arduino
#define DEBUG 0
#define WAIT_FOR_START 1
unsigned char incomingByte = 0;
unsigned long loop_count = 0;
unsigned char horn = 32;
unsigned char redLED = 64;
unsigned char BlueLED = 128;
unsigned char FireWeapon = 4;
unsigned char LeftForward = 1;
unsigned char LeftReverse = 2;
unsigned char RightForward = 4;
unsigned char RightReverse = 8;
unsigned char PORTB_val;
unsigned char PORTD_val;
unsigned char in_char = 0;
void setup()
{
//PORTD = digital IO 0-7
//FireWeapon, horn, redLED, BlueLED
pinMode(4, OUTPUT); // sets the digital pin as output
pinMode(5, OUTPUT); // sets the digital pin as output
pinMode(6, OUTPUT); // sets the digital pin as output
pinMode(7, OUTPUT); // sets the digital pin as output
//PORTB = digital IO 8 - 13
//LeftForward, LeftReverse, RightForward, RightReverse
pinMode(8, OUTPUT); // sets the digital pin as output
pinMode(9, OUTPUT); // sets the digital pin as output
pinMode(10, OUTPUT); // sets the digital pin as output
pinMode(11, OUTPUT); // sets the digital pin as output
Serial.begin(9600); // set up Serial library at 9600 bps
PORTD = redLED; // turn on the red LED
#if DEBUG
flash_led(3,500);
#endif
wait_for_start(); //Waits for startup message from router serial port
//continues after receiving it.
}
void flash_led(unsigned int count, unsigned int rate)
{
// debug routine that flashes an LED
int n_count = 0;
while (n_count < count)
{
n_count++;
digitalWrite(13, HIGH); // sets the LED on
delay(rate); // waits for a bit
digitalWrite(13, LOW); // sets the LED off
delay(rate); // waits for a bit
}
}
char get_char()
{
//Function that waits for a character from the serial port
//If none are received, it returns 0.
//The timeout is so that if the router stops sending data to the microcontroller,
//the micrcontroller will stop driving the car, rather than just going forever with
//the last command. Timeout is around 250mS.
while (loop_count < 30000)
{
loop_count++;
if (Serial.available() > 0)
{
incomingByte = Serial.read();
loop_count = 0;
return incomingByte;
}
}
loop_count = 0;
#if DEBUG
Serial.print('X', BYTE);
#endif
return 0;
}
unsigned char wait_for_start()
{
//Waits for startup message from router serial port
#if WAIT_FOR_START
#if DEBUG
Serial.println("Waiting...");
#endif
while(1)
{
if (get_char() == 'j' && get_char() == 'b' && get_char() == 'p' && get_char() == 'r' && get_char() == 'o')
{
#if DEBUG
Serial.print("Start Code Recieved");
#endif
return 0;
}
}
#endif
}
void loop()
{
//Function that processes input from serial port and drives the Robot based
//on that input.
in_char = get_char();
//Split byte received in to upper and lower halves.
PORTB_val = in_char & 0x0F;
PORTD_val = in_char & 0xF0;
//Make sure the BlueLED is turned on now.
if ((PORTD_val & BlueLED) == 0)
{
PORTD_val = PORTD_val + BlueLED;
}
//The following IF statements are sanity checks to make sure that LeftForward and LeftReverse cannot be on at the same time
//and that RightForward and RightReverse can't be on at the same time.
if ((PORTB_val & (RightForward + RightReverse)) == (RightForward + RightReverse))
{
PORTB_val = PORTB_val - RightReverse;
}
if ((PORTB_val & (LeftForward + LeftReverse)) == (LeftForward + LeftReverse))
{
PORTB_val = PORTB_val - LeftForward;
}
//Write the processed values to the ports.
PORTD = PORTD_val;
PORTB = PORTB_val;
#if DEBUG
Serial.print(PORTD, HEX);
Serial.print(PORTB, HEX);
#endif
}
the arduino doesnt even acknowledge that i have sent serial data to it, even if im running the arduino off its own power supply..
anyone know how i can fix this?