Bonjour la communauté,
J'ai recement reçu deux Kit K8000 de chez velleman et je cherchais a piloter ses cartes via le protocole I2C (library wires)
http://www.hekkers.net/domotica/Images/DSC_3907.JPG
http://www.jlelectroniq.com/mag/imgN/k8000_t.jpg
Je voulais partager mon projet qui pour l'instant n'est qu'en beta test mais fonctionne a 90%
Tout d'abord j'ai installer un module Ethernet pour lire les états via le net a distance, car j'aimerais a l'avenir l'utilisé pour monter une station météo et une surveillance alarme bâtiment avec différents capteur, porte, fenêtre, PIR.
Je vous propose le code de base pour utiliser déjà les K8000. Il faut savoir que le couplage de plusieurs carte est possible et un scanner I2C pour toujours retrouver les adresses des contrôleurs. ont peut coupler 4 cartes k8000 sur l'arduino et ont peut avoir 64 entrées sorties plus les fonctions convertisseur AD et DA qui en découlent.
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0x11 };
int K8000[8];
EthernetServer server(80);
byte c = 0;
void setup()
{
bool DHCP = false;
int i = 0;
while(DHCP == 0 && i<10) {
if(Ethernet.begin(mac) == 1){
DHCP = true;
i = 10;
}
i++;
delay(2000);
Wire.begin(); // join i2c bus (address optional for master)
}
if(!DHCP){
Serial.println("DHCP FAILED");
for(;;);
}
server.begin();
}
void loop()
{
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("<html>");
client.println("<head>");
client.println("<title>I2C K8000</title>");
client.println("<meta http-equiv=\"refresh\" content=\"5\">");
client.println("</head>");
client.println("<body bgcolor='#666666' text='yellow' link='lime' vlink='lime' alink='red'>");
client.println("<table align='center' border='1'><tr><td width='938' colspan='4'><p align='center'><font size='3' face='Tahoma'><b>I2C K8000</b></font></p></td></tr></table>");
client.println("<hr>");
byte error, address;
int nDevices;
client.print("Scanning");
//client.println("
");
int adr=0;
nDevices = 0;
for(address = 0; address <= 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
if (address<16)
Wire.requestFrom((address,HEX), 6);
while(Wire.available())
{
char c = Wire.read();
}
client.print(c);
//client.println("
");
delay(60);
K8000[adr]=(address);
nDevices++;
adr++;
client.print("x");
}
else if (error==4)
{
client.print("Unknow error at address 0x");
if (address<16)
client.print("0");
client.println(address);
}
}
if (nDevices == 0)
client.println("No I2C devices found\n");
else
client.println(" done\n");
client.println("<hr>");
for (int adr = 0; adr < 8; adr++) {
Wire.beginTransmission(K8000[2]);
Wire.write(255-K8000[adr]);
Wire.endTransmission();
Wire.beginTransmission(K8000[3]);
Wire.write(255-adr);
Wire.endTransmission();
Wire.beginTransmission(K8000[5]);
Wire.write(255-K8000[adr]);
Wire.endTransmission();
Wire.beginTransmission(K8000[4]);
Wire.write(255-adr);
Wire.endTransmission();
client.print("I2C input ");
client.print(K8000[adr]);
client.print(" value is ");
Wire.requestFrom(K8000[adr], 6);
while(Wire.available())
{
char c = Wire.read();
}
client.print(c);
client.println("
");
delay(60);
}
client.println("<hr>");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 4; analogChannel++) {
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(analogRead(analogChannel));
client.println("
");
}
break;
}
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
client.println("<hr>");
client.println("</body></html>");
delay(1);
client.stop();
}
}
J'ai un soucis ont peut voir dans le code que je scan les tous les contrôleurs pour recup les données mais je n'arrive pas a lire les valeurs
Ceux ou celles qui voient des améliorations possible je suis a l'écoute. Y a toujours moyen de raccourcir certaine choses.... l'avenir m'en dira peut être plus....
Merci, bonne lecture