Trasmettitore Contatore WIFI


salve tutti, dopo un bel po' di tempo mi sono rimesso spippolare con arduino...

sono alle prese con un trasmettitore wi-fi ( nfr24l01+ )..

il mio progettino consiste in un trasmettitore che attiva in remoto un rele per tot volte ( contate ad ogni trasmissione ) al raggiungimento di un valore impostato in partenza il trasmettitore si blocca e il giocatore deve tornare farlo riattivare..

serve per un controllo di quante palline il giocatore usa.. troppe = rimessa di soldi per il gestore..

vado al nocciolo del problema..

ho composto il codice sbirciando vari esempi tra menù, keypad, lcd e rf24..

nel complesso funziona quasi tutto, ovvero:

il menù ( menwiz ) funziona egregiamente... fra l'altro ho cercato di utilizzare la tastiera prima per impostare il valore delle palline e successivamente per il conteggio e funziona...

lcd funziona...

keypad funziona...

contatore funziona.... 

il problema è che quando inserisco la riga per far trasmettere il codice alla ricevente si blocca il contatore e devo resettare l'arduino...

ho provato ad inserirla dentro lo switch... fuori... ovunque... ma niente!!!   :smiley-confuse:

vi allego lo sketch...

potreste dirmi dove sbaglio??

code: [select]
#include <nrf24l01.h>
#include <rf24.h>
#include <rf24_config.h>


#include <lcd.h>
#include <liquidcrystal.h>
#include <liquidcrystal_i2c.h>
#include <spi.h>
#include <wire.h>
#include <menwiz.h>
#include <eeprom.h>

#include <key.h>
#include <keypad.h>


    /* basato sull'esempio "yourduinostarter example: nrf24l01 transmit joystick values"
     http://arduino-info.wikispaces.com/nrf24l01-2.4ghz-howto
     http://www.danielealberti.it/2016/01/ricetrasmettitori-rf-per-arduino.html
     collegamenti del modulo rf24l01 ad arduino:
     1 - gnd
     2 - vcc 3.3v !!! not 5v
     3 - ce arduino pin 9
     4 - csn arduino pin 10
     5 - sck arduino pin 13
     6 - mosi arduino pin 11
     7 - miso arduino pin 12
     8 - unused
     */


// configurazione contatore

       # define sconta         12
       # define rele           13

       
       long valueimposta     = 0;
       long valueimposta1    = 0;
       int  valuesconta      = 0;
       int  lastvalueconta   = 0;
       int  lastvaluesconta  = 0;
       byte contaimpulsi     = 0;
 

// fine configurazione contatore

       
    #define ce_pin   10
    #define csn_pin 53
    const uint64_t pipe = 0xe8e8f0f0e1ll; // definisce il canale di trasmissione
    rf24 radio(ce_pin, csn_pin); // stabilisce la comunicazione
    int button1=6;
    int button2=7;
    int buttonstate1;
    int buttonstate2;
    int datatosend[1];
    char key = '0';

// keypad setup
const byte rows = 4; //four rows
const byte cols = 4; //four columns
//define symbols on buttons of keypads
char hexakeys[rows][cols] = {
  {'1', '2', '3', 'a'},
  {'4', '5', '6', 'b'},
  {'7', '8', '9', 'c'},
  {'*', '0', '#', 'd'}
};
byte colpins[4] = {30, 31, 32, 33};
byte rowpins[4] = {34, 35, 36, 37};

//initialize instance of class newkeypad
keypad customkeypad = keypad( makekeymap(hexakeys), rowpins, colpins, rows, cols);

liquidcrystal lcd( 22, 23, 24, 25, 26, 27);

//create global object menu , lcd
menwiz menu;

    //instantiate global variables bind menu
int      tp=0;
float    f=26.0;
boolean  bb=0;
byte     b=50;


    void setup() 
    {
      radio.begin();
      radio.setpalevel(rf24_pa_min);
      radio.setdatarate(rf24_250kbps);
      radio.setchannel(123);
      radio.openwritingpipe(pipe);

      serial.begin(115200);

            pinmode(rele,     output );
            lcd.begin(16, 2);   

  _menu *r,*s1,*s2;
  _var *v;
  int  mem;

  mem=menu.freeram();
 
  // inizialize menu object (20 colums x 4 rows)
  menu.begin(&lcd,16,2);

  //create menu tree
  r=menu.addmenu(mw_root,null,f("     menu"));              //create root menu @ first (required)
                                                        //...associated terminal node , bind app variable "f" of type float
        s2=menu.addmenu(mw_var,r,f("nr. tiratori"));        //add terminal node (that "variable");
         s2->addvar(mw_auto_int,&tp,50,50,1);         //create variable of type "int"...
         
             
        s1=menu.addmenu(mw_var,r,f("   salva dati"));           //add terminal node (that "variable") create "action" associated terminal node...
        s1->addvar(mw_action,savevar);                     //the act function default called when enter button pushed
        s1=menu.addmenu(mw_var,r,f("  carica dati"));        //add terminal node (that "variable") create "action" associated terminal node...
        s1->addvar(mw_action,loadvar);                     //the act function default called when enter button pushed

  menu.addusrnav(menukeys,4);

  menu.addusrscreen(conto,3000);               
     
    }
    void loop() 
    {

           menu.draw();     


}
 
void conto(){
  menu.drawusrscreen(menu.sbuf);
 
   static  char buf[7];
  strcpy(menu.sbuf,"conto piattelli"); //1st lcd line
  strcat(menu.sbuf,"\nlanciato-->");


      //-imposta il numero di pezzi ---
             valueimposta=(tp*25);
             valueimposta1 = (valueimposta);
     

 char key = customkeypad.getkey();

switch (key) {

    case no_key:
                datatosend[0] = 0;
               
break;               

    case '1':

                datatosend[0] = 1;
                     
           contaimpulsi = contaimpulsi + 1;

break;

    case '2':
                datatosend[0] = 2;
                     
           contaimpulsi = contaimpulsi + 1;
break;

    case '3':
              datatosend[0] = 3;
             
          contaimpulsi = contaimpulsi + 1;

break;

    case '4':
              datatosend[0] = 4;
             
         contaimpulsi = contaimpulsi + 1;
         
break;

    case '5':
   
              datatosend[0] = 5; 
                       
        contaimpulsi = contaimpulsi + 1;

break;

    case '6':

              datatosend[0] = 6;

        contaimpulsi = contaimpulsi + 1;           
     
break;
}
//     radio.write (datatosend, sizeof(datatosend)) ;  se tolgo il commento si blocca tutto....

                      lcd.setcursor(13, 1);
                      lcd.print(contaimpulsi);

                     
             
/*      //---------- decrementa con input su pin12 ----     
            valuesconta  = digitalread(sconta);
            if ( valuesconta != lastvaluesconta)
               { if ( valuesconta == high)
                    { contaimpulsi = contaimpulsi - 1;
                      lcd.setcursor(13, 1);
                      lcd.print(contaimpulsi);
                      serial.println(contaimpulsi);
                      delay(20);    }}// debouncetime
            lastvaluesconta = valuesconta;
 */
      /*---- -----confronto fra due dati --------
       se valore comntatore è uguale valore
      impostato eccita relè.at */
       
            if ( valueimposta1 == contaimpulsi)
               { digitalwrite(rele, high);
                 serial.println("rele on");

                 contaimpulsi = 0;
                 digitalwrite(rele, low);
                 lcd.clear();
                 delay(30);
                 while(1);}
                 
       


}

void savevar(){
  menu.writeeeprom();
  }
 
void loadvar(){
  menu.readeeprom();
  }

int menukeys() \\ 4 tasti che uso per impostare il numero delle palline
{
  char keypressed = customkeypad.getkey(); // read keypad see if key has been pressed
 
  switch (keypressed)
  {
    case no_key:
      return mw_btnull; // no key pressed
      break;
    case 'c':
      return mw_btd; // key 8 pressed direction down
      break;
    case 'b':
      return mw_btr; // key 6 pressed direction right
      break;
    case 'd':
      return mw_bte; // key * pressed escape
      break;
    case 'a':
      return mw_btc; // key # pressed confirm
      break;
  }
while(1);


}
   


premetto che le connessioni sono giuste ho fatto varie prove con l'esempio getting started della libreria rf24 e funzionano...

le alimentazioni sono giuste ( basetta per nrf24 ) e regolatore di tensione 5v.


sicuramente sono un tordo io, ma è una settimana che ci sbatto la testa e non riesco venirne capo...


vi ringrazio...

buona serata...

forse hai dimenticato &:

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


Arduino Forum > International > Italiano > Software (Moderator: leo72) > Trasmettitore Contatore WIFI


arduino

Comments

Popular posts from this blog

Valutazione Template - Joomla! Forum - community, help and support

SD Datastring Convention

First use of Arduino Uno : avrdude error on Blink uploading