Ciao gruppo, desideravo chiedervi se potete aiutarmi a capire, perché lo sketch sotto se fatto girare con Arduino Nano alimentato tramite USB funziona bene, mentre se lo alimento con batteria a 9V fuzniona male, in pratica la parte display funziona bene in entrambi i casi, mentre la parte neopixel, se alimentata con USB, fa quello detto nello sketch, mentre con batteria 9V, fa dei flash, stile flash macchina fotografica.
Non capisco dove potrebbe essere il problema, il led è alimentato dalle uscite volt di Arduino, quindi sia con USB che con batteria sempre da li prende l'alimentazione.
Qualche consiglio?
Grazie
buon weekend a tutti
P.s. lo sketch sarà lungo mi serviranno le varie librerie, ma sto testando pezzo pezzo per trovare eventuali errori.
#include <Vcc.h> // libreria Volt batteria
#include <Adafruit_GFX.h> // Libreria display
#include <Adafruit_ST7735.h> // Libreria display
#include <SPI.h>
#include <Wire.h> // Libreria per sensore laser
#include <VL53L0X.h> // Libreria per sensore laser
#include <Adafruit_NeoPixel.h> // Libreria Led
#include <EEPROM.h>
//Sezione led
#define LED_PIN 3
#define LED_COUNT 1
Adafruit_NeoPixel led (LED_COUNT, LED_PIN, NEO_RGB);
// Sezione display
#define CS 10
#define RESET 8
#define DC 9
Adafruit_ST7735 tft = Adafruit_ST7735(CS, DC, RESET);
// Costanti varie
char str_CM [7]; // Stringa per scrittura altezza
char Litri[7]; // Stringa per scrittura litri
int L; // Variabile litri
int y = ((86*L)/2000); // Calcolo altezza rettangolo percentuale
int Perc = ((L/2000)*100); // Calcolo percentuale litri
// Sezione sensore laser
#define HIGH_ACCURACY // Accuratezza laser
VL53L0X sensor; // Sensore laser
// Pin sensore non a contatto
#define sensore_H2O 6
// costanti per il calcolo batteria
const float minV = 0.0; // volt minimi
const float maxV = 5.0; // volt massimi
const float rap = 9.0/9.0; // volt misurati con il tester e volt ipotetici
Vcc vcc(rap);
// Colori
#define BLACK 0x0000
#define RED 0xF800
#define DARKGREEN 0x0320
#define STEELBLUE 0x4416
#define ORANGE 0xFD20
#define YELLOW 0xFFE0
#define OLDLACE 0xFFBC
#define GREENYELLOW 0xAFE5
void setup() {
tft.initR(INITR_BLACKTAB); // inizializza il chip ST7735
tft. setRotation(0);
pinMode(sensore_H2O, INPUT_PULLUP);
Wire.begin();
sensor.init();
led.begin();
sensor.setTimeout(500);
// Schermata di avvio
led.setBrightness(250);
led.setPixelColor(0, 110, 0, 210);
led.show();
tft.fillScreen(BLACK);
tft.setCursor (36,20);
tft.setTextSize (3);
tft.setTextColor(GREENYELLOW);
tft.println ("H2O");
tft.setCursor (20,60);
tft.setTextSize (3);
tft.setTextColor(GREENYELLOW);
tft.println ("LEVEL");
tft.setCursor (15, 110);
tft.setTextColor(STEELBLUE);
tft.setTextSize(2);
tft.println("by");
tft.setCursor (10, 135);
tft.setTextColor(STEELBLUE);
tft.setTextSize(2);
tft.println("Vincenzo");
delay(2500);
// Schermata Dati non variabili
led.setPixelColor(0, 0, 0, 0);
led.show();
tft.fillScreen(BLACK);
tft.drawFastHLine (0, 23, 128, OLDLACE);
tft.setCursor (3,30);
tft.setTextSize (2);
tft.setTextColor(STEELBLUE);
tft.println ("Litri");
tft.setCursor (3, 75);
tft.setTextSize (2);
tft.setTextColor(STEELBLUE);
tft.println("Altez.");
tft.drawFastHLine (0, 120, 128, OLDLACE);
tft.setCursor (10,125);
tft.setTextSize (1);
tft.setTextColor(OLDLACE);
tft.println("LETTURA PRECEDENTE");
tft.drawRect(85, 30, 40, 83, OLDLACE);
sensor.startContinuous();
}
void loop() {
// lettura VOLT Batteria
float v = vcc.Read_Volts();
// lettura PERCENTUALE Batteria
float p = vcc.Read_Perc(minV, maxV);
if(p >= 60){
tft.setCursor (23,1);
tft.setTextSize (1);
tft.setTextColor(DARKGREEN, BLACK);
tft.println("STATO BATTERIA");
tft.setCursor (10,12);
tft.setTextSize (1);
tft.print(v);
tft.print(" V");
tft.setCursor (70,12);
tft.setTextSize (1);
tft.print(p);
tft.print(" %");
}
if(p<=59 && p>=30){
tft.setCursor (23,1);
tft.setTextSize (1);
tft.setTextColor(ORANGE, BLACK);
tft.println("STATO BATTERIA");
tft.setCursor (10,12);
tft.setTextSize (1);
tft.print(v);
tft.print(" V");
tft.setCursor (70,12);
tft.setTextSize (1);
tft.print(p);
tft.print(" %");
}
if(p<=29){
tft.setCursor (23,1);
tft.setTextSize (1);
tft.setTextColor(RED, BLACK);
tft.println("STATO BATTERIA");
tft.setCursor (10,12);
tft.setTextSize (1);
tft.print(v);
tft.print(" V");
tft.setCursor (70,12);
tft.setTextSize (1);
tft.print(p);
tft.print(" %");
}
// Sezione inizializzazione laser
int A = digitalRead(sensore_H2O);
int distanza = sensor.readRangeSingleMillimeters();
if(!sensor.init()){
led.setPixelColor(0, 153, 255, 51);
led.show();
tft.fillRect(0, 25, 128, 95, ORANGE);
tft.setCursor(13, 40);
tft.setTextSize (1);
tft.setTextColor(RED);
tft.println("Laser non trovato!");
tft.setCursor(8, 70);
tft.setTextSize (1);
tft.setTextColor(RED);
tft.println("Funzia solo il led");
if(A==LOW){
tft.fillRect(2, 90, 124, 20, DARKGREEN);
tft.setCursor(15, 95);
tft.setTextSize(1);
tft.setTextColor(OLDLACE, DARKGREEN);
tft.print("LIVELLO TROVATO");
led.setPixelColor(0, 250, 0, 0);
led.show();
}
delay(2500);
}
led.setPixelColor(0, 250, 250, 0);
led.show();
tft.fillRect(0,25, 128, 95, YELLOW);
tft.setTextColor(RED);
tft.setTextSize(1);
tft.setCursor(20, 30);
tft.print("PROBLEMA LASER");
tft.setCursor(40, 50);
tft.print("CALCOLO");
tft.setCursor(17, 70);
tft.print("NON DISPONIBILE");
if(A==LOW){
tft.fillRect(10, 90, 108, 20, DARKGREEN);
tft.setCursor(20, 95);
tft.setTextColor(OLDLACE, DARKGREEN);
tft.print("LIVELLO TROVATO");
led.setPixelColor(0, 250, 0, 0);
led.show();
}
delay(2500);
}