Processing+Arduino+Moduli tx-rx 433MHz

Ciao a tutti,
mi stavo dilettando in un progetto che prevede il comando remoto di un led rgb tramite un'interfaccia di pulsanti su processing che attraverso seriale invia dati ad un primo arduino il quale a sua volta trasmette con un modulo tx a 433MHz un segnale recepito da un secondo arduino tramite modulo rx su cui si trova il led.
Questo è il codice scritto al momento del trasmettitore che utilizza la libreria RH_ASK.h:

#include <RH_ASK.h>
#include <SPI.h>

//TX default su pin 12
RH_ASK mod;

uint8_t buf[0];

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT); 
  pinMode(2, INPUT);
  if (!mod.init()) {
    Serial.println("init failed");
  }
  Serial.println("TX ok");
  buf[0] = 0;
}

unsigned long t1;

void loop(){
  
  if(Serial.available()){  //id data is available to read

    char val = Serial.read();
    }
  if ((millis() - t1) >= 300) {     //se supero 300ms posso inviare un altro dato
    Serial.println(buf[0]); 
    mod.send((uint8_t *)buf, 10);
    mod.waitPacketSent(); 
    }    
}

Alla variabile char val è associato il valore letto tramite seriale del pulsante premuto da processing e mi restituisce quindi r,g,b a seconda che io prema il pulsante rosso,verde o blu. Ora questo valore di val vorrei inviarlo tramite modulo Tx al secondo arduino con l'Rx ma non ho ben capito come fare infatti dall'esempio che ho visto invia un buf[0] ma io vorrei inviare il valore di val al secondo arduino.Il secondo arduino deve,tramite switch case,accendere i colori in base al dato ricevuto.Ora vi chiedo,come posso quindi inviare questa variabile val tra i due arduino?Vi ringrazio in anticipo

Buongiorno e benvenuto nella sezione Italiana del forum,

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE (... quello che vedi in blu è un link, fai click su di esso per raggiungere la discussione) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

Va bene,chiedo scusa per l'errore

... ma tu sai cosa fa questa riga?

Non credo che da dove hai preso l'esempio definissero l'array in quel modo :wink:

Se guardi il punto 16.1 del REGOLAMENTO trovi una serie di utili pdf ed un ottimo libro per ... cominciare ad avvicinarsi con più consapevolezza alla programmazione di Arduino :slight_smile:

Molto utile è anche il reference del linguaggio ...

Guglielmo

Vero
Probabilmente usavano byte al posto di unsigned int 8bit :laughing:

Innanzitutto grazie per aver risposto.
L'esempio che ho preso come riferimento accende un led sul secondo arduino mediante un pulsante che si trova sul primo arduino.Questo è il codice originale del trasmettitore da cui ho cercato di estrapolare le parti per la trasmissione:

/**
 * //aggiungere antenna da 17cm
 * 
 * http://www.airspayce.com/mikem/arduino/RadioHead/RadioHead-1.41.zip
 * 
 */
#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile

//TX default su pin 12
//RH_ASK mod(2000, 4, 5);
RH_ASK mod;
// https://www.airspayce.com/mikem/arduino/RadioHead/classRH__ASK.html
// http://www.airspayce.com/mikem/arduino/RadioHead/classRH__ASK.html
// RH_ASK driver(2000, 4, 5, 0); // ESP8266 or ESP32: do not use pin 11 or 2

uint8_t buf[10];

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT); 
  pinMode(2, INPUT);
  if (!mod.init()) {
    Serial.println("init failed");
  }
  Serial.println("TX ok");
  buf[0] = 0;
}

unsigned long t1;

void loop() {    
  if (digitalRead(2)) {
    buf[0] = 1;     
  } else {
    buf[0] = 0;  
  }
  digitalWrite(13, buf[0]);
  
  if ((millis() - t1) >= 300) {
    Serial.println(buf[0]); 
    mod.send((uint8_t *)buf, 10);
    mod.waitPacketSent();
    t1 = millis();  
  }   
}