Problema buzzer con Arduino mega e millis

Salve a tutti, ho da poco comprato Arduino mega originale, ho notato che quando uso lo schermo lcd attraverso il chip i2C non funziona tanto bene il buzzer; mi spiego meglio:
Ho programmato il buzzer che faccia due "beep" al secondo attraverso la funzione millis.
Se lo schermo è collegato alla porta 20 e 21 communication ho notato che me ne fa solo uno e con un suono diverso come se li desse noia questo collegamento.
Infatti se lo uso tramite i suoi 16 pin funziona tutto alla perfezione.
Vorrei aggiungere anche che questo problema me lo da solo quando uso i millis mentre con il delay non mi da problemi.
Grazie in anticipo!

Probabilmente è un conflitto di timer, il delay blocca tutte le operazioni della MCU e quindi i successivi beep funzionano, invece il conteggio dei millis avviene in contemporanea alla generazione dei beep.

Quindi come risolvo il problema? Non posso più usare l'interfaccia I2C?

Mmm ... metti qui il codice che stai utilizzando (... mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) e vediamo cosa fai esattamente ... ::slight_smile:

Guglielmo

Il codice è un po' lungo quindi vi allego il file compresso.
Il problema è nella scheda searchdestroy a circa metà codice.
Ho scritto "------problema------" così lo vedete prima.

B_finale_Softair_I2C.zip (14.6 KB)

Ok, quindi usi la funzione tone() la quale, sulla MEGA, utilizza il Timer 2 ...

...
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)

#define AVAILABLE_TONE_PINS 1
#define USE_TIMER2
...

che, sulla MEGA è anche usato per la generazione del PWM sui pin 9 e 10 (8-bit phase correct pwm mode).

La funzione millis() è gestita tramite Timer 0.

Tutto questo NON ha nulla a che vedere con il bus I2C che tu citavi ...
... NON ho esaminato tutti i moduli del tuo codice, usi altre liberie particolari che possono utilizzare i Timer ed andare in conflitto con quelli sopra citati ?

Guglielmo

Le uniche librerie che uso sono:

#include <Wire.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>