Cant read analog while ehternet shield connected.

I am trying to log some data from analog input to sd card. I am using tmp36 sensor, but I am only getting -50 degrees. Normally I get this value when I unplug 5v cable so I checked 5v pin but it works normally.

// Include libraries

#include <SPI.h>
#include <Ethernet.h>
#include <Time.h>
#include <TimeLib.h>
#include <SD.h>

// temp sensor consts
const unsigned int TEMP_SENSOR_PIN = 1;
const unsigned int SUPPLY_VOLTAGE = 5;
const unsigned int BAUD_RATE = 9600;

byte mac [] = { 0x90, 0xA2, 0xDA, 0x0E, 0xFE, 0x40 };

// Chip select pin
const int chipSelect = 4;

// NTP Server
IPAddress timeServer(129, 6, 15, 28);
const int timeZone = 1;

// Create UDP server
EthernetUDP Udp;
unsigned int localPort = 8888;

void setup() {
  
 // Open serial communications
  Serial.begin(BAUD_RATE);
  
// disabling sd card 
  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH);
  
  // Start Ethernet
  if (Ethernet.begin(mac) == 0) {
    // no point in carrying on, so do nothing forevermore:
    while (1) {
      Serial.println("Failed to configure Ethernet using DHCP");
      delay(10000);
    }
  }

    // Init SD card
  Serial.print("Initializing SD card...");
  pinMode(10, OUTPUT);
  
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");
  
  // Print server info
  Serial.print("IP number assigned by DHCP is ");
  Serial.println(Ethernet.localIP());
  Udp.begin(localPort);
  Serial.println("waiting for sync");
  setSyncProvider(getNtpTime);
}

void loop() {
  
  //   Measure the temperature
  const int sensor_voltage = analogRead(TEMP_SENSOR_PIN);
  const float voltage = sensor_voltage * SUPPLY_VOLTAGE / 1024;
  float t = (voltage * 1000 - 500) / 10;
  
  // Transform to String
  String temp = String((int) t);
  
  // Format time
  String log_time = String(day()) + "/" + 
  String(month()) + "/" + String(year()) + " " + 
  String(hour()) + ":" + String(minute()) + ":" + 
  String(second());
  
  // Make a string for assembling the data to log
  String dataString = log_time + "," + temp ;

  // Open file
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  
  // Write data to file
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    Serial.println(dataString);
  }  
  else {
    Serial.println("error opening datalog.txt");
  }
  
  // Repeat every 10 seconds
  delay(10000);
}

const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message
byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets

time_t getNtpTime()
{
  while (Udp.parsePacket() > 0) ; // discard any previously received packets
  Serial.println("Transmit NTP Request");
  sendNTPpacket(timeServer);
  uint32_t beginWait = millis();
  while (millis() - beginWait < 1500) {
    int size = Udp.parsePacket();
    if (size >= NTP_PACKET_SIZE) {
      Serial.println("Receive NTP Response");
      Udp.read(packetBuffer, NTP_PACKET_SIZE);  // read packet into the buffer
      unsigned long secsSince1900;
      // convert four bytes starting at location 40 to a long integer
      secsSince1900 =  (unsigned long)packetBuffer[40] << 24;
      secsSince1900 |= (unsigned long)packetBuffer[41] << 16;
      secsSince1900 |= (unsigned long)packetBuffer[42] << 8;
      secsSince1900 |= (unsigned long)packetBuffer[43];
      return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;
    }
  }
  Serial.println("No NTP Response :-(");
  return 0; // return 0 if unable to get the time
}

// send an NTP request to the time server at the given address
void sendNTPpacket(IPAddress &address)
{
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;
  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:                 
  Udp.beginPacket(address, 123); //NTP requests are to port 123
  Udp.write(packetBuffer, NTP_PACKET_SIZE);
  Udp.endPacket();
}

const unsigned int TEMP_SENSOR_PIN = 1;
/=
const unsigned int TEMP_SENSOR_PIN = A1;

some versions of the Ethernet shield use A0 and A1 for SD card detect and write protection signals

Have you tried printing the below operation to the serial monitor to see if you are getting values you expect?

  //   Measure the temperature
  const int sensor_voltage = analogRead(TEMP_SENSOR_PIN);
  const float voltage = sensor_voltage * SUPPLY_VOLTAGE / 1024;
  float t = (voltage * 1000 - 500) / 10;

Thank you all.

Firstly I changed

const unsigned int TEMP_SENSOR_PIN = 1;

to

const unsigned int TEMP_SENSOR_PIN = A3

But it didn't made any changes.

Then I made this changes to check values

const int sensor_voltage = analogRead(TEMP_SENSOR_PIN);
  Serial.print("sensor voltage : ");
  Serial.println(sensor_voltage);
  const float voltage = sensor_voltage * SUPPLY_VOLTAGE / 1024;
  Serial.print("voltage : ");
  Serial.println(voltage);

I realized sensor_voltage returns values that it should be but voltage returns 0, so I changed

const float voltage = sensor_voltage * SUPPLY_VOLTAGE / 1024;

to

const float voltage = sensor_voltage  * 0.0048828125

that way problem fixed and I get accurate results.

After that I split voltage line so the code can do operations in separate lines.

const int sensor_voltage = analogRead(TEMP_SENSOR_PIN);
  Serial.print("sensor voltage : ");
  Serial.println(sensor_voltage);
  const float voltage2 = sensor_voltage * SUPPLY_VOLTAGE;
  Serial.print("voltage2 : ");
  Serial.println(voltage2);
  const float voltage = voltage2 / 1024;
  Serial.print("voltage : ");
  Serial.println(voltage);
  float t = (voltage * 1000 - 500) / 10;

This also worked. Can you explain why arduino cant make two multiplication and one division operation in one line?

you have to be carefull:
if you are only using int in your terms, the controller will calculate in int.

Example:

const float voltage = sensor_voltage * SUPPLY_VOLTAGE / 1024;

const float voltage = 200 * 5 / 1024;

you will get a perfect 0

you could either cast or use at least one float in your calculation.

Try (untested):
const float voltage = sensor_voltage * SUPPLY_VOLTAGE / 1024.0;

I assumed float itself does that job.
Thank you, problem solved.