Switch non funziona su NANO33 IoT

Ho un problema con la funzione "Switch" che utilizzo sul Cloud di Arduino con un NANO33 IoT.
Non riesco a farlo funzionare.
Lo sketch è il seguente:

#include "arduino_secrets.h"
/************************     ****************************************************
  Sketch generated by the Arduino IoT Cloud Thing "Untitled"
  https://create.arduino.cc/cloud/things/08b27dbe-a5e2-4b6d-b9b4-647b5227a6ce 

  Arduino IoT Cloud Variables description

  The following variables are automatically generated and updated when changes are made to the Thing

  int counter;
  CloudSchedule scheduler_test;
  bool light;
  CloudTime time_read;

  Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
  which are called when their values are changed from the Dashboard.
  These functions are generated with the Thing and added at the end of this sketch.
  
  Modifica: Introdotto LED_BUILTIN per verifica raggiungimento massimo erogazioni crocchette
  
********************************************************************************************/

#include "thingProperties.h"
#include <RTCZero.h>

bool toggle;
int LED1;   
int LED2; 
int LED3;

void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500); 

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
  counter = 0;  // erogazioni crocchette
  light = false;
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
}

void loop() {
  ArduinoCloud.update();
  if(scheduler_test.isActive()) {
    light = true;
    digitalWrite(LED_BUILTIN, HIGH);
    
  if(toggle) {
    counter = ++counter;
    toggle = false;
    }
  } else {
    light = false;
    digitalWrite(LED_BUILTIN, LOW);
    toggle = true;
  }
  
  if(ArduinoCloud.connected()) {
    time_read = ArduinoCloud.getLocalTime();
  }
  
  switch (counter) {
  case 3:
    digitalWrite(LED1, HIGH);
    break;
  case 5:
    digitalWrite(LED2, HIGH);
    break;
    case 7:
    digitalWrite(LED3, HIGH);
    break;
  default:
    
    break;
  } 
  
 }

void onSchedulerTestChange()  {
  // Aggiungere qui il proprio codice per agire sulla modifica di SchedulerTest
}

/*
  Since Counter is READ_WRITE variable, onCounterChange() is
  executed every time a new value is received from IoT Cloud.
*/
void onCounterChange()  {
  // Add your code here to act upon Counter change
}

/*
  Since Light is READ_WRITE variable, onLightChange() is
  executed every time a new value is received from IoT Cloud.
*/
void onLightChange()  {
  // Add your code here to act upon Light change
}

il file delle proprietà è questo:

// Code generated by Arduino IoT Cloud, DO NOT EDIT.

#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>

const char SSID[]     = SECRET_SSID;    // Network SSID (name)
const char PASS[]     = SECRET_OPTIONAL_PASS;    // Network password (use for WPA, or use as key for WEP)

void onCounterChange();
void onSchedulerTestChange();
void onLightChange();

int counter;
CloudSchedule scheduler_test;
bool light;
CloudTime time_read;

void initProperties(){

  ArduinoCloud.addProperty(counter, READWRITE, ON_CHANGE, onCounterChange);
  ArduinoCloud.addProperty(scheduler_test, READWRITE, ON_CHANGE, onSchedulerTestChange);
  ArduinoCloud.addProperty(light, READWRITE, ON_CHANGE, onLightChange);
  ArduinoCloud.addProperty(time_read, READ, ON_CHANGE, NULL, 10);

}

WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);

Come Widget uso lo Scheduler, il Time Picker, il Value e tre LED.
le varie configurazioni penso di averle fatte giuste sia come tipo di variabili che come Permission.

Accetto suggerimenti.

Subito prima dello switch, stampa il valore di 'counter' ... così sei sicuro di cosa lo switch dovrebbe fare.

Guglielmo

P.S.: Il codice che hai messo, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE).

Ho fatto come mi hai consigliato e il print della variabile counter messa nello Switch stampa correttamente il valore della variabile, quindi lo Switch dovrebbe funzionare.
Adesso penso di aver capito dove sta il problema.
In pratica il Widget LED1 e gli altri LED non si accendono perché non sono collegati alla variabile counter o ad altra variabile necessaria.
Ho provato a creare una nuova variabile ma se provo a collegarla ai LED, il Cloud mi presenta disponibile solo e sempre la variabile "light" che però non fa al caso mio.
A questo punto ammetto di non aver ancora abbastanza conoscenze del Cloud per trovare la soluzione e metto il progetto "nel cassetto".

EzioGi

Purtroppo con il cloud neanche io posso aiutarti ... mai usato (e nessuna intenzione di usarlo).

Mi spiace :confused:

Guglielmo

Che pin sono LED1, LED2 e LED3???...

I LED1,2 e 3 sono dei Widgets.
Qui vedi la Dasboard:

Se collego dei led sui pin del NANO e metto nello sketch la porta dove sono collegati i led fisici, questi funzionano correttamente.
Sono i led widgets sulla Dashboard che non commutano lo stato ed è quello che vorrei fargli fare.

Saluti

Ma non devi associarli ai pin fisici a cui sono collegati i LED? Come fa a sapere su che pin hai i LED?

Guglielmo

I LED widgets vanno solo associati a una variabile per poter funzionare, non vanno associati a dei pin fisici.
Negli esempi del Cloud c'è lo sketch "BlinK" dove ho preso lo spunto per il mio sketch ed è molto esplicativo.

EzioGi

Ah, ok, quindi NON hai dei LED reali sulla scheda ma soll degl indicatori sulla dashboard ... :roll_eyes:

Grazie,

Guglielmo

Si, infatti.
Saluti

EzioGi

L'OP intende riproporre la domanda nella sezione relativa al Cloud ...
... data la specificità dell'argomento, nonostante si possa avere una situazione di cross posting (che normalmente non sarebbe consentita), l'OP è autorizzato e, per evitare doppioni, questo thread viene chiuso.

Guglielmo