Hello i am trying to build a controller with a master and for now a slave with between RS485 connection to master and slave.
And for last the slave is connected also to the relay 8channels, Vixen responsive ...but i cant control the relay with vixen and i dont know why
can somebody help me?
code
Heres my code
//Master
#include <A2a.h>
#include <SoftwareSerial.h>
#include “Arduino.h”
// DEFINIÇÕES DE PINOS
#define pinLED 2 //aqui coloca-se o primeiro pin do primeiro Relé
#define n_arduinos 1
#define n_canais_por_arduino 8
#define N_canais_total (n_arduinos*n_canais_por_arduino)
#define end_inicial 0x08 // aqui coloca-se o endereço do primeiro slave , pode ser alterado, apenas tem de coincidir com o que está no programa do slave 1
//canas do rele a usar
#define n_canais_por_arduino 2 //pmw
#define n_canais_por_arduino 3//pmw
#define n_canais_por_arduino 4//pmw
#define n_canais_por_arduino 5 //pmw
#define n_canais_por_arduino 6 //pmw
#define n_canais_por_arduino 7 //pmw
#define n_canais_por_arduino 8 //pmw
#define n_canais_por_arduino 9 //pmw
//variaveis novas que poderam faltar
//pins de comunicação do RS4585
//#define Pino_RS485_RX 10 // mudar para 12
//#define Pino_RS485_TX 11 //mudar para 13
//#define RS485Transmit HIGH
//#define RS485Receive LOW
// INSTANCIANDO OBJETOS
A2a arduinoSlave;
//Pino de controle transmissao/recepcao
#define SSerialTxControl A4
SoftwareSerial mySerial(11,12); // RX, TX
#define NOT_INVERTED 0
#define INVERTED 1
#define MODE NOT_INVERTED
// DECLARAÇÃO DE VARIÁVEIS
//declaracao dos canais rele
int channels = {n_canais_por_arduino,n_canais_por_arduino,n_canais_por_arduino,n_canais_por_arduino,n_canais_por_arduino ,n_canais_por_arduino,n_canais_por_arduino,n_canais_por_arduino};
byte endereco[n_arduinos];
byte rxValue;
byte txvalue;
byte incomingByte[N_canais_total];
int i=0;
int counter = 0;
void setup() {
pinMode( n_canais_por_arduino, OUTPUT);
pinMode( n_canais_por_arduino, OUTPUT);
pinMode( n_canais_por_arduino, OUTPUT);
pinMode( n_canais_por_arduino, OUTPUT);
pinMode( n_canais_por_arduino, OUTPUT);
pinMode( n_canais_por_arduino, OUTPUT);
pinMode( n_canais_por_arduino, OUTPUT);
pinMode( n_canais_por_arduino, OUTPUT);
for (int i=0;i<n_arduinos;i++){
endereco[i]=(end_inicial)+i;
}
arduinoSlave.begin();
Serial.begin(9600);
while (!Serial){
}
{
Serial.println(“Modulo Transmissor”);
Serial.println(“A enviar dados!”);
}
for (byte nS = 0 ; nS < n_arduinos ; nS++) {
for(byte i=0;i<n_canais_por_arduino;i++){
arduinoSlave.pinWireMode(endereco[nS], pinLED+i, OUTPUT);
delay(100);
arduinoSlave.digitalWireWrite(endereco[nS], pinLED+i, LOW);
}
}
if (MODE == NOT_INVERTED){
for (byte nS = 0 ; nS < n_arduinos ; nS++) {
for(byte i=0;i<n_canais_por_arduino;i++){
arduinoSlave.digitalWireWrite(endereco[nS], pinLED+i, HIGH);
delay(500);
arduinoSlave.digitalWireWrite(endereco[nS], pinLED+i, LOW);
}
}
}
}
void loop(){
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
counter++;
delay(1000);
if (Serial.available() >= 8)
counter++;
{
for (int i=0; i<8;i++)
{
incomingByte[i] = Serial.read();
// incomingByte[i] = 255 - Serial.read();
} // Arduino pins
digitalWrite(n_canais_por_arduino, incomingByte[0]); // Pin 2
digitalWrite(n_canais_por_arduino, incomingByte[1]); // Pin 3
digitalWrite(n_canais_por_arduino, incomingByte[2]); // Pin 4
digitalWrite(n_canais_por_arduino, incomingByte[3]); // Pin 5
digitalWrite(n_canais_por_arduino, incomingByte[4]); // Pin 6
digitalWrite(n_canais_por_arduino, incomingByte[5]); // Pin 7
digitalWrite(n_canais_por_arduino, incomingByte[6]); // Pin 8
digitalWrite(n_canais_por_arduino, incomingByte[7]); // Pin 9
int arduino=n_arduinos;
int N_canais_arduino=n_canais_por_arduino;
int n_canais_total=N_canais_total;
for(;;){
if(Serial.available() >= n_canais_total){
for(int i=0;i<n_canais_total;i++){
incomingByte[i]=Serial.read();
}
if (MODE == NOT_INVERTED) {
for(int nS=0;nS<arduino;nS++){
for(int i=0;i<N_canais_arduino;i++){
int j=nS*N_canais_arduino,p=i+j;
if(incomingByte[p]==0){arduinoSlave.digitalWireWrite(endereco[nS], pinLED+i, LOW);
}else{arduinoSlave.digitalWireWrite(endereco[nS], pinLED+i, HIGH);
}
}
}
}
}
}
}
}
Slave code
#include <A2a.h>
#include <SoftwareSerial.h>
#include “Arduino.h”
#define endereco 0x08 // MODIFICAR O ENDEREÇO PARA CADA SLAVE
A2a arduinoMaster;
//Pinos de comunicacao serial do modulo RS485
//#define Pino_RS485_RX 10
//#define Pino_RS485_TX 11
//Pino de controle transmissao/recepcao
#define SSerialTxControl A4
//#define RS485Transmit LOW
//#define RS485Receive HIGH
SoftwareSerial mySerial(11, 12); // RX, TX
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println(“Modulo receptor”);
Serial.println(“A enviar dados…”);
mySerial.begin(9600);
mySerial.println(“recebido”);
{
arduinoMaster.begin(endereco);
}
}
void loop() {
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
void receberDados() {
arduinoMaster.receiveData();
}
void enviarDados() {
arduinoMaster.sendData();
}