NRF24L01 (aiuto)

buon giorno.

ho un problema con il seguente codice.

devo trasmettere un messaggio ogni volta che un determinato pulsante viene premuto, e se vengono premuti più pulsanti insieme devo trassmettere un messaggio diverso.

ora il problema è che quando premo 2 pulsanti insieme oltre al messaggio asseniato invia anche i messaggi dei 2 pulsanti separati.

ho provato varie soluzzioni, ma continua ad inviare 3 mesaggi in sequenza.

grazie in anticipo

saluti Alessandro

#include <SPI.h>
#include “nRF24L01.h”
#include “RF24.h”

int msg[1];

RF24 radio(10,9);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int SW1 = 7;
int SW2 = 6;
int SW3 = 5;
int SW4 = 8;

void setup(void){
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);}

void loop(void){
if (digitalRead(SW1) == HIGH){
msg[0] = 111;
radio.write(msg, 1);}

if (digitalRead(SW2) == HIGH){
msg[0] = 112;
radio.write(msg, 1);}

if (digitalRead(SW3) == HIGH){
msg[0] = 113;
radio.write(msg, 1);}

if (digitalRead(SW4) == HIGH){
msg[0] = 114;
radio.write(msg, 1);}

if (digitalRead(SW2) == HIGH)
if (digitalRead(SW3) == HIGH){
msg[0] = 115;
radio.write(msg, 1);}

if (digitalRead(SW1) == HIGH)
if (digitalRead(SW4) == HIGH){
msg[0] = 116;
radio.write(msg, 1);}

if (digitalRead(SW2) == HIGH)
if (digitalRead(SW4) == HIGH){
msg[0] = 117;
radio.write(msg, 1);}

if (digitalRead(SW1) == HIGH)
if (digitalRead(SW3) == HIGH){
msg[0] = 118;
radio.write(msg, 1);}
}

radio_comando.ino (951 Bytes)

risolto!!

grazie comunque e scusate il disturbo

mi si è accesa la lampadina è così

#include <SPI.h>
#include “nRF24L01.h”
#include “RF24.h”

int msg[1];

RF24 radio(10,9);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int SW1 = 7;
int SW2 = 6;
int SW3 = 5;
int SW4 = 8;

void setup(void){
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);}

void loop(void){
if (digitalRead(SW1) == HIGH&digitalRead(SW2) == LOW&digitalRead(SW3) == LOW&digitalRead(SW4) == LOW){
msg[0] = 111;
radio.write(msg, 1);}

if (digitalRead(SW2) == HIGH&digitalRead(SW1) == LOW&digitalRead(SW3) == LOW&digitalRead(SW4) == LOW){
msg[0] = 112;
radio.write(msg, 1);}

if (digitalRead(SW3) == HIGH&digitalRead(SW2) == LOW&digitalRead(SW1) == LOW&digitalRead(SW4) == LOW){
msg[0] = 113;
radio.write(msg, 1);}

if (digitalRead(SW4) == HIGH&digitalRead(SW2) == LOW&digitalRead(SW3) == LOW&digitalRead(SW1) == LOW){
msg[0] = 114;
radio.write(msg, 1);}

if (digitalRead(SW3) == HIGH&digitalRead(SW2) == HIGH&digitalRead(SW1) == LOW&digitalRead(SW4) == LOW){
msg[0] = 115;
radio.write(msg, 1);}

if (digitalRead(SW4) == HIGH&digitalRead(SW1) == HIGH&digitalRead(SW3) == LOW&digitalRead(SW2) == LOW){
msg[0] = 116;
radio.write(msg, 1);}

if (digitalRead(SW4) == HIGH&digitalRead(SW2) == HIGH&digitalRead(SW3) == LOW&digitalRead(SW1) == LOW){
msg[0] = 117;
radio.write(msg, 1);}

if (digitalRead(SW3) == HIGH&digitalRead(SW1) == HIGH&digitalRead(SW2) == LOW&digitalRead(SW4) == LOW){
msg[0] = 118;
radio.write(msg, 1);}
}

**@tabo48: **ti ricordo che in conformità al regolamento, punto 7, devi editare (in basso a destra del post, bottone More → Modify) il tuo post e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra).

Guglielmo

  1. ma se devi tenere conto delle doppie allora ti mancano 2 casi, i casi sono sei
    1 con gli altri 2 = 3 casi
    2 con altri 2 = 2 casi
    1 con il rimanente = 1 caso in tutto 6 casi

  2. se costruisci una tabella di verità, oghi pulsante un bit di un valore a 4 bit, accorci il programma.
    Il bit 0 è SW1, bit 3 SW4 le coppie che non hai considerato li ho messi come 119 e 120

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

const uint64_t pipe = 0xE8E8F0F0E1LL;
const byte SW1 = 7;  
const byte SW2 = 6;
const byte SW3 = 5;
const byte SW4 = 8;
// indice         0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15
// indice bits 0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1110,1100,1101,1111
byte tab[16]={    0, 111, 112, 119, 113, 118, 115,   0, 114, 116, 117,   0,   0, 120,   0,   0};
int msg[1];
RF24 radio(10,9);

void setup(void)
{ delay(1000);
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(pipe);
}

void loop(void)
{ byte val=0;                        // 4 bit = 3 2 1 0
  bitWrite(val,0,digitalRead(SW1));  //               X
  bitWrite(val,1,digitalRead(SW2));  //             X 
  bitWrite(val,2,digitalRead(SW3));  //           X  
  bitWrite(val,3,digitalRead(SW4));  //         X
  // valore da 0 a 15   4 bit = 4^2
  if(tab[val]!=0)
  { msg[0] = tab[val];
    radio.write(msg, 1);
  }  
}

gpb01:
**@tabo48: ** ti ricordo che in conformità al regolamento, punto 7, devi editare (in basso a destra del post, bottone More → Modify) il tuo post e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra).

Guglielmo

si scusami è un pò che non posto
chiedo scusa…

nid69ita:

  1. ma se devi tenere conto delle doppie allora ti mancano 2 casi, i casi sono sei
    1 con gli altri 2 = 3 casi
    2 con altri 2 = 2 casi
    1 con il rimanente = 1 caso in tutto 6 casi

  2. se costruisci una tabella di verità, oghi pulsante un bit di un valore a 4 bit, accorci il programma.
    Il bit 0 è SW1, bit 3 SW4 le coppie che non hai considerato li ho messi come 119 e 120

#include <SPI.h>

#include “nRF24L01.h”
#include “RF24.h”

const uint64_t pipe = 0xE8E8F0F0E1LL;
const byte SW1 = 7;  
const byte SW2 = 6;
const byte SW3 = 5;
const byte SW4 = 8;
// indice         0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15
// indice bits 0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1110,1100,1101,1111
byte tab[16]={    0, 111, 112, 119, 113, 118, 115,   0, 114, 116, 117,   0,   0, 120,   0,   0};
int msg[1];
RF24 radio(10,9);

void setup(void)
{ delay(1000);
 Serial.begin(9600);
 radio.begin();
 radio.openWritingPipe(pipe);
}

void loop(void)
{ byte val=0;                        // 4 bit = 3 2 1 0
 bitWrite(val,0,digitalRead(SW1));  //               X
 bitWrite(val,1,digitalRead(SW2));  //             X
 bitWrite(val,2,digitalRead(SW3));  //           X  
 bitWrite(val,3,digitalRead(SW4));  //         X
 // valore da 0 a 15   4 bit = 4^2
 if(tab[val]!=0)
 { msg[0] = tab[val];
   radio.write(msg, 1);
 }  
}




si grazie glia altri due non mi servono comunque la tua è più giusta 
saluti alessandro