Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Development
  3. NRF24L01 does not work on scene controller

NRF24L01 does not work on scene controller

Scheduled Pinned Locked Moved Development
2 Posts 1 Posters 690 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    Jean Pierre Rojas Vanegas
    wrote on last edited by mfalkvidd
    #1

    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);
    }
    
    J 1 Reply Last reply
    0
    • J Jean Pierre Rojas Vanegas

      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);
      }
      
      J Offline
      J Offline
      Jean Pierre Rojas Vanegas
      wrote on last edited by
      #2

      @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.

      1 Reply Last reply
      0
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      12

      Online

      11.7k

      Users

      11.2k

      Topics

      113.1k

      Posts


      Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
      • Login

      • Don't have an account? Register

      • Login or register to search.
      • First post
        Last post
      0
      • MySensors
      • OpenHardware.io
      • Categories
      • Recent
      • Tags
      • Popular