Buongiorno a tutti,
dopo un lungo silenzio per la costruzione della parte Hard, mi ritrovo con un altro "problema" sulla parte soft.
Devo star commettendo un errore veramente stupido, in quanto, nonostante svariate ricerche e innumerevoli tentativi (ci lavoro da una settimana!!!) non riesco a venirne a capo.
In pratica devo inviare una istruzione a Arduino accendendo/spegnendo un interruttore (senza usare quindi la seriale).
Riesco ad inviare una prima volta il segnale ricaricando il programma, ma i successivi movimenti dell'interruttore (che "vedo" sulla seriale locale) non vengono trasmessi.
Qui di seguito i programmi (semplificati) scritti:
Trasmettitore
#include <SoftwareSerial.h>
SoftwareSerial HC12(52, 50); // HC-12 TX Pin, HC-12 RX Pin
byte values[] {
B10000001, //= 0
B11110011, //= 1
B01001001, //= 2
B01100001, //= 3
B00110011, //= 4
B00100101, //= 5
B00000101, //= 6
B11110001, //= 7
B00000001, //= 8
B00100001, //= 9
B10000000, // = 10
B11110010, // = 11
B01001000, // = 12
B11111111, //” “
B01111111, //g
B11111110
};
/*unità */
//Pin connected to ST_CP of 74HC595
int latchPinU = 6;
//Pin connected to SH_CP of 74HC595
int clockPinU = 7;
//Pin connected to DS of 74HC595
int dataPinU = 5;
/*decine */
//Pin connected to ST_CP of 74HC595
int latchPinD = 9 ;
//Pin connected to SH_CP of 74HC595
int clockPinD = 10;
////Pin connected to DS of 74HC595
int dataPinD = 8;
/*centinaia*/
//Pin connected to ST_CP of 74HC595
int latchPinC = 12;
//Pin connected to SH_CP of 74HC595
int clockPinC = 13;
//Pin connected to DS of 74HC595
int dataPinC = 11;
int stringa;
int nr1 = 0; // on/off
/* semaforo*/
const int v_semV = 26;
const int v_semR = 22;
const int v_semG = 24;
int v_cent = 13; // centinaia
int v_dec = 13; // decine
int v_unit = 13; // unità
/* costanti*/
const int v_ON = A5;
int S = 0; // semaforo
int v_Sem = 0;
int timer = 0;
void setup() {
pinMode(v_ON, OUTPUT); // accende i tabelloni
pinMode(v_semV, OUTPUT);
pinMode(v_semR, OUTPUT);
pinMode(v_semG, OUTPUT);
/* Blocco unità */
pinMode(latchPinU, OUTPUT);
pinMode(clockPinU, OUTPUT);
pinMode(dataPinU, OUTPUT);
/* Blocco decine */
pinMode(latchPinD, OUTPUT);
pinMode(clockPinD, OUTPUT);
pinMode(dataPinD, OUTPUT);
/* Blocco centinaia */
pinMode(latchPinC, OUTPUT);
pinMode(clockPinC, OUTPUT);
pinMode(dataPinC, OUTPUT);
digitalWrite(v_ON, HIGH);
Serial.begin (9600);
HC12.begin(9600);
}
void loop() {
/* controllo dei valori*/
if (analogRead(v_ON) < 1020) {
nr1 = 1;
} else {
nr1 = 2;
}
if (nr1 == 1) {
stringa = 4;
HC12.println(stringa);
delay (20);
HC12.println(stringa);
// accende il sistema
v_cent = 14; // centinaia
v_dec = 14; // decine
v_unit = 14; // unità
digitalWrite(latchPinU, LOW);
shiftOut(dataPinU, clockPinU, MSBFIRST, values[v_unit]);
digitalWrite(latchPinU, HIGH);
digitalWrite(latchPinD, LOW);
shiftOut(dataPinD, clockPinD, MSBFIRST, values[v_dec]);
digitalWrite(latchPinD, HIGH);
digitalWrite(latchPinC, LOW);
shiftOut(dataPinC, clockPinC, MSBFIRST, values[v_cent]);
digitalWrite(latchPinC, HIGH);
S = 3; // semaforo rosso
Semaforo();
} else if (nr1 == 2) {
stringa = 5;
HC12.println(stringa);
delay (20);
HC12.println(stringa);
//spegne il sistema
v_cent = 13; // centinaia
v_dec = 13; // decine
v_unit = 13; // unità
digitalWrite(latchPinU, LOW);
shiftOut(dataPinU, clockPinU, MSBFIRST, values[v_unit]);
digitalWrite(latchPinU, HIGH);
digitalWrite(latchPinD, LOW);
shiftOut(dataPinD, clockPinD, MSBFIRST, values[v_dec]);
digitalWrite(latchPinD, HIGH);
digitalWrite(latchPinC, LOW);
shiftOut(dataPinC, clockPinC, MSBFIRST, values[v_cent]);
digitalWrite(latchPinC, HIGH);
S = 4;
Semaforo();
}
}
void Semaforo() {
if (S == 1) {
if (digitalRead (v_semV) == 0) {
digitalWrite(v_semV, HIGH);
digitalWrite(v_semR, LOW);
digitalWrite(v_semG, LOW);
}
}
if ( S == 2) {
if (digitalRead (v_semG) == 0) {
digitalWrite(v_semG, HIGH);
digitalWrite(v_semR, LOW);
digitalWrite(v_semV, LOW);
}
}
if (S == 3) {
if (digitalRead (v_semR) == 0) {
digitalWrite(v_semR, HIGH);
digitalWrite(v_semV, LOW);
digitalWrite(v_semG, LOW);
}
}
if ( S == 4) {
digitalWrite(v_semG, LOW);
digitalWrite(v_semR, LOW);
digitalWrite(v_semV, LOW);
}
}
Ricevitore
#include <SoftwareSerial.h>
SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
int X ;
void setup() {
Serial.begin (9600);
HC12.begin(9600);
}
void loop() {
if (HC12.available() > 0) {
String input = HC12.readString();//read string
X = input.toInt(); //Convert to integer
Serial.println(X);
}
}
Qualcuno può aiutarmi?
Grazie anticipatamente.
Enrico
