How to send a number as a number or How to rule an LED
Claudi Cornaz
claudi.c at fiberworld.nl
Sat Feb 5 07:19:33 EST 2011
Hi tom,
I am working with the same. What I undersrtand and have found on forums etc
you need to use atoi() to convert from type char to int.
You send out 3 chars when sending for instance, 125.
The arduino seial.read routine will fetch 3 chars (125)
I use a startChar 1 or more data chars and then a stopChar like "<125>"
This is what I send to the arduino
Then on the arduino I do serial.read() till I recieve a "<" char.
As soon as I have "<" I start gathering the bytes in a char tDataStr[8] var
till I see a ">" char. Now I convert this char tDataStr to a int with atoi()
int tDataInt;
tDataInt = atoi(tDataStr); // now I have a int which I can pass as value to
analogWrite(ledPin, tDataInt);
At least this is how it is recommended on the forums.
I almost got this working.
By the way I also noticed the following
Use open driver "xxx" for text update -- same as you
then the first read you do should be in a "for 1 line" or "for x chars"
Once this first read is done with the "for xx" form it looks like something in LC gets initialized right
so subsequent reads can be until empty.
I am still trying to figure this out more precisly and some real stress testing as soon as I have
a demo working which involves sending sensor values from the arduino to LC and vice versa
I am almost there. Still struggeling with some C code, but slowly getting the hang of C)
I hope to have a nice demo this weekend and will upload it to revOnline once it's working like I want it to.
Best wishes,
Claudi
On 4 feb 2011, at 17:22, Thomas McGrath III wrote:
> I am having a problem communicating with an LED. (Never thought I'd hear myself say that!)
>
> I have code in LC in a slider:
> -- We are open driver ... for text update
> on mouseUp
> put the thumbPosition of me into tValue
> doUpdate(tValue)
> end mouseUp
> on doUpdate tValue
> put gThePort into thePort -- global port "/dev/cu.usbmodem1a21"
> read from file thePort until empty -- clear the buffer
> put it into field "Data" -- just to see what garbage is left over - not needed
> wait 30
> write tValue to file thePort -- Vaule is 0 -255 as per the Analog specs of a PWM on the Arduino Uno for an LED
> read from file thePort until empty -- Arduino is set to send back the data received this is so I can see it
> put it after field "Data"
> if the result is not empty then put the result into field "Results" -- gives us our eof
> end doUpdate
>
> I send out a 125 but I get back three lines:
> 1
> 2
> 5
> but the analogWrite is looking for 125
>
> void loop() {
> // check if data has been sent from the computer:
> if (Serial.available()) {
> // read the most recent byte (which will be from 0 to 255):
> char received = Serial.read();
>
> // set the brightness of the LED:
> analogWrite(ledPin, received);
> Serial.println(received);
> }
> }
>
> If I change the Serial.println to Serial.println(received, BYTE); I still get:
> 1
> 2
> 5
> But if I change it to Serial.println(received, DEC); I get these results:
> 49
> 50
> 53
>
> So How do I send a number as a number and not as single digits?
>
>
> -- Tom McGrath III
> http://lazyriver.on-rev.com
> 3mcgrath at comcast.net
>
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list