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.


 

381
Online

7.5k
Users

8.4k
Topics

90.4k
Posts