Show Posts
|
|
Pages: [1]
|
|
2
|
Using Arduino / Programming Questions / Re: need to move 1 unsigned long serially really quick
|
on: January 07, 2013, 08:58:37 pm
|
Here is the receiver 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 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.
|
|
|
|
|
4
|
Using Arduino / Programming Questions / Re: need to move 1 unsigned long serially really quick
|
on: January 07, 2013, 04:54:12 pm
|
|
9600 baud is a necessity. I will be sending from one Arduino as the transmitter to multiple Arduinos as recievers. And this will be done using 900 Mhz RS232 wireless serial radios. They top out at 9600 baud. Without the delay in the transmitter program and using the serial monitor on the software to see what the transmitter is putting out with the present 6 integer, comma delimited stream, the speed ismore than quick enough. But the receiver cannot read it and stuff it back into 6 sets of integers. Right now for testing I am just connecting the Tx out of the transmitting Arduino to the Rx of the reicever on my workbench. I will put the radios in later but they are not part of the equation now. I will be using the 32 bits of the single long integer in various ways. 5 groups of 4 bits will be scaled from a binary 0-15 to a integer of 0 - 255 to drive 5 PWM outputs. 7 bits will directly control 7 outputs of the Arduino directly. Either on or off. One of the bits will be a system on - off bit. When off all of the outputs and the PWM values will be set to 0 . The rest of the 32 bits are spares for now.
|
|
|
|
|
5
|
Using Arduino / Programming Questions / need to move 1 unsigned long serially really quick
|
on: January 07, 2013, 01:17:42 pm
|
|
I need to move 1 unsigned long integer over the serial port from one arduino to another , over and over, without stopping, as fast as I can. Basically I will encode the bits of the integer in one arduino and then send that unsigned long integer to another arduino to decode them. I will do this over the serial port at 9600 baud. This is to control christmas lights next year so it has to happen really fast to keep the lights up with the music. I am currently doing this with a string of 6 integers, comma delimited and ending the string with a ; It works but I have to put a 300 ms delay on the transmitter or the decoding fails on the other end. And the data rate is to slow. I have read all of the libriaries and find the definitions for the serial stuff very confusing. I can get the serial print statement to work nicely at all speeds even with the delay between print statements eliminated. But getting the receiver to decode it without the delay of at least 300 ms between transmissions falls flat on its face. I came up with the idea of just using the single 32 bit unsigned integer instead of the 6, 16 bit integers withe the comma delimiter because I thought that should be more simple to speed up. But I am unsure how to proceed.
|
|
|
|
|
7
|
Using Arduino / Programming Questions / Re: Moving analog data over serial
|
on: January 01, 2013, 05:18:30 pm
|
|
Yes it does. Apparently the voltage levels on the pins 0 and 1 do not work for ttl. Rs232. When I jumper the tx pin on the header going to the Macintosh USB cable header on the arduino board to the Rex pin on the programming port on the reciever board the signal get there okay.
What kind of circuit do I have to use to get the pins 0 and 1 to have the correct voltage levels to communicate.
|
|
|
|
|
9
|
Using Arduino / Programming Questions / Moving analog data over serial
|
on: January 01, 2013, 03:46:06 pm
|
I need to move the analog data from the input pins on one arduino to another arduino over the serial port. I am able to get the analog data going out the serial port of the "transmitter" arduino and I have connected the tx output of the transmitter to the rx of the reciever. But I cannot get the data to the reciever. Here is the transmitter program 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.println(""); } and here is the reciever program int redpin = 2; 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 (); printserial (); }
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() == '\n') { output128 (); output64 (); output32 (); output16 (); output8 (); output4 (); output2 (); output1 (); } } }
void output128 () { if (valuecmd > 127) { valuecmd = valuecmd - 128; digitalWrite (outA, HIGH); } else { digitalWrite (outA, LOW); } }
void output64 () { if (valuecmd > 637) { valuecmd = valuecmd - 64; digitalWrite (outB, HIGH); } else { digitalWrite (outB, LOW); } }
void output32 () { if (valuecmd > 31) { valuecmd = valuecmd - 32; digitalWrite (outC, HIGH); } else { digitalWrite (outC, LOW); } }
void output16 () { if (valuecmd > 15) { valuecmd = valuecmd - 16; digitalWrite (outD, HIGH); } else { digitalWrite (outD, LOW); } }
void output8 () { if (valuecmd > 7) { valuecmd = valuecmd - 8; digitalWrite (outE, HIGH); } else { digitalWrite (outE, LOW); } }
void output4 () { if (valuecmd > 3) { valuecmd = valuecmd - 4; digitalWrite (outF, HIGH); } else { digitalWrite (outF, LOW); } }
void output2 () { if (valuecmd > 1) { valuecmd = valuecmd - 2; digitalWrite (outF, HIGH); } else { digitalWrite (outF, LOW); } }
void output1 () { if (valuecmd > 0) { analogWrite (redpin, red); analogWrite (greenpin, green); analogWrite (bluepin, blue); analogWrite (amberpin, amber); analogWrite (pinkpin, pink); } else { analogWrite (redpin, 0); analogWrite (greenpin, 0); analogWrite (bluepin, 0); analogWrite (amberpin, 0); analogWrite (pinkpin, 0); } }
void printserial () { 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 ("\n"); } Any ideas what I am doing wrong here. Basically I am trying to move 6 values in a comma delimited format over the serial ports from one arduino to another. Thanks for any input Jim Moderator edit: [code] [/code] tags added.
|
|
|
|
|