Log in Register

Login to your account

Username
Password *
Remember Me

Create an account

Fields marked with an asterisk (*) are required.
Name
Username
Password *
Verify password *
Email *
Verify email *
Captcha *
Welcome, Guest
Username: Password: Remember me

TOPIC: conflit de commande

conflit de commande 07 Oct 2015 10:08 #1

Bojour

j'ai un conflit de commande

lorsque je commande la pin 7 ou 8 de mon arduino

dans les 10 secondes qui suive si je commande un module chacon arduino

commande la derniere pin commander


j'ai fais un teste sans le timer ça na rien changer
auriez vous une idée merci

moniteur série
commande pour la pin 8
xpl-cmnd
{
hop=1
source=bnz-send.raspberrypi
target=*
}
lighting.basic
{
command=on
device=8
}

n
8

commande du module chacon
xpl-cmnd
{
hop=1
source=bnz-send.raspberrypi
target=*
}
lighting.basic
{
command=on
device=A1
}

n
8

passer une dizaine de seconde commande du module chacon
xpl-cmnd
{
hop=1
source=bnz-send.raspberrypi
target=*
}
lighting.basic
{
command=on
device=A1
}

n


mon script
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <stdio.h>
#include "xPL.h"

xPL xpl;
char value;//contiendra une lettre n pour on f pour off
int valeur; // contiendra le n° de pin extrait par sscanf (device=)

//Photorésistance
int photocellPin = A0; // La photo-résistance raccordée sur la PIN A0 (avec une résistance Pull-Down de 10K Ohms)

unsigned long timer = 0;//valeur courante du temps

//thermistance
int sensorPin = A1;

byte mac[] = {
0x90, 0xA2, 0xDA, 0x0D, 0xF0, 0xF5 };
IPAddress ip(192, 168, 0, 177);
IPAddress broadcast(192, 168, 0, 255);
EthernetUDP Udp;

void SendUdPMessage(char *buffer)

{
Udp.beginPacket(broadcast, xpl.udp_port);
Udp.write(buffer);
Udp.endPacket();
}

void AfterParseAction(xPL_Message * message)
{
if (xpl.TargetIsMe(message))
{
if (message->IsSchema_P(PSTR("lighting"), PSTR("basic")))
{
Serial.println(PSTR("is lighting.basic"));

}
}

// Show message
Serial.println(message->toString());
// quand on receptionne un message, on sauvegarde la 'value'
// de la commande (1) le deuxieme caractere n pour on f pour off
value = message->command->value[1];

// on recupere le n° de device et verifie qu'il est valable(c'est un nombre)
if(sscanf(message -> command[1].value, "%d" ,&valeur))
{
}
}

void setup()
{
Serial.begin(115200);
Ethernet.begin(mac,ip);
Udp.begin(xpl.udp_port);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);

xpl.SendExternal = &SendUdPMessage; // pointer to the send callback
xpl.AfterParseAction = &AfterParseAction; // pointer to a post parsing action callback
xpl.SetSource_P(PSTR("xpl"), PSTR("arduino"), PSTR("domotique")); // identifiant arduino sur le reseau xpl

}

void loop()
{
xpl.Process(); // heartbeat management

int packetSize = Udp.parsePacket();
if(packetSize)
{
char xPLMessageBuff[XPL_MESSAGE_BUFFER_MAX];

// read the packet into packetBufffer
Udp.read(xPLMessageBuff, XPL_MESSAGE_BUFFER_MAX);

// parse message
xpl.ParseInputMessage(xPLMessageBuff);



Serial.println(value);
Serial.println(valeur);

if (value == 'n')
{
digitalWrite(valeur,HIGH);
}
else if (value == 'f')
{
digitalWrite(valeur,LOW);
}

}


// exemple envoyer un Message xPL toutes les 10 secondes
else if ((millis()-timer) >= 10000) // 1h = 3600000ms
{
//-- Photo-résistance
// Lecture de la valeur de la photorésistance
int photocellReading = analogRead(photocellPin); // lit la valeur analogique sur la broche A0 (pont diviseur Photo-résistance + Résistance)

// Conversion de valeur 'int' en 'char*' (tableau de char = chaine de caractères)
char photocellString[11];
itoa(photocellReading, photocellString, 10);
Serial.println(photocellString);

//(!strcmp : comparer chaine de caractères)
if(!strcmp(photocellString,"22"))
{

// Création du message XPL
xPL_Message msg;
msg.hop = 1;
msg.type = XPL_CMND;
msg.SetTarget_P(PSTR("*"));
msg.SetSchema_P(PSTR("lighting"), PSTR("basic"));
msg.AddCommand_P(PSTR("command"),PSTR("on"));
msg.AddCommand_P(PSTR("device"),PSTR("A1"));
// msg.AddCommand("current",photocellString);
xpl.SendMessage(&msg);

}


//-- Thermistance
int sensorPinReading = analogRead(sensorPin);

float voltage = sensorPinReading * 5.0 / 1024.0;
float temperatureC = (voltage - 0.5) * 12.3; //conversion en degrés

// Serial.print(voltage);
// Serial.println(" volts"); //On écrit le voltage
// Serial.print(temperatureC);
// Serial.println(" degrees C");

char temperatureCString[5];
//Conversion de valeur 'float' en 'char*' (tableau de char = chaine de caractères)
dtostrf(temperatureC, 4, 1, temperatureCString);//le 4 quatre valeur total deux chiffres une virgule un chiffre le 1 un chiffre après la virgule


xPL_Message msgtemp;
msgtemp.hop = 1;
msgtemp.type = XPL_TRIG;
msgtemp.SetTarget_P(PSTR("*"));
msgtemp.SetSchema_P(PSTR("sensor"), PSTR("basic"));
msgtemp.AddCommand_P(PSTR("device"),PSTR("1"));
msgtemp.AddCommand_P(PSTR("type"),PSTR("temp"));
msgtemp.AddCommand("current",temperatureCString); //-- Création du message XPL
xpl.SendMessage(&msgtemp);

// Lecture de valeur courante du temps
timer = millis();
}
}
The administrator has disabled public write access.

conflit de commande 07 Oct 2015 14:32 #2

re


je me repond desoler pour la boulette

A1 est une valeur inconnue pour arduino elle ne lui est pas destinée

il faut lui dire quoi faire



// on recupere le n° de device et verifie qu'il est valable(c'est un nombre)
if(!sscanf(message -> command[1].value, "%d" ,&valeur))
{
//si la valeur est inconnue
valeur = -1;
}
Last Edit: 07 Oct 2015 19:12 by jeanphilippe.
The administrator has disabled public write access.
Backtotop