
#include <SoftwareSerial.h>
#define rxPin 10
#define txPin 11
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
void setup() {
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
pinMode(2, OUTPUT);
digitalWrite(2,LOW);
mySerial.begin(9600);
Serial.begin(9600);
}
void loop() {
int n;
char c;
digitalWrite(2,HIGH);
mySerial.write(B01010101);
digitalWrite(2,LOW);
delay(1);
}



#include <SoftwareSerial.h>
/* struttura pacchetto:
* destinatario
* mittente
* comando
* dato
*/
#define mitt 2 //mio indirizzo
#define wrdig1 1 //Out HIGH digitale
#define wrdig0 2 //Out LOW digitale
#define rddig 3 //In digitale
#define txctl 2 //Uscita controllo TX
#define rxPin 10
#define txPin 11
SoftwareSerial mySerial(rxPin, txPin); // RX, TX
unsigned long int t;
byte txbuf[4];
byte rxbuf[4];
byte br=0;
bool rcvd=false;
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
pinMode(txctl,OUTPUT);
pinMode(txPin,OUTPUT);
pinMode(rxPin,INPUT_PULLUP);
digitalWrite(txctl,LOW);
}
void hexprt(byte b)
{
if (b<16)
Serial.print("0");
Serial.print(b,HEX);
}
void prtrx()
{
int n;
Serial.print("Req: ");
for (n=0;n<4;n++)
{
hexprt(rxbuf[n]);
Serial.print(" ");
}
if (rxbuf[0]==mitt)
{
Serial.println(" Mio!");
}
else
Serial.println();
}
void prttx()
{
int n;
Serial.print("Resp:");
for (n=0;n<4;n++)
{
hexprt(txbuf[n]);
Serial.print(" ");
}
Serial.println();
}
void txpac(byte dest, byte comando, byte dato)
{
txbuf[0]=dest;
txbuf[1]=mitt;
txbuf[2]=comando;
txbuf[3]=dato;
digitalWrite(txctl,HIGH);
mySerial.write(txbuf,4);
digitalWrite(txctl,LOW);
prttx();
}
void cmddecode()
{
int n;
prtrx();
if (rxbuf[0]==mitt)
{
switch(rxbuf[2])
{
case 1:
pinMode(rxbuf[3],OUTPUT);
digitalWrite(rxbuf[3],HIGH);
break;
case 2:
pinMode(rxbuf[3],OUTPUT);
digitalWrite(rxbuf[3],LOW);
break;
case 3:
pinMode(rxbuf[3],INPUT_PULLUP);
rxbuf[3]=digitalRead(rxbuf[3]);
break;
}
txpac(rxbuf[1],rxbuf[2],rxbuf[3]);
}
br=0;
rcvd=false;
}
void loop() {
byte b;
if (mySerial.available()) {
b=mySerial.read();
if (!rcvd)
{
if ((millis()-t)>10)
{
rxbuf[0]=b;
br=1;
t=millis();
}
else
{
t=millis();
rxbuf[br]=b;
br++;
if (br>=4)
{
rcvd=true;
cmddecode();
}
}
}
}
}
#include <SoftwareSerial.h>
/* struttura pacchetto:
* destinatario
* mittente
* comando
* dato
*/
#define mitt 1 //mio indirizzo
#define wrdig 1 //Out digitale
#define rddig 2 //In digitale
#define txctl 2 //Uscita controllo TX
#define rxPin 10
#define txPin 11
unsigned long int t;
byte rxbuf[4];
bool rcvd=false;
bool waitresp=false;
byte br=0;
int seq=0;
SoftwareSerial mySerial(rxPin, txPin); // RX, TX
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
pinMode(txctl,OUTPUT);
pinMode(txPin,OUTPUT);
pinMode(rxPin,INPUT_PULLUP);
digitalWrite(txctl,LOW);
}
void hexprt(byte b)
{
if (b<16)
Serial.print("0");
Serial.print(b,HEX);
}
void txpac(byte dest, byte comando, byte dato)
{
int n;
byte txbuf[4];
txbuf[0]=dest;
txbuf[1]=mitt;
txbuf[2]=comando;
txbuf[3]=dato;
digitalWrite(txctl,HIGH);
mySerial.write(txbuf,4);
digitalWrite(txctl,LOW);
Serial.print("Req :");
for (n=0;n<4;n++)
{
hexprt(txbuf[n]);
Serial.print(" ");
}
Serial.println();
}
void cmddecode()
{
int n;
Serial.print("Resp:");
for (n=0;n<4;n++)
{
hexprt(rxbuf[n]);
Serial.print(" ");
}
Serial.println();
waitresp=false;
}
void rxresp()
{
byte b;
if (mySerial.available())
{
b=mySerial.read();
if (!rcvd)
{
rxbuf[br]=b;
br++;
if (br>=4)
{
rcvd=true;
cmddecode();
}
}
}
}
void loop()
{
if (waitresp)
{
rxresp();
if ((millis()-t)>100)
{
waitresp=false;
Serial.println("Time out!!!");
}
}
else
{
delay(500);
if (seq>1)
seq=0;
switch (seq)
{
case 0: txpac(2, 1, 13) ;break;
case 1: txpac(2, 2, 13) ;break;
//case 2: txpac(3, 1, 13) ;break;
//case 3: txpac(3, 2, 13) ;break;
}
seq++;
t=millis();
br=0;
rcvd=false;
waitresp=true;
}
}