S_INFO NODE with OLED Display - Solved -



  • Hi, this is my code for writing Text to the oled display.
    Controller is ioBroker and so far everything is working, but... I like to place multiple lines to the display using V_VAR1 - V_VAR5. How to use them?
    And do i need a ACK Command?

    Thanks for you help, sorry this is my first "self made" node.

    /**
     * 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.1 - Thorsten Böttcher
     * 
     * DESCRIPTION
     * Example sketch showing how to send messages to 0,96" OLED Display
     * 
     * ****************************
     * 
     *       OLED                 ARDUINO
     *  -----1234-----
     *  |            |  1 ->    3,3 V
     *  |            |  2 ->    GND
     *  |            |  3 -> A5 SCL
     *  |            |  4 -> A4 SDA
     *  --------------
     *  
     *  OLED ASCII Library from https://github.com/greiman/SSD1306Ascii
     *  
     */
     
    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    
    // Enable and select radio type attached
    //#define MY_RADIO_NRF24
    #define MY_RADIO_RFM69
    
    #include <SPI.h>
    #include <MySensors.h> 
    
    #define CHILD_ID 0
    
    //oled display 
    #include "SSD1306Ascii.h"
    #include "SSD1306AsciiAvrI2c.h"
    #define I2C_ADDRESS 0x3C
    SSD1306AsciiAvrI2c oled;
    
    // SketchInfo
    static const char SketchName[]    ="Info Display";
    static const char SketchVersion[] ="1.1";
    int PosX     = 0;
    int PosY     = 0;
    int ClrScr   = 0;
    int FontSize = 1;
    
    // loop
    static const uint64_t UPDATE_INTERVAL = 60000;
    
    MyMessage msgText (CHILD_ID, V_TEXT); // Text
    MyMessage msgVar1 (CHILD_ID, V_VAR1); // Cursor PosX
    MyMessage msgVar2 (CHILD_ID, V_VAR2); // Cursor PosY
    MyMessage msgVar3 (CHILD_ID, V_VAR3); // Clear Screen
    MyMessage msgVar4 (CHILD_ID, V_VAR4); // FontSize
    MyMessage msgVar5 (CHILD_ID, V_VAR5); // Not Used
    
    void setup()  
    {  
      Serial.println("starting...");
      ShowInfo();
    }
    
    void presentation()  {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo(SketchName, SketchVersion);
      present(CHILD_ID, S_INFO);
    }
    
    void receive(const MyMessage &mymessage)
    {
     if (mymessage.type==V_TEXT) {
       DisplayMessage(mymessage.getString());
      }
     if (mymessage.type==V_VAR1) {
       PosX = atoi(mymessage.getString());
      } 
     if (mymessage.type==V_VAR2) {
        PosY = atoi(mymessage.getString());
      } 
     if (mymessage.type==V_VAR3) {
        ClrScr=atoi(mymessage.getString());
        if ( ClrScr > 0 )
          oled.clear();
      } 
     if (mymessage.type==V_VAR4) {
        oled.set1X();
        FontSize=atoi(mymessage.getString());
        if ( FontSize > 1 )
          oled.set2X();
      } 
    }
    
    void loop()     
    {     
     
      // Wait, but receive messages
      wait(UPDATE_INTERVAL); 
    }
    
    
    void ShowInfo()
    {
      oled.begin(&Adafruit128x64, I2C_ADDRESS);
      oled.setFont(Arial14);  
     
      oled.setFont(Arial14);
      oled.set1X();
      oled.setCursor(20,1);
      oled.write("* MySensors 2.0 *");
      oled.setCursor(30,3);
      oled.write(SketchName);
      oled.write(" ");
      oled.write(SketchVersion);
      oled.setCursor(30,5);
      oled.write("NodeID");
      oled.write(" ");
      oled.print(getNodeId());
      sleep(3000); 
      oled.clear();
    }
    
    void DisplayMessage(const char Message[])
    {
      oled.setCursor(PosX,PosY);
      oled.clearToEOL ();
      oled.write(Message);
    }
    

  • Hardware Contributor

    @awi got some examples in Domoticz: https://forum.mysensors.org/topic/1957/lcd-clock-and-text-sensor-node-with-new-v_text I dont know how this works in ioBroker with v_var though.



  • Hi sundberg84, using 5 Nodes was my first idea. But i want to use V_VAR1...
    But you solved me problem indirecty. I installed MYSController and...the code (updated above) is correct.
    Looks like ioBroker is my problem.

    Thanks for your help Thorsten



  • Made small update .....X,Y Pos Fontsize...


Log in to reply
 

318
Online

6.7k
Users

7.6k
Topics

80.3k
Posts

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