Cosiglio per ottimizzazione codice per uso su display 4D Systems

Si ma con tempi lunghi tra l'accensione e lo spegnimento, a volte passano anche 20/30 secondi da quando io do ON e si accende il LED e tra l'OFF e lo spegnimento del LED soprattutto l'ultimo caso.

Metti qui il codice

EDIT

Ah... dimmi anche come alimenti il tutto

Per ora solo con l'USB del PC.

#include <genieArduino.h>


Genie genie;


#define LED 8


boolean PULSANTE ;



void setup()
{

  Serial.begin(9600);
  genie.Begin(Serial);

  pinMode (LED, OUTPUT);

  digitalWrite(LED, LOW);

}

void loop()
{

  genie.DoEvents();

  genie.AttachEventHandler(myGenieEventHandler);

  




  if (PULSANTE == 1)
  {
    digitalWrite(LED, HIGH);
    genie.WriteObject (GENIE_OBJ_USER_LED, 0, 1);
  }
  else {
    digitalWrite(LED, LOW);
    genie.WriteObject (GENIE_OBJ_USER_LED, 0, 0);
  }
}


void myGenieEventHandler(void)
{
  genieFrame Event;
  Event.reportObject.object;
  genie.DequeueEvent(&Event);
  Event.reportObject.cmd;
  Event.reportObject.index;
  PULSANTE = genie.ReadObject (GENIE_OBJ_WINBUTTON, 0);
  

}

Hai provato un delay nel loop ? Forse l'eventhandler non è adatto a ricevette infinite chiamate velocisdime. Prova un banale delay(1000); se funziona poi lo sostituisci con un millis

il do events più frequentemente lo chiami e meglio è.
l'attacheventhandler devi metterlo nel setup dove inoltre ci vuole qualche delay per dare modo al display di caricare il programma.

void setup()
{
delay (1000);

Serial.begin(9600);
genie.Begin(Serial);
genie.AttachEventHandler(myGenieEventHandler);

delay (4600);
}

C'è anche un 1000 messo prima che è bene usare quando si fa la serial begin, in generale.
Ovviamente anche il programma che hai caricato sul display deve sapere che comunichi a 9600, verifica nelle proprietà del progetto, quando lo crei troverai 9600.

Ci sarebbe da sistemare l'alimentazione, comunque poi vedremo.

Altra cosa da sistemare, è la filosofia con cui lo programmi.

Ad ogni loop stai verificando la variabile pulsante che può essere 1 oppure 0, in ogni caso tu gli fai accendere o spegnere il LED grafico sul display ed il LED fisico collegato.
Inoltre quando chiami il do events gli fai andare a leggere lo stato del winbutton...

cambia filosofia

La pressione del winbutton è un evento.
Quando si verifica l'evento, fai qualcosa che consiste nell'accendere o spegnere i LED.

Guarda se il winbutton ha temporary true o meno (nel visigenie)... per iniziare, lascialo come è quando lo metti quindi col temporary true.
Inoltre nelle proprietà del button troverai la gestione delle azioni degli eventi.
Metti on change report message.
Così quando toccherai il button, verrà mandato un messaggio.

Adesso nel loop lascia solo genie.DoEvents() e modifica così l'event handler

void myGenieEventHandler(void)
{
  genieFrame Event;
  genie.DequeueEvent(&Event);
  
  if (Event.reportObject.cmd == GENIE_REPORT_EVENT)
  {
   
    if (Event.reportObject.object == GENIE_OBJ_WINBUTTON)
       {
            if (Event.reportObject.index == 0)
               {
                 pulsante = !pulsante;
                 refreshled();
               }
            
            
               
               
               
       }
   
    
  }
  
  
  
  
}

all'inizio quando fai boolean pulsante dagli uno stato iniziale boolean pulsate = false;

a questo punto manca l'ultima funzione, la refreshled()

void refreshled()
{
  digltalWrite (LED, pulsante);
  genie.WriteObject (GENIE_OBJ_USER_LED, 0, pulsante);

}

dovresti ottenere l'accensione e lo spegnimento dei LED quando tocchi il pulsante sullo schermo.

nel setup alla fine metti una chiamata a refreshled() così avrai una indicazione iniziale anche se decidi di partire con true

Vedi così...

Dovrebbe funzionare, ma la sto scrivendo a memoria ....

Funziona perfettamente.....!!!

ho capito la filosofia.

Ma ho tanto da studiare anche se per hobby.

Bene.
Una vota che hai capito come si fa, puoi aggiungere quanti elementi vuoi.
Andrà sempre bene, grazie al processore del display che lascia praticamente libero il nostro atmega328.

Peccato che siano un po' costosi, questi display.

Si è vero, però per alcuni progetti ne vale la pena.

Davvero grazie ancora per l'aiuto e per le spiegazioni....