Loading...
Pages: [1]   Go Down
Author Topic: Mega: supporto nRF24, rf315, lcd contemporaneo  (Read 178 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao ragassi,
allora vi spiego brevemente il mio problema: i luoghi:

-giardino, impianto fotovoltaico, circa a 600 metri da casa.
(arduino uno, serie di relè e sensori, trasmettitore nRF24, attuatore)

-casa con ricevitore dati, display lcd, tasto controllo attuatore, sensori, pompe a batteria).
(arduino mega, display, relè, sensori, ricevitore nRF24, trasmettitore a 315 mhz)

- router adsl che mi mette su server i dati
(arduino uno, ricevitore 315mhz, ethernet shield)

come avrete capito ogni luogo ha il suo arduino e la sua radio, più altri componenti specifici.

il mio scopo è quello di comunicare a distanza bidirezionale tra il capanno e casa con l'NRF24, visualizzare ed intervenire da casa, ed inoltre tra casa ed il router con il 315 mhz pubblicare i dati su internet.
fino alla aggiunta del trasmettitore a 315 mhz tutto funziona perfettamente

appena aggiungo il codice per operare sul trasmettitore a 315 mhz al mega, mi si impianta senza completare nemmeno 1 giro di loop. se invece carico solo la libreria tutto liscio.

l'"impiantaggio" è completo, mi si accende il display nero, nessun segno da seriale, tutto bloccato

possibilità che intravedo (vi prego di darmi la vostra):
1 - virtualwire incompatibile con RF24
2 - seriale a 57600 mi fa impazzire virtualwire(ma non dovrebbe usarlo)
3 - mettere nRF24 anche sull'arduino con la ethernet shield(credo impossibile perchè entrambi necessitano di SPI, e per fare diventare RF24 master o condividere l'SPI penso che servano tre lauree)
4 - ???

vi incollo il codice da paleolitico, risalente a quando  i calcolatori avevano gli occhiali di tartaruga sul naso, ed anche molto disordinato.
Code:
#include <VirtualWire.h> // trasmettitore a 315
#include <LiquidCrystal.h>
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

RF24 radio(49,53);
const uint64_t pipes[3] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0F0F0F3LL };
typedef enum { role_ping_out = 1, role_pong_back } role_e;
const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"};
role_e role;

LiquidCrystal lcd(12, 11, 7, 6, 5, 4);

//altra spazzatura tipo inizializzazione di una decina di variabili e quattro array


void setup(void) {
  // roba per il trasmettitore a 315 mhz. se la inserisco mi si blocca il tutto
    vw_set_tx_pin(TX_DIO_Pin);
  /* Set the transmit logic level (LOW = transmit for this
     version of module)*/
  vw_set_ptt_inverted(true);
   /* Transmit at 2000 bits per second */
  vw_setup(2000);    // Bits per sec
  
  da qui in poi è tutto codice testato, per il setup.....
  
  Serial.begin(57600);
  lcd.begin(16, 2);

    role = role_pong_back;
   printf_begin();
  printf("\n\rRF24/examples/pingpair/\n\r");
  printf("ROLE: %s\n\r",role_friendly_name[role]);  
  radio.begin();
  radio.setDataRate(RF24_250KBPS);
  radio.setRetries(15,15);
  radio.setPayloadSize(8);    
  radio.openWritingPipe(pipes[0]);    
  radio.openReadingPipe(1,pipes[1]);
  radio.openReadingPipe(2,pipes[2]);    
  radio.startListening();  
  radio.printDetails();
  }


// altra spazzatura per completare il setup......


void loop(void) {


// spazzatura di controllo relè, sensori, attuatori etc......


 // la radio trasmette la posizione che il modulo deve assumere - insomma un numero per un attuatore

   
radio.stopListening();
delay(5);

radio.write( &luce, sizeof(luce));

 delay(400);

// la radio ascolta lo stato del campo etc etc etc


  radio.startListening();
  delay(2000);
      while ( radio.available() )
    {delay(30);
      // Dump the payloads until we've gotten everything
      
     bool done = false;
      while (!done)
      {
        // Fetch the payload, and see if this was the last one.
        done =
        radio.read( &dato[0], sizeof(dato[0]));
       done =
       radio.read( &dato[1], sizeof(dato[1]));

        // Spew it

// Delay just a little bit to let the other unit
// make the transition to receiver
delay(5);
      }

// questo è il codice per il 315 mhz, testato su altra scheda (senza le altre librerie)funziona

  /* Temporarily holds the value read */
  unsigned int data;
  /* The transmit buffer that will hold the data to be
     transmitted. */
  byte TxBuffer[2];
  
// aggiungo: il ciclo for sta bene o va prima della definizione del buffer????


for (int i = 0; i < 5; i++) {
  data = valori[i];
      
       /* ...and store it as high and low bytes in the transmit
     buffer */
  TxBuffer[0] = data >> 8;
  TxBuffer[1] = data;
    /* Send the data (2 bytes) */
  vw_send((byte *)TxBuffer, 2);
  /* Wait until the data has been sent */
  vw_wait_tx(); }
      



« Last Edit: March 20, 2013, 06:34:31 am by federikk79 » Logged

0
Offline Offline
Tesla Member
***
Karma: 83
Posts: 8239
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la virtualwire va in casino con qualche altra libreria?
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Tuscany
Offline Offline
Edison Member
*
Karma: 20
Posts: 1054
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

a parte tutto, vedo un'incongruenza

Quote
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);

i pin 12 e 11 sono usati dalla SPI, sposta quelli del LCD su 9, 8
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

10/11 anche su mega2650?
io usavo con successo i pin attorno al 50 mi pare....
e poi... non capisco come l'aggiunta della radio sul 31 mi dia fastidio all'SPI del RF24.....
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 20
Posts: 1054
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sorry... non ci avevo fatto caso che era una Mega

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

io non ho capito perchè (e senza levarti il merito - enorme - che hai avuto, ma forse nemmeno tu), ma spostando i pin 12, 11 dell'lcd ai 26 e 28 funziona tutto.
non so perchè, davvero.
l'11 la radio non lo prende, perchè non è l'spi.
la radio AM a 315 usa il 31.
forse ci sarà qualcosa di default della libreria virtualwire che metteva qualche up all'11/12...cmq grazie, è perfetto ora!
Logged

Pages: [1]   Go Up
Print
 
Jump to: