ArduinoIHC
26 Janurary, 2016
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å_. E_fterfø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 på 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:
og den tilsvarende på en ESP8266-12
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.
Comments
The comments below has been imported from the old website. Currently comments are readonly, meaning you can not
make new comments.
You will be able to do that when it is ready. For now if you want to get in touch, you can send me an email.
If you have problems with something that has a github repository, please make a github issue.
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
RudiFor 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.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!!!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.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.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.Jeg har sat et diagram ind ovenfor der viser hvordan arduino output kan forbindes til ihc input.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. JanJan 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 JanArduinoIHC 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å.Det er lykkedes at compile nu ;)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?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.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. StenKorrekt - Optokobleren vil invertere signalet.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.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.Er det tænkt lidt således?
http://line-web.dk/IHC/Arduino_IHC_MainDiagram.pngNej 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)Jeg var klar over at det var tænkt som kontakt til controller'en, men jeg tænkte at denne tegning kunne vise det lige så godt.
Ang. dioden er vi enige om at der kun er tale om den i Output'et?
som:
[http://line-web.dk/IHC/Arduino_IHC_MainDiagram Control.png](http://line-web.dk/IHC/Arduino_IHC_MainDiagram Control.png)Ja - nu vender dioden rigtigt.Hej.
Er det muligt at bruge din kode til at sætte en temperatur i IHC'en fra en Arduino via et input modul?Se mit svar til jan [Aug 22 2017](http://www.dingus.dk/arduinoihc/#comment-79)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.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.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?I have no experince with PLC and modbus. You can probably use the arduinolib to make the IHC part of your converter.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?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.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 takDet 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.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 takJeg 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 providedDu 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.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.Hvordan løste du problemet med PCintPort?Hi Kenth, could you share your code for the 16 bits return solution? I'm only retrieving the 8 bits currently.Is there a way to use this library to communicate directly with the IHC output module. Triggering the relays?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.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.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.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.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?Fixed it by using the original library.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 appreciatedI 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-WareHej!
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?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 tilHej 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 :)Har du prøvet eksemplet der ligger sammed med? - eller lave det helt enkelt med en temperatur.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 DanielJeg 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.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?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)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 :DJeg 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/arduinoihcDu 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
DanielTak "hilsen" modtaget.Til info, min controller sprang 21.0c over konsekvent med 122ms puls. Ved 120ms har det kørt stabilt i 10 minutter nu .. :)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.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
DanielHej
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?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.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.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/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å.Jeg forstår ikke rigtig dine arduino eksempler.
Jeg har forbundet er Nano over 'D2' og 'GND'
Og uploadet 'Basic Input' men jeg ved ikke rigtig hvad jeg skal tilføje før der sker noget.
For der sker ikke noget ved bare at sætte den til.
Har du et eksempel hvor den aktivere Input X.1, X.2, X.3 - X.17 X.18 i et løbelys effekt?Basic input eksemplet udksriver på seriel udgangen hvad der kommer ind på ihc indgangen (D2). D.v.s du skal forbinde en IHC data udgang til D2 på din arduino. I IHC visual kan du f.eks. bruge "Brugerdefineret udgangsprodukt" til en udgang (1 bit i IHC indgangen på arduino), eller du kan bruge "Controller Link Out produktet" som har 8 udgange (8 bit i IHC indgangen på arduino). Nå du ændre en udgang i IHC skulle du gerne se ændringen udskrevet på arduino.
Eller prøv basic output eksemplet - det er den anden vej og det er med to udgange fra arduino til indgange på IHC - den ene udgang tæller op, den anden skifer en bit ad gangen (løbelys)På input er D2 defineret til den ønskede port.
Hvor definere jeg Output porten?
Den ser ikke ud til at være sat.Begin( pin)
pin er output portHej Jens.
Ved du om de helt gamle IHC Controllere, også virker. Den med en seriel port.
Jeg har problemer med at få dit BasicInput eksempel til at vise noget :-(
BasicOutput & InOutLoopTest virker OK
/FrankJeg tror at input/output modulerne er det samme for den gamle controller. Du kan e.v.t. prøve med Basicoutput eksemplet - det er sikkkert nemmere at får til at virke. Brug f.eks "Controller Link In" i IHC visual til at have alle inputs fra data indgangen og IHC service vieweren til at se ændringerneHej Jens.
Måske jeg lige skulle specificere:
Jeg har en gl. controller, som jeg ikke kan læse i en Nano, med BasicInput.
Jeg har f.eks koblet en input til en output på controlleren, og til D2 på Nano, vippe med nogle udgange, og se dem i controlerens servicemenu. Men der sker intet i Nano'en.
Jeg har også prøvet at koble D2 & D13 sammen, til en indgang på controleren, køre InOutLoopTest, Det virker! Nano'ens output viser ingen fejl, og jeg kan se inputtet ændrer sig i servicemenuen.
Det virker som om at signalet FRA en controller ikke kan læses i Arduino.
Burde det virke ?
/FrankJeg tænker at det burde virke. Grunden til at jeg siger det er bedre at prøve med arduino output forbundet til ihc input først, er at input på arduino kan være mere problematisk at få til at virke p.g.a. at der skal være et interupt tilknytte indgangen. Det kunne også være hvis din arduino er med 3.3v på ind/udgange, jeg mener at nano kan fås i både 5v og 3.3v.Det virker!
Min "1"-puls fra den gamle ctrl, var kun ca. 144 MicroSek.
Så jeg ændrede "MINPULSELENGTH" til 140. Så var der hul.
Jeg har også ændret lidt, så jeg læser alle 16 bit. IHC sender nemlig Ch1 & 2 på Ch1. Ch3 & 4 på Ch3, o.s.v.
Så sparer jeg en Nano. :-)
For øvrigt en meget inspirerende side du har.Hej Frank
Jeg har samme problem som dig med en gammel controller (120B1202) - BasicInput virker ikke på IHC's outputklemmer.
Er de ændringer som du foretog for at få det til at virke, noget du vil dele med os andre? (altså i flere detaljer end du allerede gør🙂)
/TorbenHi Torben,
I had the same problem, and I made BasicInput work by changing the code a bit.
The timing is slightly different.
my MAXPULSELENGTH is 340
and THRESSHOLDPULSELENGTHLOW is 180
Also the old outputmodules send only 8 bits, not 16 and no parity
So you need to change the code in IHCinput.cpp to take that into account