// Leggi il file README.md o meglio clicca sul tab Description
// accanto al tab Simulation
#include <LiquidCrystal.h>
#include <FastLED.h>
#define LED_PIN 2
#define NUM_LEDS 24
#define BRIGHTNESS 180
#define LED_TYPE WS2811
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
// I magic number non parlano
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // RS,EN,D4,D5,D6,D7
struct Blink {
uint8_t m_pin;
uint32_t m_t_ref;
uint8_t m_t_interval;
uint8_t m_t_intervalwb;
void set (uint8_t pin, uint8_t interval) {
m_pin = pin;
m_t_interval = interval;
pinMode(m_pin, OUTPUT);
}
void run () {
if (millis() - m_t_ref >= m_t_intervalwb) {
m_t_intervalwb = m_t_interval;
m_t_ref = millis();
digitalWrite(m_pin, !digitalRead(m_pin));
}
}
};
struct Blink blink;
struct ForNoFor
{
uint16_t index;
uint16_t endIndex;
uint8_t increment;
};
const char myString[] = "for senza for"; // stringa di esempio lunga 13 caratteri
// index endIndex increment
ForNoFor dataForA = { 0, 12, 1 };
// nota endIndex = len(myString) - 1
uint32_t refTime;
void funForA (ForNoFor *fnf) {
Serial.print( myString[ fnf->index ]);
fnf->index += fnf->increment;
if (fnf->index > fnf->endIndex) {
fnf->index = 0;
Serial.print('\n');
}
}
void setup() {
Serial.begin(115200);
// I magic number non parlano
pinMode(2, INPUT_PULLUP);
pinMode(3, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness( BRIGHTNESS );
//const uint8_t idx[]= {};
// Le macro invece parlano al contrario dei magic number
//pinMode(LED_BUILTIN, OUTPUT);
lcd.begin(16, 2);
lcd.clear();
blink.set(LED_BUILTIN, 500);
uint8_t ledIdx = 0;
uint8_t oldLedIdx = 1;
uint8_t h = 0;
for (uint8_t ora = 0; ora < 24; ora++) {
for (uint8_t minuti = 0; minuti < 60; minuti++) {
ledIdx = (ora % 12) * 2 + (minuti > 30);
if (oldLedIdx != ledIdx) {
leds[oldLedIdx] = CRGB::Black;
FastLED.show();
leds[ledIdx] = CRGB::OrangeRed;
FastLED.show();
oldLedIdx = ledIdx;
}
delay(10);
//CRGB::OrangeRed
Serial.print(ledIdx);
Serial.print("\t");
Serial.print(ora);
Serial.print(":");
Serial.println(minuti);
}
}
while(true);
}
void loop() {
// qui con if (millis() - dt > intervallo) temporizziamo la chiamata a funForA
if (millis() - refTime >= 200) {
funForA( &dataForA );
refTime = millis();
}
blink.run();
// qui per dimostrare che funForA non è bloccante accendiamo e spegniamo il led on board
// anchesso temporizzato con millis.
// Output su serial monitor
// for senza for
// for senza for
// for senza for
// ... così all'infinito
// nel frattempo il led on board lampeggia regolarmente
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
ring1:GND
ring1:VCC
ring1:DIN
ring1:DOUT