/* UDPSendReceive.pde: This sketch receives UDP message strings, prints them to the serial port and sends an "acknowledge" string back to the sender A Processing sketch is included at the end of file that can be used to send and received messages for testing with a computer. created 21 Aug 2010 by Michael Margolis This code is in the public domain. */ #include #include "wiring_private.h" // pinPeripheral() function #define ETHERNET_ON true #define RADIOSEND true #if ETHERNET_ON #include #include // UDP library from: bjoern@cs.stanford.edu 12/30/2008 #endif #include "nRF24L01MOD.h" #include "RF24MOD.h" #include "printfMOD.h" #if ETHERNET_ON // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 60); unsigned int localPort = 8888; // local port to listen on // buffers for receiving and sending data char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet, char ReplyBuffer[] = "acknowledged"; // a string to send back // An EthernetUDP instance to let us send and receive packets over UDP EthernetUDP Udp; #endif #define CE_PIN A1 #define CSN_PIN A0 int radioId = 'F'; // id fijo para la cama. Fuera del rango de los IDs DIP /*-----( Declare objects )-----*/ RF24 radio(CE_PIN, CSN_PIN); // Create a Radio /*-----( Declare Variables )-----*/ uint8_t CMD[ 32 ]; // CMD + Ch + 6 // NOTE: the "LL" at the end of the constant is "LongLong" type const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe int ch = 76; // canal para sala developpers. Por defecto es el canal 76 (showroom) char c; String inputString; bool stringComplete; int i; int R = 0; int G = 0; int B = 0; int r1 = 0; int r2 = 0; int r3 = 0; int r4 = 0; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); //delay(4000); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } #if ETHERNET_ON // start the Ethernet and UDP: Ethernet.begin(mac, ip); Udp.begin(localPort); #endif radioId = 1; radio.begin(); printf_begin(); radio.setDataRate( RF24_250KBPS ); radio.setPALevel( RF24_PA_MAX ); radio.setAutoAck(0); radio.setPayloadSize(8); radio.setChannel(ch); #if RADIOSEND radio.openWritingPipe(pipe); #else radio.openReadingPipe(1, pipe); radio.startListening(); #endif radio.printDetails(); } void loop() { #if ETHERNET_ON // if there's data available, read a packet int packetSize = Udp.parsePacket(); if (packetSize) { Serial.print("Received packet of size "); Serial.println(packetSize); Serial.print("From "); IPAddress remote = Udp.remoteIP(); for (int i = 0; i < 4; i++) { Serial.print(remote[i], DEC); if (i < 3) { Serial.print("."); } } Serial.print(", port "); Serial.println(Udp.remotePort()); // read the packet into packetBufffer Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE); Serial.println("Contents:"); Serial.println(packetBuffer); // send a reply, to the IP address and port that sent us the packet we received Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(ReplyBuffer); Udp.endPacket(); } delay(10); #endif //////////////////////////////////////////////////////////// /////// RUTINA TRATAMIENTO DE STRINGS DEL UART /////////// //////////////////////////////////////////////////////////// if (Serial.available()) { c = Serial.read(); //Serial.print(c); //ble.write(c); if ((c == '\r') || (c == '\n')) { if (inputString == "ping") { Serial.println("received ping"); } else if (inputString.startsWith("ch:")) { Serial.print("canal: "); String str = inputString.substring(inputString.lastIndexOf(":") + 1); ch = str.toInt(); Serial.println(ch); radio.setChannel(ch); // canal para sala developpers. Por defecto es el canal 76 (showroom) } else if (inputString.startsWith("radio:")) // 'radio:' cmd , ch, data1, data2, data3 { // CMD: 'D', 'A', 'U' // antiguos 'p', 's', 'r' , 'b' //radio:D,0,1,1 // digital DVK & USB //radio:A,0,255,0,0 // rojo DVK //radio:B,F,6,255,255,0 rojo CAMA //radio:B,F,1 STOP MOTORES #if debug Serial.println("received radio->" + inputString); #endif String str = inputString.substring(inputString.indexOf(":") + 1); #if debug Serial.println("str->" + str); #endif String command = str.substring(0, str.indexOf(',')); command.trim(); CMD[0] = command[0]; int index = 1; int commaIndex = 0; do { commaIndex = str.indexOf(',', commaIndex + 1); String tmp = str.substring(commaIndex + 1, str.indexOf(',', commaIndex + 1)); tmp.trim(); if (isNumeric(tmp)) { CMD[index] = tmp.toInt(); } else { CMD[index] = tmp[0]; } index++; } while (str.lastIndexOf(',') != commaIndex); for (int i = 0; i < index; i++) { Serial.println((int)CMD[i]); } radio.writeFast( CMD, sizeof(CMD) ); // STREAM SIN CONTROL DE LLEGADA } //Serial.println(inputString); inputString = String(); } else inputString += c; } } /*Todo esto sobra*/ boolean isNumeric(String str) { for (char i = 0; i < str.length(); i++) { if ( !(isDigit(str.charAt(i)) )) { return false; } } return true; }