Hallo
ich habe mit einem Arduino Yun eine TCP Verbindung zu einer SPS erstellt.
Das Arduino baut hierbei aktiv die Verbindung zur SPS auf. Dies funktioniert auch soweit.
Wenn allerdings die SPS nicht erreichbar ist hört das arduino Programm auf die Loop schleife zu durchlaufen. Die konnte ich feststellen da ich eine LED Blinken lies. Was kann hierfür die Ursache sein?
#include <SPI.h>
#include <Wire.h>
#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>
#include <Console.h>
#include <DHT22.h>
#include "IRremote.h"
// SPS Port und IP
#define PORT 2500
IPAddress PLC(192,168,178,30); // PLC Address
// YunServer server(PORT);
// Temperatursensor PIN
#define DHT22_PIN 4
DHT22 myDHT22(DHT22_PIN);
// Zeitlicher Funktionsaufruf
long previousMillis = 0;
long interval = 2500;
unsigned long currentMillis;
// IR Empfenger
int receiver = 3;
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup() {
irrecv.enableIRIn(); // Start the receiver
Bridge.begin(); // Sarte Bridge
digitalWrite(13, HIGH);
Console.begin(); // Starte Console
// server.begin(); // Starte Server
// while (!Console); // warte bis Console run
delay(1000);
}
//******************************************************************Hautprogramm********************************************************
void loop()
{
// listen for incoming clients
YunClient client;// = server.accept();
// LED aus wenn Client nicht verbunden
digitalWrite(13, HIGH);
delay(50);
digitalWrite(13, LOW);
delay(300);
//Verbindungsaufbaue wenn Client verfügbar
if (client.connect(PLC,PORT)){
Console.println("connected");
while (client.connected()) {
//LED an wenn Connected
digitalWrite(13, HIGH);
// Zeit für Zeitliche aufruf
unsigned long currentMillis = millis();
// Temperaturwerte alle 2,5sec senden
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
TempFeuchte (client);
}
if (irrecv.decode(&results)) {// have we received an IR signal?
translateIR(client);
irrecv.resume(); // receive the next value
}
}
delay(1000);
// close the connection:
client.stop();
client.flush();
}
}
//***********************************************
//** Funktion Temperatur Feuchtw **
//***********************************************
// Temperatur und Feuchte abfragen und senden
void TempFeuchte (YunClient client) {
DHT22_ERROR_t errorCode;
errorCode = myDHT22.readData();
int value;
String cString;
switch(errorCode)
{
case DHT_ERROR_NONE:
value = myDHT22.getTemperatureC()*100;
// Value nur senden wenn nicht 0
if (value != 0) {
cString ="GV/01"+String(value,DEC);
client.write((uint8_t*)&cString[0], cString.length());
Console.println(cString);
}
value = myDHT22.getHumidity()*100;
// Value nur senden wenn nicht 0
if (value > 0) {
cString ="GV/02"+String(value,DEC);
client.write((uint8_t*)&cString[0], cString.length());
Console.println(cString);
}
break;
}
}
//***********************************************
//** Funktion IR Empfänger **
//***********************************************
void translateIR(YunClient client) {
String cString;
int i;
switch(results.value)
{
case 0x2A0:
Console.println("Rollo AUF");
i=1;
break;
case 0x2A1:
Console.println("Rollo ZU");
i=2;
break;
case 0xAA1:
Console.println("Rollo ZU");
i=2;
break;
case 0xAA0:
Console.println("Rollo AUF");
i=1;
break;
default:
i=0;
//Console.println(" other button ");
}
if(i>0) {
Console.println(i);
cString ="IR/"+String(i,DEC)+"/1";
client.write((uint8_t*)&cString[0], cString.length());
Console.println(cString);
delay(1000);
cString ="IR/"+String(i,DEC)+"/0";
client.write((uint8_t*)&cString[0], cString.length());
Console.println(cString);
i=0;
}
}