Canberra, Australia
Offline
Jr. Member
Karma: 0
Posts: 53
Arduino rocks
|
 |
« Reply #60 on: January 14, 2010, 11:14:19 pm » |
I'm guessing on the controller side you could use read in the data from the controller (it comes out as 4 bytes) and you can just send these 4 bytes across the rf transmitter.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Jr. Member
Karma: 0
Posts: 63
Arduino rocks
|
 |
« Reply #61 on: January 16, 2010, 12:55:58 pm » |
heres the source code from the rf solution, it seems like there is some brief code for sending the data packets out but nothing we probably couldnt eek in. Let me know if you think this looks like a possibility? // Maurice Ribble // 8-30-2009 // http://www.glacialwanderer.com/hobbyrobotics // Used Arduino 0017 // This is a simple test app for some cheap RF transmitter and receiver hardware. // RF Transmitter: http://www.sparkfun.com/commerce/product_info.php?products_id=8945 // RF Receiver: http://www.sparkfun.com/commerce/product_info.php?products_id=8948
// This says whether you are building the transmistor or reciever. // Only one of these should be defined. //#define TRANSMITTER #define RECEIVER
// Arduino digital pins #define BUTTON_PIN 2 #define LED_PIN 13
// Button hardware is setup so the button goes LOW when pressed #define BUTTON_PRESSED LOW #define BUTTON_NOT_PRESSED HIGH
void setup() { pinMode(BUTTON_PIN, INPUT); pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW);
Serial.begin(1200); // Hardware supports up to 2400, but 1200 gives longer range }
#ifdef TRANSMITTER void loop() { static int prev_button = BUTTON_NOT_PRESSED; // Previous button press value int cur_button; // Current button press value
cur_button = digitalRead(BUTTON_PIN);
if ((prev_button == BUTTON_NOT_PRESSED) && (cur_button == BUTTON_PRESSED)) { writeUInt(271); // Put any number you want to send here (71 is just a test) } delay(50); // Debounce button prev_button = cur_button; } #endif //TRANSMITTER
#ifdef RECEIVER void loop() { boolean light_led = false;
if (readUInt(true) == 271) // Check to see if we got the 71 test number { light_led = true; } if (light_led) { digitalWrite(LED_PIN, HIGH); delay(1000); digitalWrite(LED_PIN, LOW); } } #endif //RECEIVER
thats the code for both the reciever and the transmitter....
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Jr. Member
Karma: 0
Posts: 63
Arduino rocks
|
 |
« Reply #62 on: January 16, 2010, 01:01:15 pm » |
also heres the error checking code, although i think this is just applicable to the reciever (besides the identifier that get sent before and after each packet) // Maurice Ribble // 8-30-2009 // http://www.glacialwanderer.com/hobbyrobotics // Used Arduino 0017 // This does does some error checking to try to make sure the receiver on this one way RF // serial link doesn't repond to garbage
#define NETWORK_SIG_SIZE 3
#define VAL_SIZE 2 #define CHECKSUM_SIZE 1 #define PACKET_SIZE (NETWORK_SIG_SIZE + VAL_SIZE + CHECKSUM_SIZE)
// The network address byte and can be change if you want to run different devices in proximity to each other without interfearance #define NET_ADDR 5
const byte g_network_sig[NETWORK_SIG_SIZE] = {0x8F, 0xAA, NET_ADDR}; // Few bytes used to initiate a transfer
// Sends an unsigned int over the RF network void writeUInt(unsigned int val) { byte checksum = (val/256) ^ (val&0xFF); Serial.write(0xF0); // This gets reciever in sync with transmitter Serial.write(g_network_sig, NETWORK_SIG_SIZE); Serial.write((byte*)&val, VAL_SIZE); Serial.write(checksum); //CHECKSUM_SIZE }
// Receives an unsigned int over the RF network unsigned int readUInt(bool wait) { int pos = 0; // Position in the network signature unsigned int val; // Value of the unsigned int byte c = 0; // Current byte if((Serial.available() < PACKET_SIZE) && (wait == false)) { return 0xFFFF; } while(pos < NETWORK_SIG_SIZE) { while(Serial.available() == 0); // Wait until something is avalible c = Serial.read();
if (c == g_network_sig[pos]) { if (pos == NETWORK_SIG_SIZE-1) { byte checksum;
while(Serial.available() < VAL_SIZE + CHECKSUM_SIZE); // Wait until something is avalible val = Serial.read(); val += ((unsigned int)Serial.read())*256; checksum = Serial.read(); if (checksum != ((val/256) ^ (val&0xFF))) { // Checksum failed pos = -1; } } ++pos; } else if (c == g_network_sig[0]) { pos = 1; } else { pos = 0; if (!wait) { return 0xFFFF; } } } return val; }
|
|
|
|
« Last Edit: January 16, 2010, 03:13:41 pm by dashdanw »
|
Logged
|
|
|
|
|
0
Offline
Jr. Member
Karma: 0
Posts: 63
Arduino rocks
|
 |
« Reply #63 on: January 16, 2010, 09:37:27 pm » |
also im thinking....if this rf setup runs on 315mhz solid, then how would you incorperate multiple controllers?
|
|
|
|
|
Logged
|
|
|
|
|
Canberra, Australia
Offline
Jr. Member
Karma: 0
Posts: 53
Arduino rocks
|
 |
« Reply #64 on: January 17, 2010, 05:24:14 am » |
I think that interfacing with the RF transmitter/receiver is done using Serial so it shouldn't be a problem, you can send anything you like. If you wanted multiple controllers, you could send a number (one for each controller) as an identifier along with the controller data and have the receiver split it apart.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Jr. Member
Karma: 0
Posts: 63
Arduino rocks
|
 |
« Reply #65 on: January 18, 2010, 02:19:14 am » |
ill need to probably alter the nop delays to add the numbers ahead and the hash and all that.
|
|
|
|
|
Logged
|
|
|
|
|
Canberra, Australia
Offline
Jr. Member
Karma: 0
Posts: 53
Arduino rocks
|
 |
« Reply #66 on: January 19, 2010, 01:52:37 am » |
You wouldn't need to. You would have the MCU at the transmitter end read from the controller, using the existing code and once that is done, send it wirelessly over with the id, error checking, etc. Because it's done in two stages, you don't need to adjust the delays.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Jr. Member
Karma: 0
Posts: 63
Arduino rocks
|
 |
« Reply #67 on: January 19, 2010, 01:48:28 pm » |
thanks waffle, ill start trying to parse the code into your existing code, ill let you know how i do....
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Jr. Member
Karma: 0
Posts: 63
Arduino rocks
|
 |
« Reply #68 on: January 21, 2010, 12:41:07 am » |
im thinking it might just be easiest to write out to the rf transmitter as you would a serial port without the signal verification, even if the data is corrupted several times consecutively it wont be enough to effect an entire frame of the game....i think..anyways gotta put it to the test somehow....
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Jr. Member
Karma: 0
Posts: 63
Arduino rocks
|
 |
« Reply #69 on: January 31, 2010, 02:41:46 pm » |
sweeeeeeet sweeeeet VICTORY! got the controller working! built this:  from an atmega328 and instructions from this instructables:http://www.instructables.com/id/Build-Your-Own-Arduino/step2/Setting-Up-Power/ also i can now, thanks to that schematic, hook up a rechargable battery, all i need to do now is work out which components can be removed from the setup when i make the arduino standalone, unfortunately sparkfun fuddled up my order and left a few 28 pin dip sockets out so no perminant soldering can commence till they come. In the meantime im going to work on the RF reciever/transmitter
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Jr. Member
Karma: 0
Posts: 63
Arduino rocks
|
 |
« Reply #70 on: January 31, 2010, 03:21:37 pm » |
sorry for the GIGANTIC image...damn [img] tags wont let me resize 
|
|
|
|
|
Logged
|
|
|
|
|
Vancouver, BC, Canada
Offline
Newbie
Karma: 0
Posts: 3
Arduino rocks
|
 |
« Reply #71 on: November 08, 2010, 04:35:06 pm » |
Hey dashdanw, congratulations on the controller!
I'm trying to do something similar, so for all the rest of us out here on the webs would you mind describing how you got it working in the end? Did you use the code from Instructables and XBee in your end project? Or did you send it over RF using serial communication?
Again, congrats, and so curious how you got it all working in the end! And don't worry, I'll never complain about too many details, lay 'em on... Thanks!
|
|
|
|
|
Logged
|
|
|
|
|
|