program appears not to loop?

Hi I am new to Arduino IDE and a novice programmer.

I have been pulling together a emonCMS energy monitor.

I am using an Intel Edison board.

I have found the following code on this forum which send info up to emonCMS and with some tweaks will do exactly what I need (hound here, Send email and send data to Emoncms in the same sketch - Programming Questions - Arduino Forum )

not modified it works, but it does it only runs once and does not loop back round again.

my understanding is that anything in void loop () will loop forever.. ? (possibly wrong)

I am not using the Arduino Ethernet, but my Edison is connected to my wifi network.

can anyone advise on why this only run/post to emonCMS once then stop? (apologies if it is obvious..)

Any assistance would be gratefully received.

the code..

char foo; //without a simple variable declaration, use of #ifdef at the top of your code raises an error!

#include <SPI.h>
#include <Ethernet.h>

// Include Emon Library
#include "EmonLib.h"

//network configuration, WIRED or WIFI

  //if using WIRED
  byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x69, 0xD5};
  
  // fill in an available IP address on your network here,
  // for auto configuration:
  IPAddress ip(192, 168, 0, 120);
  IPAddress subnet(255, 255, 255, 0);
  IPAddress DNS(8, 8, 8, 8);
  IPAddress gw(192, 168, 0, 254);
  
  EthernetClient client;

//Calibrations
const int volt = 230;
const float ct_calibration = 28;
const float temp_offset = 1;

// Sensor pins
const int lightSensorPin = A0;
int tempSensorPin = A1;
const int currentSensor1Pin = A2;
const int currentSensor2Pin = A3;

float tempValue = 0;
float Irms1 = 0;
float Irms2 = 0;
int lightValue = 0;

// Create an Emon instance
EnergyMonitor emon1;
EnergyMonitor emon2;

//Emoncms configurations
char server[] = "emoncms.org"; // name address for emoncms.org
//IPAddress server(213, 138, 101, 177); // numeric IP for emoncms.org (no DNS)

String apikey = "myapikey"; //api key
int node = 0; //if 0, not used

unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
boolean lastConnected = false; // state of the connection last time through the main loop
const unsigned long postingInterval = 3*1000; // delay between updates, in milliseconds

void setup() {
  // start serial port:
  Serial.begin(9600);

  // Display a welcome message
  Serial.println("Emoncms client starting...");

  emon1.current(currentSensor1Pin, ct_calibration);
  emon2.current(currentSensor2Pin, ct_calibration);

#ifdef WIFI
  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while(true);
  }
  
  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network.
    status = WiFi.begin(ssid, pass);
  
    // wait 10 seconds for connection:
    delay(10000);
  }
  Serial.println("Connected to wifi");
#else
  if (!Ethernet.begin(mac)) {
    // if DHCP fails, start with a hard-coded address:
    Serial.println("Failed to get an IP address using DHCP, forcing manually");
    Ethernet.begin(mac, ip, dns, gw, subnet);
  }
#endif

  printStatus();
}

void loop() {
  
  // if there's incoming data from the net connection.
  // send it out the serial port. This is for debugging
  // purposes only:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if there's no net connection, but there was one last time
  // through the loop, then stop the client:
  if (!client.connected() && lastConnected) {
    Serial.println();
    Serial.println("Disconnecting...");
    client.stop();
  }
  
  // if you're not connected, and at least <postingInterval> milliseconds have
  // passed sinceyour last connection, then connect again and
  // send data:
  if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
   
    //read sensors
    lightValue = analogRead(lightSensorPin);
    tempValue = analogRead(tempSensorPin);
    tempValue = (5 * tempValue * 100)/1024;
    Irms1 = emon1.calcIrms(1480);
    Irms2 = emon2.calcIrms(1480);
    
    //Print values (debug)
    Serial.println();
    Serial.print("Temp : ");
    Serial.print(tempValue);
    Serial.print(" ; Light : ");
    Serial.print(lightValue);
    Serial.print(" ; Power1 : ");
    Serial.print(Irms1 * volt - 10);
    Serial.print(" ; Power2 : ");
    Serial.println(Irms2 * volt - 10);
      
    //send values
    sendData();
  }
  // store the state of the connection for next time through
  // the loop:
  lastConnected = client.connected();
}

// this method makes a HTTP connection to the server:
void sendData() {
  // if there's a successful connection:
  if (client.connect(server, 80)) {
    Serial.println("Connecting...");
    // send the HTTP GET request:
    client.print("GET /api/post?apikey=");
    client.print(apikey);
    if (node > 0) {
      client.print("&node=");
      client.print(node);
    }
    client.print("&json={temp");
    client.print(":");
    client.print(tempValue - temp_offset);
    client.print(",light:");
    client.print(lightValue);
    client.print(",power1:");
    client.print(Irms1 * volt - 10);
    client.print(",power2:");
    client.print(Irms2 * volt - 10);
    client.println("} HTTP/1.1");
    client.println("Host:emoncms.org");
    client.println("User-Agent: Arduino-ethernet");
    client.println("Connection: close");
    client.println();

    // note the time that the connection was made:
    lastConnectionTime = millis();
  }
  else {
    // if you couldn't make a connection:
    Serial.println("Connection failed");
    Serial.println("Disconnecting...");
    client.stop();
  }
}


void printStatus() {
  #ifdef WIFI
    // print the SSID of the network you're attached to:
    Serial.print("SSID: ");
    Serial.println(WiFi.SSID());

    // print your WiFi shield's IP address:
    IPAddress ip = WiFi.localIP();
    Serial.print("IP Address: ");
    Serial.println(ip);

    // print the received signal strength:
    long rssi = WiFi.RSSI();
    Serial.print("signal strength (RSSI):");
    Serial.print(rssi);
    Serial.print(" dBm");
  #else
    // print your local IP address:
    Serial.print("IP address: ");
    for (byte thisByte = 0; thisByte < 4; thisByte++) {
      // print the value of each byte of the IP address:
      Serial.print(Ethernet.localIP()[thisByte], DEC);
      Serial.print(".");
    }
  #endif
  Serial.println();
}

float getCelsius(int sensorValue) {
/*
created by Federico Vanzati for TinkerKit Thermistor Library
*/
  const static float ADCres = 1023.0;
  const static int Beta = 3950;	// Beta parameter
  const static float Kelvin = 273.15;	// 0°C = 273.15 K
  const static int Rb = 10000;	// 10 kOhm
  const static float Ginf = 120.6685;	// Ginf = 1/Rinf
  
  float Rthermistor = Rb * (ADCres / sensorValue - 1);
  float _temperatureC = Beta / (log( Rthermistor * Ginf )) ;
  return _temperatureC - Kelvin;
}

What do you see on the Serial monitor ?