// CPU: 80 MHz, v2 Lower Memory //
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define Wire_PIN 13
OneWire oneWire(Wire_PIN);
DallasTemperature sensors(&oneWire);
DeviceAddress Sensor_kaz_t = {0x28, 0x40, 0x48, 0x80, 0xE3, 0xE1, 0x3C, 0xEA };        //  9-bit
DeviceAddress Sensor_kaz_r = {0x28, 0xE0, 0x9C, 0x80, 0xE3, 0xE1, 0x3C, 0xF7 };        //  9-bit
int s1, s1_pr, s2, s2_pr;
int sensor_mert;
    
#define SLAVE_ADDRESS 0x60
#define I2C_BUFFER_LENGTH 256
//struct OUT from slave to master
typedef struct {
  signed short int int_1 = 0;
  signed short int int_2 = 10;
  signed short int int_3 = 0;
  signed short int int_4 = 10;
  signed short int int_5 = 10;
  signed short int int_6 = 0;
  signed short int int_7 = -10;
  signed short int int_8 = -10;
  signed short int int_9 = 0;
  signed short int int_10 = 10;
  signed short int int_11 = 10;
  signed short int int_12 = -10;
  signed short int int_13 = -10;
  }
B_t;
B_t my_struct2;
const int led = D4;
 String hello;
volatile boolean merhet = 0;
//if(strcmp(corpo, "123") == 0) { }  // ha a char corpo == 123
/////////////////////////////////////////////////////////////////////////
void setup(){
  Wire.begin(SLAVE_ADDRESS);
  Wire.onReceive(receiveEvent);
  Wire.onRequest(requestEvent);
  pinMode(led, OUTPUT); digitalWrite(led, HIGH);
   sensors.begin(); delay(10);       // of temp  9->0.5°C, 10->0.25°C, 11->0.125°C, 12->0.0625°C
   sensors.setResolution(Sensor_kaz_t, 9); delay(10);
   sensors.setResolution(Sensor_kaz_r, 9); delay(10);
  Serial.begin(115200);Serial.println();Serial.println();Serial.println("indul ...");
}
////////////////////////////////////////////////////////////////////////
void loop(){ 
 if(merhet == 1){  temp_sensor_read();
my_struct2.int_1 = s1/100;  
my_struct2.int_2 = s2/100;
my_struct2.int_3 += 1;   if(my_struct2.int_3 > 10000){ my_struct2.int_3 = 0; }
my_struct2.int_4 += 1;   if(my_struct2.int_4 > 10000){ my_struct2.int_4 = 0; }
my_struct2.int_5 += 1;   if(my_struct2.int_5 > 10000){ my_struct2.int_5 = 0; }
my_struct2.int_6 += 1;   if(my_struct2.int_6 > 10000){ my_struct2.int_6 = 0; }
my_struct2.int_7 += 1;   if(my_struct2.int_7 > 10000){ my_struct2.int_7 = 0; }
my_struct2.int_8 += 1;   if(my_struct2.int_8 > 10000){ my_struct2.int_8 = 0; }
my_struct2.int_9 += 1;   if(my_struct2.int_9 > 10000){ my_struct2.int_9 = 0; }
my_struct2.int_10 += 1;  if(my_struct2.int_10 > 10000){  my_struct2.int_10 = 0; }
my_struct2.int_11 += 1;  if(my_struct2.int_11 > 10000){  my_struct2.int_11 = 0; }
my_struct2.int_12 -= 1;  if(my_struct2.int_12 < -10000){ my_struct2.int_12 = 0; }
my_struct2.int_13 -= 1;  if(my_struct2.int_13 < -10000){ my_struct2.int_13 = 0; }
merhet = 0; 
} }
//////////////////////////////////////////////////
void requestEvent() {  digitalWrite(led, HIGH);
 if(hello == "hello"){
 Wire.write((byte *)&my_struct2, sizeof my_struct2); } 
 /* ez a kod szerint mar csak az elso szam erkezik meg, a tobbi osszevisszasag */
 hello = "";
 merhet = 1; }

/////////////////////////////////////////////////
void receiveEvent(int howMany) {
  digitalWrite(led, LOW);
 while (0 < Wire.available()) {
    char c = Wire.read();     
    hello += c;  } 
 Serial.print("keres:"); Serial.print(hello); Serial.println(".  "); // mukodik, kiirja hogy "hello"
}

void temp_sensor_read(){   
  sensors.requestTemperatures(); 
  sensor_mert = (sensors.getTempC(Sensor_kaz_t)) * 100;  
         if(sensor_mert != -12700) { s1 = 0.7 * s1_pr + 0.3 * sensor_mert;  s1_pr = s1; }
  sensor_mert = (sensors.getTempC(Sensor_kaz_r)) * 100; 
         if(sensor_mert != -12700) { s2 = 0.7 * s2_pr + 0.3 * sensor_mert;  s2_pr = s2; }       
         }
