Pages: 1 [2]   Go Down
Author Topic: need to move 1 unsigned long serially really quick  (Read 1080 times)
0 Members and 1 Guest are viewing this topic.
Grand Blanc, MI, USA
Offline Offline
Faraday Member
**
Karma: 93
Posts: 3967
CODE is a mass noun and should not be used in the plural or with an indefinite article.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

You insensitive clod, my first communications link was at 300 baud using an acoustically coupled modem. 9600 baud will always seem fast to me. smiley-grin

LOL, we thought we were hot stuff when we got 1200 baud! smiley-grin
Logged

MCP79411/12 RTC ... "One Million Ohms" ATtiny kit ... available at http://www.tindie.com/stores/JChristensen/

Left Coast, CA (USA)
Offline Offline
Brattain Member
*****
Karma: 361
Posts: 17262
Measurement changes behavior
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

You insensitive clod, my first communications link was at 300 baud using an acoustically coupled modem. 9600 baud will always seem fast to me. smiley-grin

LOL, we thought we were hot stuff when we got 1200 baud! smiley-grin

Very true, and the first 1200 baud modems retailed for like $795 at the time.

Lefty
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Here is the receiver code

Code:
int  redpin = 3;
int  greenpin = 5;
int  bluepin = 6;
int  amberpin = 9;
int  pinkpin = 10;
int  outA = 2;
int  outB = 4;
int  outC = 7;
int  outD = 8;
int  outE = 11;
int  outF = 12;
int  outG = 13;
int  red = 0;
int  green = 0;
int  blue = 0;
int  amber = 0;
int  pink = 0;
int  valuecmd = 0;

void setup ()
{
Serial.begin(9600); 
pinMode (redpin, OUTPUT);
pinMode (greenpin, OUTPUT);
pinMode (bluepin, OUTPUT);
pinMode (amberpin, OUTPUT);
pinMode (pinkpin, OUTPUT);
pinMode (outA, OUTPUT);
pinMode (outB, OUTPUT);
pinMode (outC, OUTPUT);
pinMode (outD, OUTPUT);
pinMode (outE, OUTPUT);
pinMode (outF, OUTPUT);
}

void loop ()
{
readserial ();
}

void  readserial ()
{
  while (Serial.available() > 0)
  {
    red = Serial.parseInt();
    green = Serial.parseInt();
    blue = Serial.parseInt();
    amber = Serial.parseInt();
    pink = Serial.parseInt();
    valuecmd = Serial.parseInt();
    if (Serial.read() == ';')
    {
      output128 ();
      output64 ();
      output32 ();
      output16 ();
      output8 ();
      output4 ();
      output2 ();
      output1 ();
    }
  }
}

void output128 ()
{
  if (valuecmd > 128)
  {
    valuecmd = valuecmd - 128;
    digitalWrite (outA, HIGH);
  }
  else
  {
    digitalWrite (outA, LOW);
  }
}

void output64 ()
{
  if (valuecmd > 64)
  {
    valuecmd = valuecmd - 64;
    digitalWrite (outB, HIGH);
  }
  else
  {
    digitalWrite (outB, LOW);
  }
}

void output32 ()
{
  if (valuecmd > 32)
  {
    valuecmd = valuecmd - 32;
    digitalWrite (outC, HIGH);
  }
  else
  {
    digitalWrite (outC, LOW);
  } 
}

void output16 ()
{
  if (valuecmd > 16)
  {
    valuecmd = valuecmd - 16;
    digitalWrite (outD, HIGH);
  }
  else
  {
    digitalWrite (outD, LOW);
  }
}

void output8 ()
{
  if (valuecmd > 8)
  {
    valuecmd = valuecmd - 8;
    digitalWrite (outE, HIGH);
  }
  else
  {
    digitalWrite (outE, LOW);
  }
}

void output4 ()
{
  if (valuecmd > 4)
  {
    valuecmd = valuecmd - 4;
    digitalWrite (outF, HIGH);
  }
  else
  {
    digitalWrite (outF, LOW);
  }
}

void output2 ()
{
  if (valuecmd > 2)
  {
    valuecmd = valuecmd - 2;
    digitalWrite (outF, HIGH);
  }
  else
  {
    digitalWrite (outF, LOW);
  }
}

void output1 ()
{
  if (valuecmd > 0)
  {
    red = red /  4;
    red = constrain (red, 0, 255);
    analogWrite (redpin, red);
    green = green / 4;
    green = constrain (green, 0, 255);
    analogWrite (greenpin, green);
    blue = blue / 4;
    blue = constrain (blue, 0, 255);
    analogWrite (bluepin, blue);
    amber = amber / 4;
    amber = constrain (amber, 0, 255);
    analogWrite (amberpin, amber);
    pink = pink / 4;
    pink = constrain (pink, 0, 255);
    analogWrite (pinkpin, pink);
  }
  else
  {
    analogWrite (redpin, 0);
    analogWrite (greenpin, 0);
    analogWrite (bluepin, 0);
    analogWrite (amberpin, 0);
    analogWrite (pinkpin, 0);
  }
}

    and here is the transmitter code



Code:
int  bcd1 = 2;
int  bcd2 = 3;
int  bcd4 = 4;
int  bcd8 = 5;
int  analogpinred = 0;
int  analogpingreen = 1;
int  analogpinblue = 2;
int  analogpinamber = 3;
int  analogpinpink = 4;
int  red = 0;
int  green = 0;
int  blue = 0;
int  amber = 0;
int  pink = 0;
int  valuecmd = 0;

void setup ()
{
Serial.begin(9600); 
pinMode  (bcd1, INPUT);
digitalWrite (bcd1, HIGH);
pinMode  (bcd2, INPUT);
digitalWrite  (bcd2, HIGH);
pinMode  (bcd4, INPUT);
digitalWrite (bcd4, HIGH);
pinMode  (bcd8, INPUT);
digitalWrite (bcd8, HIGH);
}

void loop ()
{
readanalog ();
buildbcd ();
serialoutput ();
}

void  readanalog ()
{
  red = analogRead(analogpinred);
  green = analogRead(analogpingreen);
  blue = analogRead(analogpinblue);
  amber = analogRead(analogpinamber);
  pink = analogRead(analogpinpink);
}


void  buildbcd ()
{
  valuecmd = 0;
  if (digitalRead(bcd1) == LOW)
  {
    valuecmd = valuecmd + 1;
  }
  if (digitalRead(bcd2) == LOW)
  {
    valuecmd = valuecmd + 2;
  }
  if (digitalRead(bcd4) == LOW)
  {
    valuecmd = valuecmd + 4;
  }
  if (digitalRead(bcd8) == LOW)
  {
    valuecmd = valuecmd + 8;
  }
}

void serialoutput ()
{
  Serial.print(red);
  Serial.print(",");
  Serial.print(green);
  Serial.print(",");
  Serial.print(blue);
  Serial.print(",");
  Serial.print(amber);
  Serial.print(",");
  Serial.print(pink);
  Serial.print(",");
  Serial.print(valuecmd);
  Serial.print(";");
  delay (300);
}

Notice the delay 300. It I decrease it to 200 the receiver no longer works.  


For the uninformed, 9600 baud using FSK for data transmission is the limit at 900 Mhz since you must modulate the carrier wave. Going up to 2.4 Ghz radios will not work because while the data rate can go up considerably, the range falls apart becasue 2.4 Ghz will not penetrate more than 1 wall reliably. I need to transmit from inside the house to receivers in the yard ( several receivers actually ).

I am going to go to the single long integer. I will use 5 groups of 4 bits to run 5 outputs in PWM which will give 16 steps of dimming to those outputs. Then I will use 7 more bits to control the remaining outputs as on and off only.

I am going to try the example at the Arduino web site    http://arduino.cc/en/Tutorial/Dimmer

Do you all hate that example also.


Moderator edit: [code] [/code] tags added.
« Last Edit: January 07, 2013, 09:05:59 pm by Coding Badly » Logged

Left Coast, CA (USA)
Offline Offline
Brattain Member
*****
Karma: 361
Posts: 17262
Measurement changes behavior
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Your serial receiver code is all wrong. You are assuming you can read many many characters that have not yet arrived based on using only one serial.available command, plus I'm sure you have other faults in the receiver logic but the first one above is a show stopper. Serial.available returns the amount of characters you can read and are avalible for your use, you can read no more characters unless you know for sure they have arrived and are waiting in the software buffer holding them. The way you are using serial.available will trigger when the very first character arrives, yet you go ahead and assume many other characters have arrived and read bogus characters into a bunch of variables.

This needs a rewrite once you get a better handle on how serial works and the need to deal with each individual serial character when it indeed has arrived.

Lefty

« Last Edit: January 07, 2013, 09:34:18 pm by retrolefty » Logged

Left Coast, CA (USA)
Offline Offline
Brattain Member
*****
Karma: 361
Posts: 17262
Measurement changes behavior
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

You know that there is a library available that will do your transfer of variables from arduino to ardino via serial all automatically. Just a matter of putting the required variables into a single structure on both ends and using the easy transfer library. Good stuff, give it a try.

http://www.billporter.info/2011/05/30/easytransfer-arduino-library/

Lefty
Logged

Pages: 1 [2]   Go Up
Jump to: