ArduinoIHC

ArduinoIHC er et library til arduino som implementerer IHC protokollen for in- og output moduler. Output modulet har desuden support for temperatur/fugtighedsføler protokollen. Kan også kører på ESP8266 dog med den begrænsning at der kun kan anvendes 1 input.

Først læs ansvarsfraskrivelse – Så hvis du futter din IHC controller af eller din hund springer i luften, så er det dit ansvar.

See this new post for download

IHCoutput klassen implemeterer et IHC output på en port. Den initialiseres med Begin( port) – hvor port er den arduino port som du vil have output på. Efterfølgelde kan du styrer output med Set( channel,int state) f.eks Set( 2,HIGH) vil sætte ihc indgang 3  høj. (Bemærk at channel starter med 0 så det svarer til ihc indgang 1 – fordi ihc indgange starter med 1) Der er 16 outputs – fordi et IHC input modul har 16 indgange.

IHCinput klassen implementerer et IHC input modul. Den initialiseres med Begin( port) – hvor port er den arduino port som du vil have input på. IHCinput har kun 8 indgange fordi et IHC output module kun har 8 udgange. Til at teste om en indgang er høj eller lav brugers GetData( channel), eller man kan bruge GetInput() til at få state på alle indgange. GetInput returnerer en byte med en bit pr indgang.  Til at test for ændringer bruges GetChangeMask() den returnerer en byte med en bit sat for de indgange der er ændret siden sidst.

IHCtemperature klassen implementerer en temperatur/fugtighedsføler på en udgang på et IHCoutput

Optimeringer til at minimere kodestørelse

For at minimerer kode størrelsen er der forskellige defines som vil fjerne kode hvis du ikke skal bruge det.

#define IHCINPUT_NO_MULTIPORTSUPPORT

Fjerner support for mere end en IHCinput port.

#define IHC_NOTEMPERATURE

Fjerner temperatur support

#define IHCINPUT_NO_CALLBACK

Fjerner support for at overskrive OnChange IHCinput som bliver kaldt direkte fra interrupt når input ændres.

Timing

For at IHCoutput kan virker anvendes timer2 fra arduino og timer1 på ESP8266. D.v.s. du skal være opmærksom på om du anvender andre libraries som også bruger disse timere. Hvis det er tilfældet vil de ikke virke sammen. Timer interrupt køre med 8kHz.

Her ken du se timingen fra en et output på en arduino:

Arduino timing

 

 

og den tilsvarende på en ESP8266-12

ESP8266 IHC timing

Som det kan ses ligger det meget tæt på timingen fra et orginalt IHC modul.

Forbindelse til IHC controller

Arduino in-og output at alm TTL nivuea så du kan godt forbinde direkte til IHC controlleren. Hvis du ønsker elektrisk adskillelse imellem de to så kan du sætte en optokobler imellem. I den forbindelse skal du være opmærksom på at IHC data input ikke har pullup til høj ligesom en indgang har på et IHC indgangs modul. Så hvis du bruger en optokobler skal du sætte en pullup modstand på. Selv bruger jeg en 1K modstand bare for en sikkerhedskyld i tilfælde af at man kommer til at sætte to udgange sammen.

66 responses to “ArduinoIHC”

  1. Rudi Hilven says:

    Hi,
    i’m from Belgium and i would like to use IHC input to read 2 inputs.
    do you have example code?

    my code display’s only the last initialised input (pin 5).

    my code:

    #define IHC_USEPINCHANGEINT
    #include
    #include

    IHCinput input1;
    IHCinput input2;

    void setup() {
    Serial.begin(9600);
    input1.Begin(4);
    input2.Begin(5);
    }

    void loop() {
    Serial.print(“inp1: “);
    Serial.print(input1.GetInput());
    Serial.print(” inp2: “);
    Serial.println(input2.GetInput());
    }

    thanks in advance
    Rudi

  2. Jens says:

    For multiple inputs to work, the library need to use the “PinChangeInt” library. Something must have changed in the way the Arduino IDE builds the project since it was made originally. (Several arduino versions ago). You have #define IHC_USEPINCHANGEINT in the top and that should work, but it looks like this define is not being used when compiling the IHCInput files. If you insert the line

    #define IHC_USEPINCHANGEINT

    in the top of the 2 files IHCinput.h and IHCinput.cpp and also comment out the

    #include “pcint.h”

    in IHCinput.cpp – then it should work. I have just verified it with Arduino 1.8.1

    Personally I use Visual Studio with Visual Micro – here you can make defines globally on the properties for the ino file.

  3. Rudi Hilven says:

    i think you mean comment out pcint.h in IHCinp.ccp (text is gone in message above)
    i did the suggested adjustments and everything works great

    thanks very much!!!

  4. Morten says:

    Thank you so much for publishing this! Will make it much easier for the rest of us to get started.

    Can you elaborate on why the library is limited to 1 input on ESP8266?

    I know the PinChangeInt library does not work on ESP8266, but it seems the reason is logical – ESP8266 supports change interupt in hardware on all GPIO’s except GPIO16. It would be interesting to know if you had persued or thought about an implementation without any interrupt handling library but just using the basic EnableInterrupt function in the Arduino environment.

    • Jens says:

      It is because I made is so there is only one function handling the interrupts for whatever pin you choose to use. And the same function is use by all IHCinput objects. The PinChangeInt library keep track of the pin triggering the interrupt, I use this to find the associated IHCinput object. It is possible to make it with a big switch statement and a separate function for each pin. Originally I only used it on Arduino, the ESP8266 was later and I have not needed more than one input yet.

      I think the EnableInterrupt function is also from a library (unless is has changed lately). The standard arduino library has the attachInterrupt function, but this is limited to pin 2 or 3 on the ATMega328 based ardunio’s.

      It would be nice to avoid any dependencies on other libraries. I will think about it when I make the next version of the ArduinoIHC Librabry.

  5. Jan Ballegaard says:

    Jeg er lidt i tvivl om hvordan Arduino og IHC skal kobles sammen. Hvilke forbindelser skal tilsluttes?
    Findes der et diagram over hvordan optokobler kan forbinde de to enheder?
    Kræver det speciel programmering af IHC?
    Da jeg kun har mit “live” system at udvikle på, vil jeg gerne være helt sikker på hvad jeg gør.
    Håber du kan hjælpe så jeg kan komme i gang med at kode.

  6. Jan says:

    Hej, kan ikke få den til at compile dit eksempel, hvad gør jeg galt 🙂

    Den skriver:
    C:\Users\Jan\ArduinoIHC\Examples\Temperature\Temperature.ino:22:23: fatal error: IHCoutput.h: No such file or directory

    #include

    Har lagt IHCoutput i samme bibliotek.

    Mvh. Jan

  7. Jan says:

    Jan igen…

    Hvis jeg prøver a tilføje filerne manualt, skriver den:

    “IHCoutput.h” contains unrecognized characters. If this code was created with an older version of Arduino, you may need to use Tools -> Fix Encoding & Reload to update the sketch to use UTF-8 encoding. If not, you may need to delete the bad characters to get rid of this warning.

    Bruger Arduino 1.8.3

    Mvh Jan

    • Jens says:

      ArduinoIHC folderen skal ligge i din arduino libraries folder – typisk Dokumenter\Arduino\Libraries på windows.
      Den nemeste måde er fra arduino ide i menuen at vælge sketch|Include Library|Add Zip library og så vælge ArduinoIHC zip filen – så bliver den pakket ud det rigtigt sted. Herefter kan du åbne eksempler fra fil|Eksempler|ArduinoIHC…

      Jeg prøvede lige på Arduino Ide 1.8.1 det virkede fint – derefter opdaterede jeg til nyeste 1.8.4 og det virker også.

  8. Jan says:

    Er det muligt at lade Arduino simulere en enkelt temperatur føler? Altså kunne forbinde arduino til en enkelt indgang på et 24v input modul og lade ihc controlleren se arduino som en temperatur sensor?

    • Jens says:

      ArduinoIHC virker ved at simulere in/out moduler som du så ovenpå kan simulere en temperatur indgang på. D.v.s Arduino forbindes til data in og out-put.

      Det vil være muligt at lave lidt om så du ikke bruger IHCoutput, men istedet laver temperatur protokollen direkte til en arduino output pin der kan forfindes til et 24v input modul.

      Kig på koden i IHCtemperature.cpp – der ligger implementering af temperatur protokollen. Eller kig på det indlæg jeg har skrevet før om IHC temperatur protokolen. Det mest vanskelige er at få checksummen korrekt.

  9. Sten says:

    Hej Jens!
    Interface med optocoupleren, du har tegnet,
    kan jeg ikke få til at virke.
    Med modstanden, virker det korrekt.
    Bliver signalet ikke inverteret, når det sendes
    til IHC?
    Jeg har sat en zenerdiode, på 5,1 volt, mellem
    emitter og kolektor, på optocoupleren.
    På indgangen (led +) er der sat en modstand på 1k til Arduino vcc
    og (led -) går til Arduino Gnd.
    Jeg har sat en NPN transistor (BC 547) mellem kolektor og(led +)
    Emitteren er sat til (led -)
    Basen på transistoren, er forsynes med en 4K7 modstand til
    Arduinoen (IHC Output Library)

    Det virker.

    Det er fine library’s du har lavet.

    mvh. Sten

  10. Henrik Andersen says:

    Hi

    det virker interessant men jeg vil gerne have en ide til hvordan jeg kan bruge disse funktioner.

    eventuelt se et setup / diagram og høre hvordan det virker.

    én simpel kode så jeg er sikker på at jeg få et billede af hvordan det virker.

    • Jens says:

      Der er eksempler til både input og output samt temperatur – så kig på dem. Brug 1K modstand imellem in- og out-put det er det nemmeste. Det her er et værktøj til at forbinde et-eller-andet til IHC ikke en komplet løsning. Det er op til dig hvad du vil lave med det.

    • Jens says:

      Nej det var ikke tænkt sådan. Det er tænk som forbindelse imellem arduino og ihc controlleren, enten data ind eller udgang.
      Du har tegnet det som om arduino skal erstatte ihc controlleren og styre et IHC output eller input modul. Det kan sikkert også virke D.v.s. arduino laver så det data signal som ihc controlleren normalt ville gøre – jeg ved ikke lige hvorfor eller hvad det skal bruges til.
      (På din tegning vender dioden i optokobleren desuden forkert – katoden skal til gnd)

  11. Carsten Madsen says:

    Hej.

    Er det muligt at bruge din kode til at sætte en temperatur i IHC’en fra en Arduino via et input modul?

  12. Johnny says:

    Jeg vil gerne modtage nogle signaler fra IHC systemet. Jeg har i IHC Visual definere et datalinje modul på dataLinje 15 og 4 udgange på datalinje 15.1, 15.2, 15.3 & 15.4.
    Jeg trækker udgangene fra IHC programmet.
    Jeg har nu forbundet en Arduino Nano (Rx/Tx) til udgang 15 på IHC Visual.
    Er det forstået korrekt at Arduinoen kan fungere som IO modul? Og, vil jeg med kode kunne læse hvilken udgang IHC’en ønsker at trække på IO-modulet.
    Hvis ja, hvilken kommando kan jeg bruge getOutput(). hvis ja, hvad returnerer den så? bool/byte? Hvis nej, hvilken kommando er det så?

    #include
    bool out1;
    void setup(){
    IHCoutput output1;
    ihcoutput.Begin(15);
    Serial.begin(115200);
    }
    void loop(){
    out1 = output1.getOutput(1);
    }

    Er der lavet en manual med mulige kommandoer og evt. eksempler.

    • Jens says:

      Der ligger en examples folder samme med arduinoihclib (kig på BasicInput.ino – det svarer til dit eget eksempel forbind gpio 2 til IHC udgang 15 – og en god ide med en 1k modstand imellem i tilfælde af at du får arduino sat i output mode).
      IHCoutput er til at lave output fra arduino til en indgang på IHC. Du bruger “SetOutput” til at sætte alle på en gang eller Set(int channel, int state) (state er 0 eller 1) til at sætte en enkelt udgang.
      IHCinput er til at lave input til arduino fra en udgang på IHC. Det skal være en GPIO pin på arduino som lave interrupt – brug pin 2. GetInput giver alle input (en bit pr input), GetData( int channel) for et enkelt input.

  13. Bart M. says:

    Hi, greeting from Belgium.
    I need to convert an existing installation with a PLC. I was thinking to us an arduino to create a modbus IHC converter. Any tips for this?
    How many modules should I connect to an arduino?

    • Jens says:

      I have no experince with PLC and modbus. You can probably use the arduinolib to make the IHC part of your converter.

      • Bart M. says:

        I have a implementation of Modbus, arduino and PLC. This works fine. Linking the libs would not be a problem.
        How many IHC input or output modules should I connect to one Arduino?

        • Jens says:

          I have only tried with one input and one output, but having mode outputs should not be a problem. The input can be a problem because you need to have an interrupt in the gpio pin you use.

  14. Kenth Jensen says:

    Super spændende projekt.
    Havde selv gået med næsten samme idé.
    Roder selv rigtig meget med en Raspberry Pi til home automation, og bruger også denne til IHC output modul, men timingen i denne gør at den ikke kan bruges til input modul.

    Har netop bestilt en Arduino Uno hvor jeg så vil flytte hele IHC delen over på, for at få frigivet noget resourcer fra Raspberry Pien, og måske prøve at få Raspberry Pien og Arduinoen til at snakke sammen via I2C.

    Super fedst at du har lavet dette library, så sparer jeg mange dages arbejde ved ikke at skulle lave det helt fra bunden af, så mange tak for det.

    Er det teknisk muligt både at køre et input modul og 2 output moduler samtidig med din kode?

    På forhånd tak

    • Jens says:

      Det burde være muligt med 1 input og 2 output – det er dog ikke noget jeg har prøvet (I den forbindelse mener jeg input til arduino – d.v.s. ind i arduino). Problemet er flere input er at der skal bruges en arduino gpio indgang som kan lave interrupt ved ændring, og afhængig af arduino model er der begrænsninger.

      • Kenth Jensen says:

        Perfekt.

        Er dog løbet ind i lidt problemer, er desværre fuldstændig ny indenfor Arduino verdenen.

        Hvis jeg åbner BasicInput eksemplet og prøver at compilere, får jeg følgende fejl:
        PinChangeInt.h: No such file or directory

        Jeg har derefter gået til Library Manager og installeret PinChangeInterrupt biblioteket.

        Derefter fik jeg fejlen at den ikke kunne finde PinChangeInt.h, fandt filen og opdaget at den var omdøbt til PinChangeInterrupt.h, rettede include linien i IHCInput.cpp til at referere til PinChangeInterrupt.h i stedet.

        Nu får jeg fejl som ‘PCintPort’ has not been declared, dette har jeg ikke lige kunne hacke mig frem til.

        Hvis jeg bruger Visual studio får jeg også en masse fejl som disse ‘TCCR2A’ was not declared in this scope

        Sætter stor pris på hvis du har lidt tid til at kigge på dette

        På forhånd tusind tak

        • Kenth Jensen says:

          Jeg tror jeg har fået løst ovenstående problem, men er blot nået frem til et nyt problem, som højst sandsynligt skyldes uvidenhed med hvordan man bruger events

          Mit kode ser ca sådan her ud

          IHCinput ihcInput1;

          void setup()
          {
          ihcInput1.Begin(2); // Connected to Output 2 on IHC controller
          ihcInput1.OnChange(onChangeIhc1); // Forsøg på at definere en eventhandler
          }

          void onChangeIhc1(byte changemask, byte data) // eventhandler
          {

          }

          Jeg får nedenstående fejl ved compilering:
          IHCInput.h:73: note candidate expects 2 arguments, 1 provided

          • Jens says:

            Du kan lave din egen klasse nedarvet fra IHCinput og overskrive OnChange funktionen (den er virtuel). Vær opmærksom på OnChange bliver kaldt dirkte fra interrupt så du ikke må lave ret meget. (Det skal gå hurtigt og f.eks serial.print el. lign vil ikke virke).
            Det bedste er a polle i loop funktionen og bruge GetChangeMask til at se om der er ændringer.

          • Kenth Jensen says:

            Synes lige jeg skylder en tilbagemelding her.

            Med din hjælp er det lykkedes at få det hele op at køre, så nu bruger jeg Arduino’en som 2 IHC outputmoduler og 1 IHC inputmodul.
            Desuden er Arduinoen forbundet til min Raspberry Pi via I2C, så nu kan jeg sende ialt 16 bits både frem og tilbage mellem min Raspberry Pi og mit IHC.

            En kæmpe stor tak skal lyde for at stille dette library til rådighed kvit og frit.

          • Lars says:

            Hvordan løste du problemet med PCintPort?

          • Kristof Aerts says:

            Hi Kenth, could you share your code for the 16 bits return solution? I’m only retrieving the 8 bits currently.

  15. Kristof says:

    Is there a way to use this library to communicate directly with the IHC output module. Triggering the relays?

    • Jens says:

      If you mean connecting an arduino/esp8266 directly to an IHC output module – yes I guess that it is possible, since it is the same signal. But i don’t understand why you would want to do that.

      • Kristof says:

        Well, the thing is, I have the IHC controller set up now for approx. 10 years. My whole domotica (light controls,etc) is dependant on the controller. Not a problem just yet however, I believe Schneider Electric stopped producing the controller. I’m afraid that in 5 years or so, I can’t get a replacement controller if mine breaks down, rendering all my input and output modules useless. That is the reason i’m searching for a way to communicate with my input output modules without the controller. The ultimate goal would be a raspberry pi with home assistant, mqtt host and direct (or via arduinoihc) communication to the modules.

        • Jens says:

          The newest IHC controller was relased about 1-2 years ago I think, and it is compatible with the older versions, so you can replace your existing controller. But I get your idea. I assume you don’t have any IHC wireless devices, because that is probably not going to be easy to replace.

    • Flemming L says:

      Hello Kristof
      Did you do any experiments to replace the controller by an Arduino. I have an SMS module connected to an output module (to control heating), and I would like to be able to change the outputs without sending text messages. A controller is rather expensive for this use, and hence I would like to use the Arduino as a controller.

  16. Lars says:

    I’m a newbie to this but this library really will help me!

    I’m having some difficulties compiling the IHC library as the PinChangeInt library apparently has to be replace by the new PinChangeInterrupt.
    Compiling the codes gives two error of which PCintPort::arduinoPin is one of them.

    Does anyone know how to fix this problem?

  17. John says:

    Hey Lars
    Have you triad the Zuno with Z-wave, I have
    and it is not compatible with your library. (And thanks for the good work)

    It world be cool if it was, then you could control IHC output with Z-Wave and publish a loot of sensors to Z-Wave protocol (IHC inputs)

    I don’t know if it’s a simple thing or big job or I could help you.
    but it world be appreciated

    • Jens says:

      I have not tried Z-Uno, it is propably the interupt/timers that are different from a regular arduino. I can’t help you with that.
      You could look at Home Assistant if you want to connect IHC and Z-Ware

  18. Søren Jørgensen says:

    Hej!

    Jeg vil modtage nogle signaler fra IHC til at få min Arduino Uno til at sende videre.
    Som jeg forstår det kan Arduino virke som et outputmodul, men hvordan kan man læse om man får et signal fra f.eks. 13.4 – 13.5 eller 13.6?
    Og hvordan bruger man dette signal til at lave output på noget andet fra Arduino?

    #include
    #include

    IHCinput ihcinput;

    void setup() {

    ihcinput.Begin( 2);
    Serial.begin(115200);
    Serial.println(“Start”);
    }

    void loop() {

    while (ihcinput.GetChangeMask() == 0) {
    // Whitout this delay ESP8266 will reboot?
    delay(1);
    }
    Serial.println(ihcinput.GetInput(),BIN);

    Fra dette eksempel skulle man få nogle resultater fra forskellige datalinjer fra IHC som jeg forstår det. Men hvordan bruger man disse resultater til at lave output fra Arduino til andre ting?

    • Jens says:

      ihcinput.GetInput() returnerer en byte med en bit pr ihc udgang. d.v.s. hvis du har forbundet til udgang 13 på ihc controlleren så er første bit 13.1 næste bit 13.2 Eller du kan bruge ihcinput.GetData( 0) for 13.1, ihcinput.GetData( 1) for 13.2 o.s.v. Hvad du så gør med det for at sende det til noget andet er helt op til dig. Du kunne f.eks styre en GPIO pin på arduino sådan:
      digitalWrite( 7,ihcinput.GetData( 0));
      Så vil arduino GPIO 7 skifte til hvad ihc udgang 13.1 er sat til

  19. Daniel Christriansen says:

    Hej Jens,

    Tak for dit arbejde med Arduino og IHC!

    Indtil videre taler min controller med en Rs485(modbus) swimmingpool pumpe. Min Solcelle inverter, mit alarmsystem og en solvarme pumpe(PWM) – det fungerer rigtigt fint.

    Det er dog endnu ikke lykkedes mig at få en temperatur sensor til at fungere. jeg kan sagtens sætte individuelle bits og se dem i ServiceView, men prøver jeg sende en temperatur på samme datalinje virker det ikke. Kan du give mig et par hints? På forhånd mange tak 🙂

    • Jens says:

      Har du prøvet eksemplet der ligger sammed med? – eller lave det helt enkelt med en temperatur.

      • Daniel Christriansen says:

        Hej Jens,

        Tak for din tid!

        Ja, jeg benytter temperatur eksemplet, jeg har også prøvet at rettet det til således at der blot er en enkelt temperatur instans.

        Hvis jeg indsætter en kontakt i stedet for et temperatur input på kontrolleren, så kan jeg se at den står og skifter. Logger jeg så denne så kan jeg se alle 41 Bits (82 on,off events) Jeg har så prøvet at logge hvor længe hver bit er on.. de fleste er korrekt 40 og 80 ms, men jeg ser også 100 og 200 ms :(. Jeg bruger meget korte ledninger, og de er direkte forbundet. Mit næste forsøg er at opgradere kontrolleren til nyeste fw (3.3.33) og så resette den til default.
        Tak igen!
        Mvh Daniel

        • Jens says:

          Jeg har opdateret med “TemperatureSimple.ino” se her: https://github.com/dingusdk/arduinoihc/tree/master/Examples/TemperatureSimple
          Det med kontakten istedet for forstår jeg ikke helt – eller jeg tror du har misforstået temperatur input i min kode. Temperatur virker ovenpå IHCoutput. d.v.s. du kan ikke bruge det direkte til et alm ihc input modul. I det nye eksempel skal du forbinde GPIO 8 til en data indgang på IHC controlleren (og Arduino gnd to 0V på controlleren). I dit IHC projet tilføjer du en temperatur sensor og sætter den op til den data indgang som du har forbundet arduino til og indgang 1. Bemærk at IHC laver indgange 1 indekseret (starter ved 1) – koden er 0 indekseret. (Det er 0’et i constructor til IHCTemperature)
          Jeg bruger ikke selv temperatur mere , men har lige afprøvet det på en test controller – og det virker stadigvæk fint.

  20. Daniel Christriansen says:

    Hold da op, tak!

    Jeg har forsøgt med temperaturesimple.ino.
    gnd->0v
    pin8->datalinje 7 ind.
    temperatursensor i visual på 7.01
    Kun ovenstående og 24v er tilsluttet controlleren.

    den siger desværre blot -0.0c på både rum og gulv. Alarm=on

    Jeg benytter arduino ide1.8x og pinchangeint fra https://github.com/GreyGnome/PinChangeInt

    Har indtil videre forsøgt med en pro mini og en mage2560

    For bedre at forklare mit lille test program har jeg taget et par screen shots:
    https://photos.app.goo.gl/2VSDfEkJnJ6J57vL7

    Det er et forsøg på at sanity chekke temperaturprotokollen (de 41 bit af 40/80ms) jeg ved ikke om det er præcist nok til at man kan regne med det, men der er nogle bits der er for korte/lange.

    er der brug for noget pullup/down på datalinjen mellem arduinoen og controlleren?

    • Jens says:

      Hvis din pro mini er 3.3v er det ikke sikkert det virker. Mega2560 burde virke. Jeg har selv testet med en UNO. Der behøver ingen pullup/down på datalinjen. Jeg tror ikke IHC controlleren er hurtig nok til at du kan lave en test med tider så lave. Prøv at lade være med at forbinde temperatur sensoren til noget i IHC visual. Jeg har testet med en HW 6.1 controller – og jeg kan regne ud at du har en visual 3 controller – måske er det problemet. Jeg har ikke prøvet med den nye controller, det vil jeg gøre (det er lidt mere besværligt fordi det er den jeg bruger i huset)

  21. Daniel Christriansen says:

    Det er godt nok pænt af dig – tak skal du have.

    Det er en 5v pro mini (328p), desværre er der ingen ændring om den er forbundet til en funktionsblok eller ej.

    Jeg ved hvordan det er med controlleren i drift , her er konen allerede begyndt at kommentere på at kontakterne ikke virker 😀

    • Jens says:

      Jeg fik samme resultat som dig med den nye controller. Den er åbenbart mere utilgivelig med timing. Jeg fandt ud af at det er hvis der er for langt tid imellem hver data klump. Jeg har ændret det så det virke på den nu. Release 1.0.10 – der går altid lidt tid inden det kommer med i Arduino library manager, så hvis det ikke er der endnu må du hente det direkte fra github: https://github.com/dingusdk/arduinoihc

  22. Daniel Christriansen says:

    Du er altså bare en guttermand! Det ser ud til at virke!

    Nu kan jeg styre mit solvarmeanlæg og måske spare lidt penge på at pumpen ikke skal køre hele tiden. 🙂

    Jeg har sendt dig en lille hilsen på din dingus.dk mail.

    Tak Igen
    Mvh
    Daniel

  23. Daniel Christriansen says:

    Til info, min controller sprang 21.0c over konsekvent med 122ms puls. Ved 120ms har det kørt stabilt i 10 minutter nu .. 🙂

    • Jens says:

      Det er godt at det kører nu. At den springer over behøver ikke være en fejl. Tempeturdata blokken er 5 sek om at blive sendt. Eksemplet burde nok vente 10sek eller mere imellem hver ændring. Det du skal kigge på er om “alarm” på temperatur sensoren bliver “on” – så er der en fejl.

  24. Daniel Christriansen says:

    Hej Jens,

    Jeg har lige oplevet samme problem som andre herinde, med input bare ikke virker. Det viser sig at det er et problem med pinchangeint.

    ved at lave følgende rettelser i ihcinput.cpp og .h så virker det med arduino.h alene(altså helt uden downloadede libraries)

    ihcinput.h
    23 — #define IHC_USEPINCHANGEINT

    ihcinput.cpp
    19 — #define IHC_USEPINCHANGEINT
    24 — #else
    25 — #include
    73 — PCattachInterrupt(pin, _PinChangeInterrupt, CHANGE);

    73 +++ attachInterrupt(digitalPinToInterrupt(pin), _PinChangeInterrupt, CHANGE);

    Mvh
    Daniel

  25. Anders says:

    Hej
    Det er et fint diagram på hvordan IHC Input koblet sammen med Arduino Output gennem en optocopler, Jeg savner lidt et diagram den anden vej, eller er det bare at spejlvende det? kan det køre på en GPIO ben eller skal det være en uart?

    • Jens says:

      Ja du kan spejlvende det. Bemærk at der i billedet før stod 24v (jeg har rettet det til 5v) – de 24 volt til IHC input moduler – data ind/udgange er 5v (eller du kan sætte en 5v zenerdiode på som der var en eller anden der foreslog). Og du kan droppen pullup modstand og sættte bruge den indbyggede pullup i arduino når du sætter input mode. GPIO skal være en du kan lave interrupt så 2 eller 3 på en ATMega328. Optokobleren inverterer signalet som det skal du ændre i koden.

      • Anders says:

        Hej Jens
        Tak for det hurtige svar, jeg vil lave et shield til ARDUINO MKR WIFI (Skal nok lægge et link op her hvis det virker:))

        Jeg tænker at lave der så det har et par input kanaler og et par output kanaler.

        Er vi enige om at det skal være 3v3 på arduinosiden, og 24v på IHC siden af optokobleren. henholds vist sendt den ene eller anden vej om det er et input eller output. Det er vel kun input på arduinoen der skal være interrupt ikke? output giver vel ikke mening:) det ser dog ud til at alle interrupt på alle IO på den arduino.

        • Jens says:

          3,3v på arduino (eller 5v afhængig af arduino type). IHC skal have 5v på en data indgang. (24V er på input moduler). Og ja det er kun inpout på arduino der behøver interrupt.
          Bare lige hvis du ikke har set det – så kan du forbinde direkt via wifi til din IHC controller som f.eks det her:
          https://www.dingus.dk/ihc-soap-client-for-esp8266/

          • Anders says:

            Hej Jens
            Jeg kan detsvære ikke connecte direkte da jeg har en af de “Gamle” IHC controllere. dem uden netværk:( men ellers tak for tippet:)

            Okay så data indgangen på IHC er 5V:) det giver mening, Går også ud fra at data udgangen på IHC er 5V så.

Leave a Reply

Your email address will not be published. Required fields are marked *