Go Down

Topic: 3 controllinos als "eine controllino" (Read 1 time) previous topic - next topic

agmue

#30
Jun 13, 2019, 12:19 pm Last Edit: Jun 13, 2019, 12:22 pm by agmue
Ich habe nun die Verbindung so aufgebaut.
und ich habe mich auf das Bild basiert
Das Bild hat nichts mit I2C zu tun und damit auch nichts mit dem Thema. Du hast keinen Temperatursensor.

Dein Bild aus #13 wäre eine gute Grundlage.

ich habe leider nur 5,1kOhm. macht das Probleme?
Nein.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

AndreasLiotta

Der "Report to moderator" ist nicht dazu da um den Moderator anzustupsen Fragen der Diskussion zu beantworten.
Grüße Uwe
Sorry wirklich,ich habe den falschen Button gewählt, ich wollte nur auf den vorherigen Kommentar antworten!

agmue

#32
Jun 13, 2019, 12:50 pm Last Edit: Jun 13, 2019, 04:59 pm by agmue
Möglicherweise so:
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

AndreasLiotta

#33
Jul 12, 2019, 10:04 am Last Edit: Jul 12, 2019, 10:15 am by AndreasLiotta
Hi Leute :),

Nach einer langen Pause im Urlaub habe ich weitergemacht und sogar die Lösung gefunden,funktioniert alles soweit alles gut, außer kleines Detail und zwar, wenn ich mehrere Alarme von 3 Controllino gleichzeitig starte, die erste Controllino arbeitet alle Alarme ab, bei der zweite arbeitet nur der erste Alarm ab, bei der dritte Controllino arbeitet keine Alarm ab.

Konkretes Beispiel :

Alle Kontakte von Controllino 1 ,Controllino 2 und Controllino 3 gleichzeitig gedrückt

Controllino 1: A1 (Alarm 1) und A2 (Alarm 2) und A3 (Alarm 3) gleichzeitig

Controllino 2: A1 (Alarm 4) und A2 (Alarm 5) und A3 (Alarm 6) gleichzeitig

Controllino 3: A1 (Alarm 7) und A2 (Alarm 8) und A3 (Alarm 9) gleichzeitig


Ergebnis: Alarm 1 Alarm 2 Alarm 3 Alarm 4 sind angekommen

Alarm 5 und Alarm 6 Alarm 7 Alarm 8 Alarm 9 sind nicht angekommen.

sieht jemand vielleicht meine Fehler?

Controllino 1

Code: [Select]
#include <Ethernet.h>
#include <SPI.h>
#include <Controllino.h>
// Set MAC adress
byte mac[] = {0xE8, 0x2A, 0xEA, 0x4B, 0x1F, 0xC3};
// Set local IP
IPAddress localip(192, 168, 0, 191);
// Set remote IP of server
IPAddress serverip(192, 168, 0, 2);

EthernetClient client;
EthernetServer server(50001);

String message = "";

void setup()
{
  pinMode(CONTROLLINO_A1, INPUT);
  pinMode(CONTROLLINO_A2, INPUT);
  pinMode(CONTROLLINO_A3, INPUT);

  //initialize Ethernet
  Ethernet.begin(mac, localip);

  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware)
  {
    while (true)
    {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }

  server.begin();
}

void loop()
{

  message = "";
  // check incoming connection
  EthernetClient proxyserver = server.available();
  if (proxyserver)
  {
    //read incomming message
    while (proxyserver.connected())
    {
      if (proxyserver.available())
      {
        char c = proxyserver.read();
        message += c;
      }
    }

    //Send received message to server (serverip)
    client.connect(serverip, 50001);
    delay(10);
    client.print(message);
    delay(10);
    //close both TCP connection
    client.stop();
    proxyserver.stop();
  }
  delay(400);
  //handle local input
  if (digitalRead(CONTROLLINO_A1))
  {
    //connect to server
    client.connect(serverip, 50001);
    delay(10);
    //send a message to server (serverip)
    client.println("Alarm 1");
    delay(10);
    //close TCP connection
    client.stop();
    delay(400);  
  }
  
  if (digitalRead(CONTROLLINO_A2))
  {
    //connect to server
    client.connect(serverip, 50001);
    delay(10);
    //send a message to server (serverip)
    client.println("Alarm 2");
    delay(10);
    //close TCP connection
    client.stop();
    delay(400);  
  }
  
  if (digitalRead(CONTROLLINO_A3))
  {
    //connect to server
    client.connect(serverip, 50001);
    delay(10);
    //send a message to server (serverip)
    client.println("Alarm 3");
    delay(10);
    //close TCP connection
    client.stop();
    delay(400);  
  }
}


Controllino 2

Code: [Select]
#include <Ethernet.h>
#include <SPI.h>
#include <Controllino.h>
// Set MAC adress
byte mac[] = { 0xE8, 0x2A, 0xEA, 0x4B, 0x1F, 0xC3 };
// Set local IP
IPAddress localip(192, 168, 0, 192);
// Set remote IP of server
IPAddress server(192, 168, 0, 191);

EthernetClient client;

void setup(){

  pinMode(CONTROLLINO_A1, INPUT);
  pinMode(CONTROLLINO_A2, INPUT);
  pinMode(CONTROLLINO_A3, INPUT);

  //initialize Ethernet
  Ethernet.begin(mac, localip);
 
  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  
}

void loop(){
    //handle local input
    if(digitalRead(CONTROLLINO_A1))
    {
    //connect to server
    client.connect(server, 50001);
    delay(10);
    //send a message to server
    client.println("Alarm 4");
    delay(10);
    //close TCP connection
    client.stop();
    delay(1000);    
  }
  
  if(digitalRead(CONTROLLINO_A2))
    {
    //connect to server
    client.connect(server, 50001);
    delay(10);
    //send a message to server
    client.println("Alarm 4");
    delay(10);
    //close TCP connection
    client.stop();
    delay(1000);    
  }
  
  if(digitalRead(CONTROLLINO_A3))
    {
    //connect to server
    client.connect(server, 50001);
    delay(10);
    //send a message to server
    client.println("Alarm 5");
    delay(10);
    //close TCP connection
    client.stop();
    delay(1000);    
  }
}


Controllino 3

Code: [Select]
#include <Ethernet.h>
#include <SPI.h>
#include <Controllino.h>
// Set MAC adress
byte mac[] = { 0xE8, 0x2A, 0xEA, 0x4B, 0x1F, 0xC4 };
// Set local IP
IPAddress localip(192, 168, 0, 193);
// Set remote IP of server
IPAddress server(192, 168, 0, 191);

EthernetClient client;

void setup(){

  pinMode(CONTROLLINO_A1, INPUT);
  pinMode(CONTROLLINO_A2, INPUT);
  pinMode(CONTROLLINO_A3, INPUT);

  //initialize Ethernet
  Ethernet.begin(mac, localip);
 
  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  
}

void loop(){
    //handle local input
    if(digitalRead(CONTROLLINO_A1))
    {
    //connect to server
    client.connect(server, 50001);
    delay(10);
    //send a message to server
    client.println("Alarm 7");
    delay(10);
    //close TCP connection
    client.stop();
    delay(1000);    
  }
  
      if(digitalRead(CONTROLLINO_A2))
    {
    //connect to server
    client.connect(server, 50001);
    delay(10);
    //send a message to server
    client.println("Alarm 8");
    delay(10);
    //close TCP connection
    client.stop();
    delay(1000);    
  }
  
      if(digitalRead(CONTROLLINO_A3))
    {
    //connect to server
    client.connect(server, 50001);
    delay(10);
    //send a message to server
    client.println("Alarm 9");
    delay(10);
    //close TCP connection
    client.stop();
    delay(1000);    
  }
}

DrDiettrich

Ich würde mal nachforschen, ob die verlorenen Meldungen überhaupt rausgehen, oder vielleicht wegen Kollissionen untergehen. Dafür sollte es eigentlich Rückmeldungen von den Netzwerk-Funktionen geben, die man prüfen kann.

AndreasLiotta

#35
Jul 12, 2019, 11:03 am Last Edit: Jul 12, 2019, 11:04 am by AndreasLiotta
die Meldung kommt schon raus.

mein Ziel ist: controllino 2 wartet, bis controllino 1 mit seinem Alarm fertig ist und dann beginnt Controllino 2 mit seinen Alarmen, controlino 3 wartet, bis controllino 2 mit seinen Alarmen fertig ist und dann beginnt Controllino 3 mit seinen Alarmen.

Bei mir tut jetzt nur bis Alarm 4 und dann hört auf

Jetzige Ergebnis: Alarm 1 Alarm 2 Alarm 3  Alarm 4 denn hört auf

Mein ziel Ergebnis: Alarm 1 Alarm 2 Alarm 3  Alarm 4  Alarm 5  Alarm 6  Alarm 7  Alarm 8  Alarm 9

Controllino 1 Controllino 2 Controllino 3

noiasca

mein Ziel ist: controllino 2 wartet,
naja das ist der Punkt. Ich sehe in deinem Sketch kein "Warten".

Du könntest dem Empfänger die Nachricht bestätigen lassen und wenn der Empfänger nicht bestätigt, lässt den Sender noch mal senden.
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

AndreasLiotta

#37
Jul 12, 2019, 01:42 pm Last Edit: Jul 12, 2019, 01:43 pm by AndreasLiotta
Du könntest dem Empfänger die Nachricht bestätigen lassen und wenn der Empfänger nicht bestätigt, lässt den Sender noch mal senden.
hast du bitte einen Tipp für mich, wie kann ich das machen?
die einzige lösung, die ich bis jetzt gefunden habe und richitg funktioniert, wie ich möchte ist mit ein delay
"delay (5000)" am Anfag der loop von controllino 2 und 3 aber denn muss die beide controllino 2 und 3 immer 5 sekunden warten.

noiasca

#38
Jul 12, 2019, 03:34 pm Last Edit: Jul 12, 2019, 03:46 pm by noiasca
ich arbeite nie mit plain tcp daher müsste ich mich da selber einlesen.

https://www.arduino.cc/en/Reference/ClientConnect

Returns an int (1,-1,-2,-3,-4) indicating connection status :

    SUCCESS 1
    TIMED_OUT -1
    INVALID_SERVER -2
    TRUNCATED -3
    INVALID_RESPONSE -4

na bitte.

Lass dir das in ein
int result;

retourgeben.
Dann Serial.print Ausgaben und beobachten ob du da schon "Fehler" erkennen kannst.
Wäre mein erster Schritt an deiner Stelle.

nur bei Success überhaupt einen print machen
ebenso könntest den print abfragen:

https://www.arduino.cc/en/Reference/ClientPrint
byte: returns the number of bytes written, though reading that number is optional

in anderen Worten: Du feuerst momentanlos und weist gar nicht ob dein "Server" bereit ist.
TCP sollte das eh alles selber prüfen - nur musst du halt auch dein Programm darauf ausrichten.

Quasi wie wenn du jemanden Anrufst. Du darfst erst reden wenn er abhebt und Hallo sagt.
Nur Hörer Abheben und losquatschen reicht nicht.

Dann kann man sich überlegen, was man bezüglich Wiederholungsintervall/Häufigkeit macht. Im ersten Schritt z.B. 5 sec warten wieder probieren. das ganze 10 mal. In der Produktion würde ich die Intervalle immer größer setzen, irgendwann aufhören und einen Fehler auf andere Art und weise auslösen (blinkled/Alarm, email....). Alles nicht blockierend ohne delay versteht sich ;-)



how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

Tommy56

In der Produktion würde ich mich überhaupt nicht auf so ein Geraffel einlassen. Da würde ein Master die 3 Slaves zyklisch abfragen, da es ja hier nicht um zeitkritische Alarme gehen kann. Die kämen bei diesem Wartesystem auch nicht zeitnah durch.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

noiasca

#40
Jul 12, 2019, 04:17 pm Last Edit: Jul 12, 2019, 05:26 pm by noiasca
PS: dass du da in deinem Controllino 2 zweimal Alarm 4 schickst ist dir bewusst???

ich würde die ganzen Code-Duplikate wegschmeissen,
überhaupt nur einen Code warten wollen und nur vor dem kompilieren festlegen für welches Board das ganze sein soll.

ca so:
Code: [Select]

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

//#include <Controllino.h>                                  // musst du wieder aktivieren
#ifndef CONTROLLINO_A1
#define CONTROLLINO_A1 5                                    // die brauche ich weil ich keinen Controllino habe
#endif       
#ifndef CONTROLLINO_A2
#define CONTROLLINO_A2 6
#endif
#ifndef CONTROLLINO_A3
#define CONTROLLINO_A3 7
#endif

#define USE_BOARD 86                                        // <-- hier einstellen ob Board 2 oder 3 kompiliert werden soll

#if USE_BOARD == 86                                         // Einstellungen die für MEIN Board ziehen sollen
byte mac[] = { 0xE8, 0x2A, 0xEA, 0x4B, 0x1F, 0xC3 };
IPAddress localip(172, 18, 67, 86);                         // Set local IP
const char *message[] = {"Alarm 4", "Alarm 5", "Alarm 6"};
#endif

#if USE_BOARD == 2                                           // Einstellungen die für dein Board ziehen sollen
// Set MAC adress
byte mac[] = { 0xE8, 0x2A, 0xEA, 0x4B, 0x1F, 0xC3 };
// Set local IP
IPAddress localip(192, 168, 0, 192);
const char *message[] = {"Alarm 4", "Alarm 5", "Alarm 6"};   // Texte die je nach Ausgang versendet werden sollen
#endif

#if USE_BOARD == 3
byte mac[] = { 0xE8, 0x2A, 0xEA, 0x4B, 0x1F, 0xC4 };
IPAddress localip(192, 168, 0, 193);                          // Set local IP
const char *message[] = {"Alarm 7", "Alarm 8", "Alarm 9"};
#endif

// Set remote IP of server
//IPAddress server(192, 168, 0, 191);
IPAddress server(172, 18, 67, 98);
const uint32_t port = 80;                    // du 50001

const byte inputPin[] = {CONTROLLINO_A1, CONTROLLINO_A2, CONTROLLINO_A3};
const char *inputClear[] = {"A1", "A2", "A3"};                             //Klartext Bezeichnung für die Pins
const byte pins = sizeof(inputPin) / sizeof(inputPin[0]);

EthernetClient client;

void setup() {
  Serial.begin(115200);
  for (byte current = 0; current < pins; current++)                 
  {
    pinMode(inputPin[current], INPUT);
    Serial.println(inputPin[current]);
  }
  //initialize Ethernet
  Ethernet.begin(mac, localip);

  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  Serial.println(F("started"));
}

void loop() {
  //handle local input
  int success = 0;
  int successP = 0;

  for (byte current = 0; current < pins; current++)
  {
    if (digitalRead(inputPin[current]))
    {
      Serial.print(inputClear[current]); Serial.print(F(" PIN")); Serial.print(current); Serial.println(F(" == HIGH"));
      //connect to server
      success = client.connect(server, port);
      delay(10);
      if (success)
      {
        Serial.print(F("I: connected ")); Serial.println(success);
        //send a message to server
        successP = client.println(message[current]);
        delay(10);
        if (successP)
        {
          Serial.print(message[current]); Serial.print(F(" sent. ")); Serial.println(successP);
        }
        else
        {
          Serial.print(message[current]); Serial.print(F(" not sent. ")); Serial.println(successP);
        }
      }
      else
      {
        Serial.print(F("E: not connected ")); Serial.println(success);
      }
      //close TCP connection
      client.stop();
      delay(1000);
    }
  }
}


Fehlerbehandlung ist noch keine drinnen, bzw. zeigt dir nur den Status an was passiert. Wenn klar ist was du wann machen willst, kannst du das ja dann ergänzen.

Aufpassen, ich musste ein paar Sachen für mich anpassen, IP-Adressen, Ports etc. sollte aber klar sein.
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

DrDiettrich

Am sinnvollsten wäre es wohl, die Controllinos auf Signal-Änderungen warten zu lassen, und nur dann eine Statusmeldung abzuschicken.

AndreasLiotta

#42
Jul 13, 2019, 09:39 pm Last Edit: Jul 13, 2019, 09:41 pm by AndreasLiotta
PS: dass du da in deinem Controllino 2 zweimal Alarm 4 schickst ist dir bewusst???

ich würde die ganzen Code-Duplikate wegschmeissen,
überhaupt nur einen Code warten wollen und nur vor dem kompilieren festlegen für welches Board das ganze sein soll.

Fehlerbehandlung ist noch keine drinnen, bzw. zeigt dir nur den Status an was passiert. Wenn klar ist was du wann machen willst, kannst du das ja dann ergänzen.

Aufpassen, ich musste ein paar Sachen für mich anpassen, IP-Adressen, Ports etc. sollte aber klar sein.

Zuerst einmal, vielen lieben Dank für die Erklärung und die Tipps, ich habe ein bisschen zeit gebraucht bis ich verstanden habe wie dein Code funktioniert.
ich habe versucht, wie du mir gesagt hast bzw. wie in deinen Kommentaren im Code steht, ich kann aber nicht alle Alarme sehe. ich sehe nur Alarm 1 und Alarm 4 und sie wiederholen sich die ganze Zeit
so sieht meinen code aus.

Controllino 1
Code: [Select]

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

#include <Controllino.h>                                  // musst du wieder aktivieren
//#ifndef CONTROLLINO_A1
//#define CONTROLLINO_A1 5                                    // die brauche ich weil ich keinen Controllino habe
//#endif      
//#ifndef CONTROLLINO_A2
//#define CONTROLLINO_A2 6
//#endif
//#ifndef CONTROLLINO_A3
//#define CONTROLLINO_A3 7
//#endif

#define USE_BOARD 1                                       // <-- hier einstellen ob Board 2 oder 3 kompiliert werden soll

#if USE_BOARD == 1                                         // Einstellungen die für MEIN Board ziehen sollen
byte mac[] = { 0xE8, 0x2A, 0xEA, 0x4B, 0x1F, 0xC3 };
IPAddress localip(192, 168, 0, 191);                         // Set local IP
const char *message[] = {"Alarm 1", "Alarm 2", "Alarm 3"};
#endif

#if USE_BOARD == 2                                           // Einstellungen die für dein Board ziehen sollen
// Set MAC adress
byte mac[] = { 0xE8, 0x2A, 0xEA, 0x4B, 0x1F, 0xC3 };
// Set local IP
IPAddress localip(192, 168, 0, 192);
const char *message[] = {"Alarm 4", "Alarm 5", "Alarm 3"};   // Texte die je nach Ausgang versendet werden sollen
#endif

#if USE_BOARD == 3
byte mac[] = { 0xE8, 0x2A, 0xEA, 0x4B, 0x1F, 0xC4 };
IPAddress localip(192, 168, 0, 193);                          // Set local IP
const char *message[] = {"Alarm 7", "Alarm 8", "Alarm 9"};
#endif

// Set remote IP of server
IPAddress server(192, 168, 0, 2);
//IPAddress server(172, 18, 67, 98);
const uint32_t port = 50001;                    // du 50001

const byte inputPin[] = {CONTROLLINO_A1, CONTROLLINO_A2, CONTROLLINO_A3};
const char *inputClear[] = {"CONTROLLINO_A1", "CONTROLLINO_A1", "CONTROLLINO_A1"};                             //Klartext Bezeichnung für die Pins
const byte pins = sizeof(inputPin) / sizeof(inputPin[0]);

EthernetClient client;

void setup() {
  Serial.begin(115200);
  for (byte current = 0; current < pins; current++)                  
  {
    pinMode(inputPin[current], INPUT);
    Serial.println(inputPin[current]);
  }
  //initialize Ethernet
  Ethernet.begin(mac, localip);

  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  Serial.println(F("started"));
}

void loop() {
  //handle local input
  int success = 0;
  int successP = 0;

  for (byte current = 0; current < pins; current++)
  {
    if (digitalRead(inputPin[current]))
    {
      Serial.print(inputClear[current]); Serial.print(F(" PIN")); Serial.print(current); Serial.println(F(" == HIGH"));
      //connect to server
      success = client.connect(server, port);
      delay(10);
      if (success)
      {
        Serial.print(F("I: connected ")); Serial.println(success);
        //send a message to server
        successP = client.println(message[current]);
        delay(10);
        if (successP)
        {
          Serial.print(message[current]); Serial.print(F(" sent. ")); Serial.println(successP);
        }
        else
        {
          Serial.print(message[current]); Serial.print(F(" not sent. ")); Serial.println(successP);
        }
      }
      else
      {
        Serial.print(F("E: not connected ")); Serial.println(success);
      }
      //close TCP connection
      client.stop();
      delay(1000);
    }
  }
}


Controllino 2
Code: [Select]

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

#include <Controllino.h>                                  // musst du wieder aktivieren
//#ifndef CONTROLLINO_A1
//#define CONTROLLINO_A1 5                                    // die brauche ich weil ich keinen Controllino habe
//#endif      
//#ifndef CONTROLLINO_A2
//#define CONTROLLINO_A2 6
//#endif
//#ifndef CONTROLLINO_A3
//#define CONTROLLINO_A3 7
//#endif

#define USE_BOARD 2                                       // <-- hier einstellen ob Board 2 oder 3 kompiliert werden soll

#if USE_BOARD == 1                                         // Einstellungen die für MEIN Board ziehen sollen
byte mac[] = { 0xE8, 0x2A, 0xEA, 0x4B, 0x1F, 0xC3 };
IPAddress localip(192, 168, 0, 191);                         // Set local IP
const char *message[] = {"Alarm 1", "Alarm 2", "Alarm 3"};
#endif

#if USE_BOARD == 2                                           // Einstellungen die für dein Board ziehen sollen
// Set MAC adress
byte mac[] = { 0xE8, 0x2A, 0xEA, 0x4B, 0x1F, 0xC3 };
// Set local IP
IPAddress localip(192, 168, 0, 192);
const char *message[] = {"Alarm 4", "Alarm 5", "Alarm 3"};   // Texte die je nach Ausgang versendet werden sollen
#endif

#if USE_BOARD == 3
byte mac[] = { 0xE8, 0x2A, 0xEA, 0x4B, 0x1F, 0xC4 };
IPAddress localip(192, 168, 0, 193);                          // Set local IP
const char *message[] = {"Alarm 7", "Alarm 8", "Alarm 9"};
#endif

// Set remote IP of server
IPAddress server(192, 168, 0, 2);
//IPAddress server(172, 18, 67, 98);
const uint32_t port = 50001;                    // du 50001

const byte inputPin[] = {CONTROLLINO_A1, CONTROLLINO_A2, CONTROLLINO_A3};
const char *inputClear[] = {"CONTROLLINO_A1", "CONTROLLINO_A1", "CONTROLLINO_A1"};                             //Klartext Bezeichnung für die Pins
const byte pins = sizeof(inputPin) / sizeof(inputPin[0]);

EthernetClient client;

void setup() {
  Serial.begin(115200);
  for (byte current = 0; current < pins; current++)                  
  {
    pinMode(inputPin[current], INPUT);
    Serial.println(inputPin[current]);
  }
  //initialize Ethernet
  Ethernet.begin(mac, localip);

  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  Serial.println(F("started"));
}

void loop() {
  //handle local input
  int success = 0;
  int successP = 0;

  for (byte current = 0; current < pins; current++)
  {
    if (digitalRead(inputPin[current]))
    {
      Serial.print(inputClear[current]); Serial.print(F(" PIN")); Serial.print(current); Serial.println(F(" == HIGH"));
      //connect to server
      success = client.connect(server, port);
      delay(10);
      if (success)
      {
        Serial.print(F("I: connected ")); Serial.println(success);
        //send a message to server
        successP = client.println(message[current]);
        delay(10);
        if (successP)
        {
          Serial.print(message[current]); Serial.print(F(" sent. ")); Serial.println(successP);
        }
        else
        {
          Serial.print(message[current]); Serial.print(F(" not sent. ")); Serial.println(successP);
        }
      }
      else
      {
        Serial.print(F("E: not connected ")); Serial.println(success);
      }
      //close TCP connection
      client.stop();
      delay(1000);
    }
  }
}



habe ich das richtig verstanden! soll ich den Code auf die 3 Controllino spielen und nur die #define USE_BOARD ändern, ob 1 , 2 oder 3?



postmaster-ino

Hi

Schön wäre gewesen, wenn Du geschrieben hättest, daß sich diese beiden Sketche NUR durch die #define-Zeile unterscheiden - DAS habe ich soeben zeilenweise wohl verifiziert.

Ja, genau so macht man einen Code wartbar - Du hast EINEN Code, Der überall läuft und die Eigenarten dieses einen Platzes beinhaltet - bei Dir wohl nur eine andere MAC.

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

noiasca

also:

ja,
#define USE_BOARD 2
soll dazu dienen, festzulegen welches Board nun kompiliert werden soll.

ich habe es auf einem Mega ausprobiert, und alle 3 Eingänge schicken entsprechende Alarm-Meldungen, wenn der PIN belegt wird.

Ja der Alarm wird so lange wiederholt wie auch der PIN HIGH ist. Das machte aber dein Sketch auf meinem Mega auch, ist in deinem Code auch nicht anders vorgesehen, daher ist es in meinem auch nicht.

Wenn der Alarm nur einmal kommen soll, dann musst du halt im positiv Fall in einer Alarm-Variable (Array würde sich anbieten) merken, dass der alarmed[current] ausgelöst hat, und oben bei der Abfrage auf digitalRead(inputPin[current] eben auch && alarmed[current] ergänzen.
Im Gegenzug dann im Else zweig nicht vergessen die alarmed[current] wieder zu resetten.

Dein Empfänger muss dann halt damit umgehen können weil es keinen "Ende Alarm" gibt.
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

Go Up