NRF24L01 does not work on scene controller



  • Hello!
    I'm new on Mysensors forum. I have and Arduino Mega 2560 and NRF24L01 radio conecter on pins 14 for SCK, 15 for MOSI, 16 for MISO, 17 for CE and 18 for CS. I Have a LIL9481 display configured in the sketchs as CTE32HR on pins 38, 39, 40, 41. The problem is when I boot the program it just does not show anything on the display. I attach the sketck I have so far. Please check it and tell me what can be wrong and how to get the "SceneController" to be displayed. I apologize if the topic is not in the right place, please put it where it should go. Thanks in advance.

    Sketch code:

    /**
     * The MySensors Arduino library handles the wireless radio link and protocol
     * between your home built sensors/actuators and HA controller of choice.
     * The sensors forms a self healing radio network with optional repeaters. Each
     * repeater and gateway builds a routing tables in EEPROM which keeps track of the
     * network topology allowing messages to be routed to nodes.
     *
     * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
     * Copyright (C) 2013-2015 Sensnology AB
     * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
     *
     * Documentation: http://www.mysensors.org
     * Support Forum: http://forum.mysensors.org
     *
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * version 2 as published by the Free Software Foundation.
     *
     *******************************
     *
     * REVISION HISTORY
     * Version 1.0 - Henrik Ekblad
     * 
     * DESCRIPTION
     * http://www.mysensors.org/build/scene_controller
     * Touch Display Scene Controller build using a touch enabled tft display
     * attached to a ATMega 2560. This example fetches time from controller and sends
     * in scene commands to the controller. 
     * Short press sends V_SCENE_ON and long press (>0.5sec) sends V_SCENE_OFF.
     *
     * Henrik Ekblad <henrik.ekblad@mysensors.org>
     *
     * This example uses:
     * UTFT library: http://www.henningkarlsen.com/electronics/library.php?id=51
     * Convert your own images here: http://www.henningkarlsen.com/electronics/t_imageconverter565.php
     *
     * The 3v3 output on the ATMega2560 is especially bad. I had to use a step down 
     * on the 5V output to get solid transmissions.
     * 
     *
     * Connect radio 
     * ----------------------------------
     * Radio               Arduino Pin
     * ----------------------------------
     * GND                 GND  
     * 5V  -> Step down -> 3V3   (see buying guide for help finding step-down)
     * SCK                 14 
     * MOSI                15 
     * MISO                16 
     * CE                  17   
     * CSN                 18
     *
     */
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    
    // Enable soft spi as radio has a hard time sharing spi 
    #define MY_SOFTSPI
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    #include <TimeLib.h> 
    #include <SPI.h>
    #include <MySensors.h>  
    #include <stdarg.h>
    #include <UTFT.h>
    #include <UTouch.h>
    #include <UTFT_Buttons.h>
    #include <avr/pgmspace.h>
    #include "arial_bold.c"
    #include "ArialNumFontPlus.c"
    #include "logo.c"
    
    #define CHILD_ID 1
    
    int LONG_PRESS = 500; // Number of millisecons to trinnger scene off for button push
    int RESEND_DEBOUNCE = 2000; // Number of millisecons interval between sending of same 
                                // scene number again. 
                                // This is used to avoid unwanted re-trigger when using 
                                // a sensetive touch diplay.
    
    // Add your buttons here. Max is 5 if you still want time at the top.
    char *buttons[] = {
        (char *)"Good Morning", 
        (char *)"Clean Up!", 
        (char *)"All Lights Off", 
        (char *)"Music On/Off"
      };
    
    const int buttonCount = sizeof(buttons)/sizeof(char *);
    const int padding = 10;
    const int topBarHeight = 60;
    
    MyMessage on(CHILD_ID, V_SCENE_ON);
    MyMessage off(CHILD_ID, V_SCENE_OFF);
    UTFT myGLCD(CTE32HR,38,39,40,41);
    UTouch  myTouch( 6, 5, 4, 3, 2);
    UTFT_Buttons  myButtons(&myGLCD, &myTouch);
    bool timeReceived = false;
    unsigned long lastTimeUpdate=0, lastRequest=0;
    char timeBuf[20];
    
    
    void setup()  
    { 
      Serial.println("***setup****");
      myGLCD.InitLCD();
      myGLCD.clrScr();
      myGLCD.setFont((uint8_t*)ArialNumFontPlus);
      myGLCD.setColor(100, 255, 100);
      myGLCD.setBackColor(0, 0, 0);
      myGLCD.drawBitmap (0, 0, 60, 60, (unsigned int*)logo);
    
      myTouch.InitTouch();
      myTouch.setPrecision(PREC_MEDIUM);
    
      myButtons.setButtonColors(VGA_WHITE, VGA_GRAY, VGA_WHITE, VGA_RED, VGA_BLUE);
      myButtons.setTextFont((uint8_t*)arial_bold);
      int height = (myGLCD.getDisplayYSize()-topBarHeight-(padding*(buttonCount+2)))/buttonCount;
    
      // Add buttons
      for (int i=0; i<buttonCount;i++) {
        int y = topBarHeight + padding+(i*(height+padding));
        myButtons.addButton( padding, y, myGLCD.getDisplayXSize()-padding*2, height, buttons[i]);
      }
      myButtons.drawButtons();
    
      // Request time from controller. 
      requestTime();
    
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("Scene Ctrl", "1.0");
      present(CHILD_ID, S_SCENE_CONTROLLER);
       
    }
    
    void presentation()  {
    
       Serial.println("***presentation****");
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("Scene Ctrl", "1.0");
      present(CHILD_ID, S_SCENE_CONTROLLER);
    }
    
    
    int lastPressedButton = -1;
    unsigned long lastPressedButtonTime = 0;
    
    void loop()      
    { 
      unsigned long now = millis();
    
       Serial.println("***loop****");
    
      if (myTouch.dataAvailable()) {
        int pressedButton = myButtons.checkButtons();
    
        if (pressedButton>=0) {
          bool longPress = millis()-now>(unsigned long)LONG_PRESS;
    
          if (pressedButton != lastPressedButton || now-lastPressedButtonTime > (unsigned long)RESEND_DEBOUNCE) {
            if (longPress) {
              send(off.set(pressedButton));
              Serial.print("Long pressed: ");
            } else {
              send(on.set(pressedButton));
              Serial.print("Pressed: ");    
            }
            Serial.println(pressedButton);    
            lastPressedButton = pressedButton;    
            lastPressedButtonTime=now;  
          }
        }
      }
    
      // If no time has been received yet, request it every 10 second from controller
      // When time has been received, request update every hour
      if ((!timeReceived && now-lastRequest > (unsigned long)10*1000)
        || (timeReceived && now-lastRequest > (unsigned long)60*1000*60)) {
        // Request time from controller. 
        Serial.println("requesting time");
        requestTime();  
        lastRequest = now;
      }
    
      // Update time every second
      if (timeReceived && now-lastTimeUpdate > 1000) {
        printTime();  
        lastTimeUpdate = now;
      }
    }
    
    
    
    // This is called when a new time value was received
    void receiveTime(unsigned long time) {
      Serial.println("***recive****");
      
      // Ok, set incoming time 
      setTime(time);
      timeReceived = true;
    }
    
    void printTime() {
      sprintf(timeBuf, "%02d:%02d:%02d", hour(), minute(), second());
      myGLCD.print(timeBuf, 60,7);
    }
    


  • @Jean-Pierre-Rojas-Vanegas
    I already found a solition. By default, the MyConfig.h library sets CE, CS, to pins 9, 10, respectively. I simply have to manually set CE and CS on pins 17 and 18. When I connect the gateway, it assigns me an ID and shows me the image on the display.


Log in to reply
 

Looks like your connection to MySensors Forum was lost, please wait while we try to reconnect.