Buongiorno a tutti, ho una situazione che non riesco a spiegarmi, e vorrei avere elucidazioni in merito.
Ho due apparati HC-12 dove il primo trasmette una sillaba al secondo, e fin qui nessun problema.
La ricezione mi viene però ripetuta 3 volte; qualcuno mi sa dire il perché???
Allego gli sketch ed il risultato della trasmissione.
TX
#include <SoftwareSerial.h>
SoftwareSerial HC12(52, 50); // HC-12 TX Pin, HC-12 RX Pin CORRETTO
const int v_ON = A0;
const int v_t1 = 18; //
const int v_t2 = 17; // 2 turni
const int v_t3 = 16; // 1 turno
const int v_prova = 15;
const int v_2min = 14;
const int v_3f = 19;
const int v_6f = 20;
const int p_verde = A15;
const int p_giallo = A14;
const int p_rosso = A13;
int nr1 = 0; // on/off
int nr2 = 0; // avviso
int nr3 = 0; // prova
int nr4 = 0; // volee 3 o 6
int nr5 = 0; // turni 1, 2 o 3
int nr6 = 0; // recupero da 1 a 6
int nr7 = 0; // pulsanti
long v_gara = 0;
char stato ;
char stringa = 'e';
int v_alt = 0;
int v_diretto = 0;
char stato_old ;
void setup() {
pinMode(v_3f, INPUT); // volee di 3 frecce
pinMode(v_6f, INPUT); // volee di 6 frecce
pinMode(v_ON, INPUT); // accende i tabelloni
pinMode(v_prova, INPUT); // prevede una volee di prova
pinMode(v_2min, INPUT); // prevede l'avviso di 2 minuti
pinMode(v_t1, INPUT);
pinMode(v_t2, INPUT);
pinMode(v_t3, INPUT);
pinMode( p_verde, INPUT);
pinMode( p_giallo, INPUT);
pinMode( p_rosso, INPUT);
Serial.begin(9600);
HC12.begin(9600);
}
void loop() {
/* controllo dei valori di gara*/
if (digitalRead(v_ON) == LOW) {
nr1 = 2;
} else {
nr1 = 1;
// digitalWrite(v_LedOn, HIGH);
}
if (digitalRead(v_2min) == HIGH) {
nr2 = 1;
} else {
nr2 = 0;
}
if (digitalRead(v_prova) == HIGH) {
nr3 = 1;
} else {
nr3 = 0;
}
if ((digitalRead(v_3f) == LOW) && (digitalRead(v_6f) == HIGH)) {
nr4 = 1;
} else if ((digitalRead(v_3f) == HIGH) && (digitalRead(v_6f) == LOW)) {
nr4 = 2;
}
if ((digitalRead(v_t1) == HIGH) && (digitalRead(v_t2) == LOW) && (digitalRead(v_t3) == LOW)) {
nr5 = 3; // O.R.
} else if ((digitalRead(v_t1) == LOW) && (digitalRead(v_t2) == HIGH) && (digitalRead(v_t3) == LOW)) {
nr5 = 2; // 2 turni
} else if ((digitalRead(v_t1) == LOW) && (digitalRead(v_t2) == LOW) && (digitalRead(v_t3) == HIGH)) {
nr5 = 1; // 1 turno
} else {
nr5 = 0;
}
if (digitalRead(p_verde) == LOW) {
nr7 = 1; // Avvio
} else if (digitalRead(p_giallo) == LOW) {
nr7 = 2; // azzera
} else if (digitalRead(p_rosso) == LOW) {
nr7 = 3; // stop
}
v_gara = (nr1 * 10000) + (nr2 * 1000) + (nr3 * 100) + (nr4 * 10) + (nr5);
if ((v_gara == 10020) || (v_gara == 10010)) {
/*
stringa = 'd';
if (v_diretto == 0) {
HC12.println(stringa);
delay(100);
Serial.print("Trasmetto1: ");
Serial.println(stringa);
v_diretto = 1;
}
} else if (v_gara >= 20000) {
stringa = 'e';
if (v_diretto == 1) {
HC12.println(stringa);
delay(100);
Serial.print("Trasmetto2: ");
Serial.println(stringa);
v_diretto = 0;
}
} else if ((v_gara == 10011) && (nr6 == 0)) {
stringa = 'v';
}
trasmetti();
if (stato != stringa ) {
stato = stringa;
}
}
void trasmetti() {
if ((nr7 > 0) && (stringa != 'e')) {
if ((nr7 == 1) && (v_alt == 0)) {
HC12.println(stringa);
delay(100);
Serial.print("Trasmetto3: ");
Serial.println(stringa);
} else if ((nr7 == 2) && (v_alt == 0)) {
stringa = 'b';
HC12.println(stringa);
delay(100);
Serial.print("Trasmetto4: ");
Serial.println(stringa);
} else if ((nr7 == 3) && (v_alt == 0)) {
v_alt = 1;
stringa = 'c';
HC12.println(stringa);
delay(100);
Serial.print("Trasmetto5: ");
Serial.println(stringa);
} else if (v_alt == 1) {
if ((nr7 == 1) || (nr7 == 2)) {
stringa = 'a';
v_alt = 0;
HC12.println(stringa);
delay(100);
Serial.print("Trasmetto6: ");
Serial.println(stringa);
}
}
delay(250);
}
nr7 = 0;
}
RX
#include <SoftwareSerial.h>
SoftwareSerial HC12(2, 3); // RX, TX
const int p_verde = 4;
const int p_giallo = 5;
const int p_rosso = 6;
const int l_verde = 7;
const int l_giallo = 8;
const int l_rosso = 9;
const int l_ricevuto = 11;
const int l_acceso = 12;
char stringa2 = 'e';
int nr7 = 0; // pulsanti
int v_alt = 0;
void setup() {
Serial.begin(9600);
HC12.begin(9600);
Serial.println("** Ritrasmettitore per portatile **");
Serial.println("** Release 1.3 **");
Serial.println("** Ripetizione dell'ultimo comando **");
Serial.println("** Enrico Bianchetto - 03.03.19 **");
Serial.println("** Collegato a CodificaGara_9_5 **");
Serial.println("** Aggiunta spie pulsanti e blocco**");
pinMode(p_verde, INPUT);
pinMode(p_giallo, INPUT);
pinMode(p_rosso, INPUT);
pinMode(l_verde, OUTPUT);
pinMode(l_giallo, OUTPUT);
pinMode(l_rosso, OUTPUT);
pinMode(l_ricevuto, OUTPUT);
pinMode(l_acceso, OUTPUT);
digitalWrite(l_acceso, HIGH);
}
void loop() {
// riceve la codifica della stringa da inviare
if (HC12.available()>0 ) {
stringa2 = HC12.read();//read string
Serial.print(" Ricevuto2: ");
Serial.println(stringa2);
HC12.flush();
delay(100);
}
if (stringa2 != 'e') {
digitalWrite(l_ricevuto, HIGH);
if (digitalRead(p_verde) == HIGH) {
nr7 = 3; // Avvio
digitalWrite(l_verde, HIGH);
} else if (digitalRead(p_giallo) == HIGH) {
nr7 = 2; // azzera
digitalWrite(l_giallo, HIGH);
} else if (digitalRead(p_rosso) == HIGH) {
nr7 = 1; // stop
digitalWrite(l_rosso, HIGH);
}
if (nr7 > 0) {
Serial.print("nr7: ");
Serial.println(nr7);
trasmetti();
delay(250);
}
} else {
digitalWrite(l_ricevuto, LOW);
}
}
void trasmetti() {
if (nr7 > 0) {
if (nr7 == 1) {
/*
invia l'istruzione di avvio
*/
HC12.println(stringa2);
} else if (nr7 == 2) {
/*
azzera il tiner
*/
stringa2 = 'b';
HC12.println(stringa2);
} else if ((nr7 == 3) && (v_alt == 0)) {
/*
invia l'istruzione di STOP
*/
v_alt = 1;
stringa2 = 'c';
HC12.println(stringa2);
} else if (v_alt == 1) {
if ((nr7 == 1) || (nr7 == 2)) {
/*
invia l'istruzione di Ripresa gara
*/
stringa2 = 'a';
v_alt = 0;
HC12.println(stringa2);
}
}
delay(150);
Serial.print("Trasmesso: ");
Serial.println(stringa2);
}
delay(150);
nr7 = 0;
digitalWrite(l_verde, LOW);
digitalWrite(l_giallo, LOW);
digitalWrite(l_rosso, LOW);
}
ed ecco il risultato.
Enrico
Risultato.pdf (174 KB)