Asked — Edited

Uart Connecting To An Arduino

I'm very new to both the ez-b4 and Arduino and need basic help or advice. With my robot I want to be able to control LEDs through an Arduino. I have a Mega and with it I can add more LED functions to it as I learn. I've been reading a lot of posts on this and I took in so much info, I think I'm just dangerous and not knowledgeable.

I want to start simple, just turn on and off LEDs through my Arduino. I eventually want to control more LEDs and do more than just turn on and off.

Right now my Ez-b is powered through my main power source at 7v. My Arduino is plugged into my laptop and powered with USB, once mounted in my robot, an R2, it will run off the same power source, not through the Ez-b, and will power up when the Ez-b powers up.

Using UART 0 I connect the TX and RX to TX and RX of the Arduino. I'm unsure if it matters which ones. TX0, RX0 or any of the other numbered through 1-3, pins 14-19.

I found a nice Arduino code to get me going for loading onto the Arduino.


/*
 2  Simple LED sketch
 3  */
 4 
 5 int led = 13; // Pin 13
 6 
 7 void setup()
 8 {
 9     pinMode(led, OUTPUT); // Set pin 13 as digital out
10 
11     // Start up serial connection
12     Serial.begin(9600); // baud rate
13     Serial.flush();
14 }
15 
16 void loop()
17 {
18     String input = "";
19 
20     // Read any serial input
21     while (Serial.available() > 0)
22     {
23         input += (char) Serial.read(); // Read in one char at a time
24         delay(5); // Delay for 5 ms so the next char has time to be received
25     }
26 
27     if (input == "on")
28     {
29         digitalWrite(led, HIGH); // on
30     }
31     else if (input == "off")
32     {
33         digitalWrite(led, LOW); // off
34     }
35 }

I still have a bunch to read up on the scripting part in ARC and how to actually send the on off command, but first, how do I correctly connect the two devices together? I know I can connect LEDs to the Ez-b, but it will use up ports and I want to expand my use of LEDS.

Thanks and sorry forwhat I'm guessing is probably very basic question.


ARC Pro

Upgrade to ARC Pro

Experience the transformation – subscribe to Synthiam ARC Pro and watch your robot evolve into a marvel of innovation and intelligence.

#9  

Okay, back at my desk now.

I haven't tested this out but I would do something like this in a script.


if(UARTAvailable( 0, 0 ))
    UARTWrite( 0, 0, "Whatever you want to send here" )
else
   UARTInit( 0, 0, 9600 )
   Sleep(500)
   if(UARTAvailable( 0, 0 ))
      UARTWrite( 0, 0, "Whatever you want to send here" )
   else
      SAY("I can't communicate with my light controller")
   end if
end if

#10  

I get an error message-

Error on line 1: Missing 2 closing statement (ENDIF/ENDREPEAT/ENDREPEATUNTIL/ENDREPEATWHILE/etc)
Done (00:00:00)

I tried running just

 UARTWrite( 0, 0, "on" )

I get a done message, but my lights don't turn on. They are plugged in correct, I tested them before changing it to the code above. If I reupload the sketch, the light on pin 13 blinks.

I put the UARTthe Init( 0, 0, 9600 ) in the connection script area.

PRO
Synthiam
#11  

Dave, your code in the previous response doesn't make sense:). Checking UartAvailable() returns the number of bytes in the input buffer.

Also, kashyyk, the error you are receiving is telling you exactly what is missing. Read the error and understand each word in the sentence. Just like you are reading my response, the error message is also a sentence. It's telling you something:)

PRO
Synthiam
#12  

Don't use words for commands like "ON" or "OFF". Create a protocol instead. If you simply use a BYTE (0-255), then you have 255 different commands to send. You can make it so some commands have parameters, but don't use the word "ON" or "OFF", that's getting into writing console commands for user interfaces and entirely out of scope for the question.

Look at the EZ-B protocol if you need an example of what a protocol looks like. You can view it here: https://synthiam.com/Tutorials/Lesson/18?courseId=4

Here is working sample code...

ARDUINO


int led = 13; // Pin 13

void setup() {

  pinMode(led, OUTPUT); // Set pin 13 as digital out

  // Start up serial connection
  Serial.begin(9600); // baud rate
  Serial.flush();
}

void loop() {

  // Wait until there is data
  while (Serial.available() > 0) {

    int input = Serial.read();

    if (input == 33) 
      digitalWrite(led, HIGH); // on
    else if (input == 44)
      digitalWrite(led, LOW); // off
  }
}

EZ-SCRIPT


UARTInit(0, 0, 9600)

:loop

  sayezbWait("I am turning on LED")
  UARTWrite(0, 0, 33) 

  sleep(4000)

  sayezbWait("I am turning off LED")
  UARTWrite(0, 0, 44) 

  sleep(4000)

goto(loop)

#13  

Thanks for the correction DJ. What I was doing in my C# project didnt transfer well here.

#14  

Thanks DJ! I'll try it out later this afternoon.