dallas ds1820 won't work when I use interrupts

Hello!
I’m buiilding a simple anemometer and temperature station (I’m using wheel mouse optical pair and DSS1820)
when I use anemometer sketch with hardware it works fine
when I use ds1820 sample sketch it also works fine
but when I put the code from both sketches it stops working
the code stops working even if I run “sensors.begin()” in setup procedure
I’m using I’m using timer and interrupts in my project
please help ((

here is my code:

#include <SPI.h>
#include <Ethernet.h>
#include <TimerThree.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 20, 210); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80
const int led = LED_BUILTIN;  // the pin with a LED
unsigned long windCount = 0;
unsigned long windCountCopy = 0;
float curTemp = 0;
int ledState = LOW;

void setup()
{
    Ethernet.begin(mac, ip);  // initialize Ethernet device
    server.begin();           // start to listen for clients
    pinMode(led, OUTPUT);
    attachInterrupt(1, blink, RISING);
    Timer3.initialize(1000000); //1 second
    Timer3.attachInterrupt(writeToPort); // blinkLED to run every 0.15 seconds
    Serial.begin(9600);
    sensors.begin();
}

void writeToPort(void)
{
  noInterrupts();
  windCountCopy = windCount;
  windCount = 0;
  interrupts();
  //sensors.requestTemperatures();
  //curTemp = sensors.getTempCByIndex(0);
  Serial.print("windCount = ");
  Serial.println(windCountCopy);  
}

void blink(void)
{
  windCount = windCount + 1;
  if (ledState == LOW) {
    ledState = HIGH;
  } else {
    ledState = LOW;
  }
  digitalWrite(led, ledState);
}

void loop()
{
    EthernetClient client = server.available();  // try to get client

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    // send web page
                    client.println("<!DOCTYPE html>");
                    client.println("<html>");
                    client.println("<head>");
                    client.println("<title>Arduino Web Page</title>");
                    client.println("<meta http-equiv=\"refresh\" content=\"1\" >");
                    client.println("</head>");
                    client.println("<body>");
                    String windCountStr = "";
//                    char curTempStr[15];
                    windCountStr += windCountCopy;
//                    dtostrf(curTemp, 3, 2, curTempStr);
//                    String curTempStr = dtostrf(curTemp, 2, 2, 10);
                    client.println("<p>Wind speed: " + windCountStr + "</p>");
     //               client.println("<p>Temperature: ");
       //             client.println(curTemp);
         //           client.println("</p>");
                    client.println("</body>");
                    client.println("</html>");
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                } 
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
}
    Timer3.attachInterrupt(writeToPort); // blinkLED to run every 0.15 seconds
    Serial.begin(9600);

...

void writeToPort(void)
{
  noInterrupts();
  windCountCopy = windCount;
  windCount = 0;
  interrupts();
  //sensors.requestTemperatures();
  //curTemp = sensors.getTempCByIndex(0);
  Serial.print("windCount = ");
  Serial.println(windCountCopy);  
}

Don't do serial prints in an interrupt routine. Don't turn interrupts off. Don't turn them back on.

thanks!
I've disabled serial prints and do not turn interrupts on/off
now it starts with sensors.begin()
but then if I enable

sensors.requestTemperatures();

then the whole sketch doesn't work again ((
double checked on Dallas example "simple", the DS1820 is not broken, I can read temperature from it
Can it be that I cannot read temperature "from inside timer3 interrupt" ?

Interrupts should be short and fast, like counting a millisecond tick. Things like printing and reading the temperature do not belong in interrupts.

You can't use things that depend on interrupts from within another interrupt handler, so yes you can't read the dallas sensor using from within the ISR.

Mark

Why do you need to read the temperature every second? Doesn't that device take something like 3/4 of a second to read?

For display on a web page, I would think that once a minute would be often enough. And, for that, interrupts and timers are completely unnecessary.