Udp.write (arduino) and receiver processing

edited August 2017 in Arduino

Hello all, Can you help with project for my aquarium? I want to measure temperature in the two aquarium. But I not know recieve packet, partion and save to variable. I not know very good programing, because I need ony project for akvarium... Thank you All.. Processing: import hypermedia.net.*;

 UDP udp;  // DEFINUJ UDP 

int yosa; // osa šipky
int posliY; // přijmute hodnoty teplomeru
int posliX;  // přijmute hodnoty

void setup() {
  posliY = 80; //zakladni hodnota před přijmutim paketu
  posliX = 80; //zakladni hodnota před přijmutim paketu
  size(400,400);
  udp = new UDP( this, 6000 );  // VYTVOR KOMUNIKACI NA UDP PORT 6000
  udp.log( true );
 udp.listen( true );           // ČEKEJ NA ZPĚTNOU VAZBU
  String ip       = "192.168.1.177";  // VZDÁLENÁ IP ADRESA
 int port        = 8888;    // KOMUNIKAČÍ PORT
 udp.send("start", ip, port ); //pošli první paket
}
void receive( byte[] data ){ //přijmi pakety
// přijmi řetězec znaku
  String message = new String( data );
  String[] parts = split(message, "&");//pakety jsou rozděleny & 
  posliX = int(parts[0]);//paket
  posliY = int(parts[1]);//paket

  println( "přijmuto: x = \""+posliX+"\" přijmuto: x = \""+posliY+"\" ");   //vypiš data do terminálu
  }

Arduino:

//knihovny
#include <SPI.h>         
#include <Ethernet.h>
#include <EthernetUdp.h> 
//knihovny pro DS18b20
#include <OneWire.h>
#include <DallasTemperature.h>
// Připojení čidla na pin 8
#define ONE_WIRE_BUS_PIN 8
OneWire oneWire(ONE_WIRE_BUS_PIN);//nastavení komunikace po I2S sběrnici
DallasTemperature sensors(&oneWire);//předání dat z I2S teploměru
// Adresa HW na I2S
DeviceAddress tepl1 = { 0x28, 0xFF, 0xC7, 0x49, 0x71, 0x15, 0x01, 0x41 };//akvário 
DeviceAddress tepl2 = { 0x28, 0xE1, 0xC7, 0x40, 0x04, 0x00, 0x00, 0x0D }; //venkovní teplota

//mac, ip a port
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEG, 0xFE, 0xBD };
IPAddress ip(192, 168, 1, 177);

unsigned int localPort = 8888;      // naslouchej na tomto portu

EthernetUDP Udp;

void setup() {
  // start udp a ethernet:
  Ethernet.begin(mac,ip);
  Udp.begin(localPort);
  Serial.begin(9600);
    //Inicializuj čidla
  sensors.begin();
 // Nastav 10 bitů (9-12 bitů)
  sensors.setResolution(tepl1, 10);
  sensors.setResolution(tepl2, 10);
}

void loop() {
  sensors.requestTemperatures();  //Pošli příkaz čtení teploty

  //vypiš teploty na serial
  Serial.print("Teplota Akvária:   ");
  printTemperature(tepl1);
  Serial.println();

  Serial.print("Teplota vzduchu:   ");
  printTemperature(tepl2);
  Serial.println();

  // pokud jsou přečtena data přečti paket
  char packetBuffer[UDP_TX_PACKET_MAX_SIZE]="";
  int packetSize = Udp.parsePacket();
 if(packetSize)
  {
   Serial.print("Velikost prijmutych paketu");
   Serial.println(packetSize);
   Serial.print("z ");
   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());
     // přečti přijmaný znak
    Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
   Serial.println("Prijmuty paket:");
   Serial.println(packetBuffer);
    //pošli pakety zpět
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
   // Udp.write(sensors.getTempC(tepl1));
Udp.write("&");
     Udp.write(sensors.getTempC(tepl2));
    Udp.endPacket();  
  }
  delay(10);
}
//deklarace uživatelských funkčí čidla
void printTemperature(DeviceAddress deviceAddress)
{

float tempC = sensors.getTempC(deviceAddress);

   if (tempC == -127.00) //// Pokud bude teplota -127 vypiš chybu čidla
   {
   Serial.print("Err");
   } 
   else
   {
   Serial.print(tempC);// vypiš teplotu v C
   }
}
Sign In or Register to comment.