Comunicazione a distanza con scheda HC12

Ciao e buongiorno a tutti.

Come dicevo nel topic di presentazione i miei progetti sono per lo più ludici/modellistici e infatti in questo momento sto cercando di realizzare una pulsantiera WiFI per la gestione di scambi di trenini.

Ho passato settimane a spulciare tutta la documentazione riguardante la gestione della scheda HC12 da parte di Arduino prendendo come punto di partenza le varie discussioni su questo forum e leggendo tutti i link che contenevano.

Finalmente avendo un po' di tempo ho potuto dedicarmi alla preparazione dei vari pezzi, ho fatto i collegamenti scritto gli sketch e poi..... nulla (come mi aspettavo).

Conoscendo le mie lacune parto a piccoli passettini quindi non ho fatto interamente il programma come dovrà venire ma mi sono limitato a provare a mandare un segnale tra due arduino nano.

Ma veniamo alla sostanza.

Trasmettitore.
Hardware
Arduino Nano
Push Button collegato al pin D2 (e dall'altra parte ai pin +5V e GND con resistenza 10kohm)
Led collegato + al pin 12 e - al GND con resistenza 330ohm
HC12 collegata come segue:
Arduino pin +5V => HC12 VCC
Arduino pin GND => HC12 GND
Arduino pin 9 => HC12 RXD
Arduino pin 10 => HC12 TXD
Alimentazione tramite la presa USB di Arduino collegata o al PC o a una power bank

const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  12;      // the number of the LED pin
const int HCRX =  9;         // the number of the Arduino TX pin
const int HCTX =  10;        // the number of the Arduino RX pin

int buttonState = 0;         // variable for reading the pushbutton status

#include <SoftwareSerial.h> // Inclui a biblioteca Software Serial
SoftwareSerial HC12(HCRX,HCTX); // Create Software Serial Port



void setup() {
  Serial.begin(9600);                       // Open serial port to computer
  HC12.begin(9600);                         // Open serial port to HC12  
    
  pinMode(ledPin, OUTPUT);                  // initialize the LED pin as an output:
  pinMode(buttonPin, INPUT);                // initialize the pushbutton pin as an input:

  
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
  
  HC12.write(buttonState);
  Serial.println(buttonState);
}

Alimentando la scheda sembra fare quello che deve. Il led si accende quando premo il pulsante mentre sul monitor seriale leggo 0 (pulsante rilasciato) o 1 (pulsante premuto). Vedo anche che su Arduino si accende il led rosso integrato con scritto TX.

Ricevente
Hardware
Arduino Nano
Buzzer attivo collegato + al pin 12 e - al GND
Led collegato + al pin 12 e - al GND con resistenza 330ohm
HC12 collegata come segue:
Arduino pin +5V => HC12 VCC
Arduino pin GND => HC12 GND
Arduino pin 9 => HC12 RXD
Arduino pin 10 => HC12 TXD
Alimentazione tramite la presa USB di Arduino collegata o al PC o a una power bank

const int HCRX =  9;         // the number of the Arduino TX pin
const int HCTX =  10;        // the number of the Arduino RX pin

int buttonState = 0;         // variable for reading the pushbutton status

#include <SoftwareSerial.h> // Inclui a biblioteca Software Serial
SoftwareSerial HC12(HCRX,HCTX); // Create Software Serial Port





void setup() {
  Serial.begin(9600);                       // Open serial port to computer
  HC12.begin(9600);                         // Open serial port to HC12 
  pinMode(12, OUTPUT);                      // Dichiara PIN led
}


void loop() {
  while (HC12.available()) {
    buttonState = HC12.read();
    if (buttonState == 1) {
    digitalWrite(12, HIGH);                // turn the Led/Buzzer on (HIGH is the voltage level)
    } else {
    digitalWrite(12, LOW);                 // turn the Led/Buzzer off by making the voltage LOW
   }
  }

   
  
}

A questo punto però se avvio entrambi gli Arduino (a circa 3-4m di distanza) e premo il pulsante sul trasmettitore non succede nulla.
Collegando il ricevitore al Pc e monitorando tramite seriale sul video non succede nulla quindi suppongo che non riceva nulla (quindi l'istruzione while non è soddisfatta).

Sono abbastanza sicuro di aver sbagliato qualcosa a livello di sketch ma non capisco cosa.

Altra informazione che potrebbe essere d'aiuto. Le due schede HC sono gemelle. Nel senso che fanno parte di una scatola di 5 e sono semplicemente state aperte e montate dando per scontato che abbiano le stesse impostazioni di fabbrica.

Un grazie anticipato per l'aiuto.

Prova ad invertire i fili tx con rx tra arduino e hc12

Su tutte e due le coppie

Sicuro dei collegamenti?
Il TX del modulo HC12 va su quello che hai definito come RX della software serial, tu invece hai fatto esattamente il contrario.

Ops... mi sono sovrapposto.

Grandissimi.
Grazie mille.
Ho provato ad invertire e funziona.
La cosa strana è che avevo già provato ieri a invertirli, ma probabilmente in un attimo di sconforto lo avevo fatto solo su una breadboard.

In ogni caso ritengo che il mio problema in questo caso sia stato a livello di programmazione.
Ho interpretato male la stringa SoftwareSerial HC12(HCRX,HCTX) invertendo quindi la destinazione dei pin.

Adesso posso procedere ad implementare le altre parti del codice.

Capita spesso

Comunque non hai scambiato nulla, hai interpretato correttamente

È solo normale che il tx di un device vada sullo rx dell'altro