Witam mam dwa kody. Jeden działa poprawnie (ten prosty) a ten z klasą robi co chce (raz miga raz nie , miga jak chce).
Na c++ za bardzo się nie znam i nie bardzo wiem jak tą funkcjonalność poprawnie zaimplementować do klasy.
kod działąkjący
#include <74HC595.h>
#include <Arduino.h>
// #include "FS.h"
// #include "SD.h"
// #include "SPI.h"
#include <Ticker.h>
CHIP_74HC595 chip;
Ticker timerRelayLed;
Ticker timerWifi;
Ticker timerSD;
Ticker timerReady;
Ticker timerError;
uint8_t chipPinArray [20] = {7,6,5,4,3,2,1,0,16,21,22,23,17,18,19,20,8,13,14,15};
#define l1 chipPinArray[0]
//... tu jest cala tablica to jest malo wazne
void blinkWifi(){
static boolean c = 0;
if(c==0){chip.switchPin(d2,ON); c=1;}else{chip.switchPin(d2,OFF); c=0; }
}
void blinkRelay(){
static uint8_t a = 8;
static boolean c = 0;
if(c==0){chip.switchPin(chipPinArray[a],ON); c=1;}else{chip.switchPin(chipPinArray[a],OFF); c=0;a++;if(a>15){a=8;}; }
}
void blinkSD(){
static int c = 0;
if(c==0){chip.switchPin(d4,ON); c=1;}else{chip.switchPin(d4,OFF); c=0; }
}
void blinkError(){
static int c = 0;
if(c==0){chip.switchPin(d1,ON); c=1;}else{chip.switchPin(d1,OFF); c=0; }
}
void blinkReady(){
static int c = 0;
if(c==0){chip.switchPin(d3,ON); c=1;}else{chip.switchPin(d3,OFF); c=0; }
}
void setup() {
chip.init(27,26,25,33,3);
timerRelayLed.attach(0.1, blinkRelay);
timerWifi.attach(0.1, blinkWifi);
timerSD.attach(0.1, blinkSD);
timerError.attach(0.1, blinkError);
timerReady.attach(0.1, blinkReady);
}
void loop() {
}
kod do poprawy
#include <74HC595.h>
#include <Ticker.h>
CHIP_74HC595 chip;
uint8_t chipPinArray [20] = {7,6,5,4,3,2,1,0,16,21,22,23,17,18,19,20,8,13,14,15};
#define l1 chipPinArray[0]
//... tu jest cala tablica to jest malo wazne
class Blinker : Ticker {
Ticker t;
public:
void on(){chip.switchPin(led,ON);}
void off(){chip.switchPin(led,OFF);}
void blinkStart(float time){t.attach(time, +[](Blinker* f){f->blink();},this); }
Blinker* blinkStop(){t.detach();return this; }
Blinker(uint8_t l){led = l;}
Blinker(uint8_t a[]){arr = a;}
private:
uint8_t led ;
uint8_t* arr;
void blink(){static boolean c = 0;if(c==0){chip.switchPin(led,ON); c=1;}else{chip.switchPin(led,OFF); c=0; }return;}
};//end class
Blinker errorLed(d1);
Blinker wifiLed(d2);
Blinker readyLed(d3);
Blinker kartaLed(d4);
void setup() {
chip.init(27,26,25,33,3);
errorLed.blinkStart(0.1);
wifiLed.blinkStart(0.1);
readyLed.blinkStart(0.1);
kartaLed.blinkStart(0.1);
//w tym przypadku diody wogole nie migaja
}
void loop() {
//delay(15000);
// wifiLed.blinkStop()->off();
}