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.