Nove ovladani preruseni, zprehledneni kodu.
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name":"SigLED",
 | 
					  "name":"SigLED",
 | 
				
			||||||
  "description":"Handle signalling LED easily",
 | 
					  "description":"Handle signalling LED easily",
 | 
				
			||||||
  "keywords":"signalling,indiaction,led",
 | 
					  "keywords":"signalling,indication,led",
 | 
				
			||||||
  "authors":
 | 
					  "authors":
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "name": "Pavel Brychta",
 | 
					    "name": "Pavel Brychta",
 | 
				
			||||||
@@ -10,9 +10,9 @@
 | 
				
			|||||||
  "repository":
 | 
					  "repository":
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "type": "git",
 | 
					    "type": "git",
 | 
				
			||||||
    "url": "http://git.xpablo.cz/xPablo.cz/SigLed"
 | 
					    "url": "https://git.xpablo.cz/xPablo.cz/SigLed"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "version": "1.0.1",
 | 
					  "version": "1.0.2",
 | 
				
			||||||
  "license": "MIT",
 | 
					  "license": "MIT",
 | 
				
			||||||
  "frameworks": "arduino",
 | 
					  "frameworks": "arduino",
 | 
				
			||||||
  "platforms": "*",
 | 
					  "platforms": "*",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
name=SigLED
 | 
					name=SigLED
 | 
				
			||||||
version=1.0.1
 | 
					version=1.0.2
 | 
				
			||||||
author=Pavel Brychta
 | 
					author=Pavel Brychta
 | 
				
			||||||
maintainer=Pavel Brychta
 | 
					maintainer=Pavel Brychta
 | 
				
			||||||
sentence=Handle signalling LED easily
 | 
					sentence=Handle signalling LED easily
 | 
				
			||||||
paragraph=Handle signalling LED easily
 | 
					paragraph=Handle signalling LED easily
 | 
				
			||||||
category=Other
 | 
					category=Other
 | 
				
			||||||
url=http://git.xpablo.cz/xPablo.cz/SigLed
 | 
					url=https://git.xpablo.cz/xPablo.cz/SigLed
 | 
				
			||||||
architectures=*
 | 
					architectures=*
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,26 +1,22 @@
 | 
				
			|||||||
// Obsluha LED signalizace
 | 
					// Obsluha LED signalizace
 | 
				
			||||||
#include <Arduino.h>
 | 
					 | 
				
			||||||
#include "SigLed.h"
 | 
					#include "SigLed.h"
 | 
				
			||||||
 | 
					#include <Arduino.h>
 | 
				
			||||||
 | 
					#include <CriticalSection.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SigLED::SigLED(int pin, int ledon, int ledoff)
 | 
					SigLED::SigLED(int pin, int ledon, int ledoff)
 | 
				
			||||||
{
 | 
					    : _pin(pin), _ledon(ledon), _ledoff(ledoff), _state(LS_NOTINITIALIZED)
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _pin = pin;
 | 
					void SigLED::rtLed()
 | 
				
			||||||
    _ledon = ledon;
 | 
					 | 
				
			||||||
    _ledoff = ledoff;
 | 
					 | 
				
			||||||
    _state = LS_NOTINITIALIZED;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void SigLED::rtLed(void)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (_state) {
 | 
					    switch (_state) {
 | 
				
			||||||
        case LS_RUN: {
 | 
					        case LS_RUN: {
 | 
				
			||||||
            uint8_t instr;
 | 
					            uint8_t instr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (NULL != _signal)
 | 
					            if (_signal)
 | 
				
			||||||
                instr = *_ptr; // instrukce
 | 
					                instr = *_ptr; // instrukce
 | 
				
			||||||
        else if (NULL != _psignal)
 | 
					            else if (_psignal)
 | 
				
			||||||
                instr = pgm_read_byte(_pptr);
 | 
					                instr = pgm_read_byte(_pptr);
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                instr = LEDS_STOP;
 | 
					                instr = LEDS_STOP;
 | 
				
			||||||
@@ -46,8 +42,7 @@ void SigLED::rtLed(void)
 | 
				
			|||||||
                    _pptr = _psignal;
 | 
					                    _pptr = _psignal;
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
    }
 | 
					        } break;
 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case LS_WAIT:
 | 
					        case LS_WAIT:
 | 
				
			||||||
            --_timer;
 | 
					            --_timer;
 | 
				
			||||||
@@ -63,7 +58,7 @@ void SigLED::rtLed(void)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SigLED::_init(void)
 | 
					void SigLED::prepare()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pinMode(_pin, OUTPUT);
 | 
					    pinMode(_pin, OUTPUT);
 | 
				
			||||||
@@ -76,38 +71,38 @@ void SigLED::set(const uint8_t *signal)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (LS_NOTINITIALIZED == _state)
 | 
					    if (LS_NOTINITIALIZED == _state)
 | 
				
			||||||
        _init();
 | 
					        prepare();
 | 
				
			||||||
    noInterrupts();
 | 
					
 | 
				
			||||||
 | 
					    CriticalSection cs;
 | 
				
			||||||
    _signal = signal;
 | 
					    _signal = signal;
 | 
				
			||||||
    _ptr = _signal;
 | 
					    _ptr = _signal;
 | 
				
			||||||
    _psignal = NULL;
 | 
					    _psignal = nullptr;
 | 
				
			||||||
    _state = LS_RUN;
 | 
					    _state = LS_RUN;
 | 
				
			||||||
    interrupts();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SigLED::set_P(PGM_P signal)
 | 
					void SigLED::set_P(PGM_P signal)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (LS_NOTINITIALIZED == _state)
 | 
					    if (LS_NOTINITIALIZED == _state)
 | 
				
			||||||
        _init();
 | 
					        prepare();
 | 
				
			||||||
    noInterrupts();
 | 
					
 | 
				
			||||||
 | 
					    CriticalSection cs;
 | 
				
			||||||
    _psignal = signal;
 | 
					    _psignal = signal;
 | 
				
			||||||
    _pptr = _psignal;
 | 
					    _pptr = _psignal;
 | 
				
			||||||
    _signal = NULL;
 | 
					    _signal = nullptr;
 | 
				
			||||||
    _state = LS_RUN;
 | 
					    _state = LS_RUN;
 | 
				
			||||||
    interrupts();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SigLED::start(void)
 | 
					void SigLED::setup()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (LS_NOTINITIALIZED == _state)
 | 
					    if (LS_NOTINITIALIZED == _state)
 | 
				
			||||||
        _init();
 | 
					        prepare();
 | 
				
			||||||
    noInterrupts();
 | 
					
 | 
				
			||||||
 | 
					    CriticalSection cs;
 | 
				
			||||||
    _ptr = _signal;
 | 
					    _ptr = _signal;
 | 
				
			||||||
    _pptr = _psignal;
 | 
					    _pptr = _psignal;
 | 
				
			||||||
    _state = LS_RUN;
 | 
					    _state = LS_RUN;
 | 
				
			||||||
    interrupts();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SigLED::lh(SigLED * ptr)
 | 
					void SigLED::lh(SigLED * ptr)
 | 
				
			||||||
@@ -116,3 +111,14 @@ void SigLED::lh(SigLED *ptr)
 | 
				
			|||||||
    SigLED * pled = ptr;
 | 
					    SigLED * pled = ptr;
 | 
				
			||||||
    pled->rtLed();
 | 
					    pled->rtLed();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SigLED::setInvert(bool invert)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (_invert != invert) {
 | 
				
			||||||
 | 
					        _invert = invert;
 | 
				
			||||||
 | 
					        int temp = _ledon;
 | 
				
			||||||
 | 
					        _ledon = _ledoff;
 | 
				
			||||||
 | 
					        _ledoff = temp;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										38
									
								
								src/SigLed.h
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								src/SigLed.h
									
									
									
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @file sigLed.h
 | 
					 * @file sigLed.h
 | 
				
			||||||
 * @author Pavel Brychta, http://www.xpablo.cz
 | 
					 * @author Pavel Brychta, http://www.xpablo.cz
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Copyright (c) 2015,16 Pavel Brychta. All rights reserved.
 | 
					 * Copyright (c) 2015,16,23 Pavel Brychta. All rights reserved.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * This library is free software; you can redistribute it and/or
 | 
					 * This library is free software; you can redistribute it and/or
 | 
				
			||||||
 * modify it under the terms of the GNU Lesser General Public
 | 
					 * modify it under the terms of the GNU Lesser General Public
 | 
				
			||||||
@@ -19,8 +19,7 @@
 | 
				
			|||||||
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
					 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#ifndef _SIGLED_H_
 | 
					#pragma once
 | 
				
			||||||
#define _SIGLED_H_
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <Ticker.h>
 | 
					#include <Ticker.h>
 | 
				
			||||||
#include <pgmspace.h>
 | 
					#include <pgmspace.h>
 | 
				
			||||||
@@ -32,17 +31,16 @@ enum {
 | 
				
			|||||||
    LEDS_RESTART = 0xc0
 | 
					    LEDS_RESTART = 0xc0
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SigLED
 | 
					class SigLED {
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  protected:
 | 
					  protected:
 | 
				
			||||||
    int _pin; // pin, na kterem je LED pripojena
 | 
					    int _pin; // pin, na kterem je LED pripojena
 | 
				
			||||||
    Ticker _handler; // obsluha LED signalizace
 | 
					    Ticker _handler; // obsluha LED signalizace
 | 
				
			||||||
    const uint8_t *_signal; // ukazatel na vzor signalizace
 | 
					    const uint8_t * _signal = nullptr; // ukazatel na vzor signalizace
 | 
				
			||||||
    PGM_P _psignal;
 | 
					    PGM_P _psignal = nullptr;
 | 
				
			||||||
    const uint8_t *_ptr; // ukazatel na aktualne zpracovavane misto v signalizaci
 | 
					    const uint8_t * _ptr = nullptr; // ukazatel na aktualne zpracovavane misto v signalizaci
 | 
				
			||||||
    PGM_P _pptr;
 | 
					    PGM_P _pptr = nullptr;
 | 
				
			||||||
    uint32_t _timer; // casovani
 | 
					    uint32_t _timer = 0; // casovani
 | 
				
			||||||
    int _ledon;
 | 
					    int _ledon;
 | 
				
			||||||
    int _ledoff;
 | 
					    int _ledoff;
 | 
				
			||||||
    enum {
 | 
					    enum {
 | 
				
			||||||
@@ -53,24 +51,14 @@ protected:
 | 
				
			|||||||
    } _state; // stav automatu
 | 
					    } _state; // stav automatu
 | 
				
			||||||
    bool _invert = false;
 | 
					    bool _invert = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void _init(void);
 | 
					    void prepare();
 | 
				
			||||||
 | 
					    static void lh(SigLED * ptr);
 | 
				
			||||||
 | 
					    void rtLed(); // vykonna metoda
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public:
 | 
					  public:
 | 
				
			||||||
    SigLED(int pin, int ledon, int ledoff);
 | 
					    SigLED(int pin, int ledon, int ledoff);
 | 
				
			||||||
    void set(const uint8_t * signal);
 | 
					    void set(const uint8_t * signal);
 | 
				
			||||||
    void set_P(PGM_P signal);
 | 
					    void set_P(PGM_P signal);
 | 
				
			||||||
    void start(void);
 | 
					    void setup();
 | 
				
			||||||
    void setInvert(bool invert)
 | 
					    void setInvert(bool invert);
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (_invert != invert) {
 | 
					 | 
				
			||||||
            _invert = invert;
 | 
					 | 
				
			||||||
            int temp = _ledon;
 | 
					 | 
				
			||||||
            _ledon = _ledoff;
 | 
					 | 
				
			||||||
            _ledoff = temp;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    static void lh(SigLED *ptr);
 | 
					 | 
				
			||||||
    void rtLed(void); // vykonna metoda
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user