Ciao,
ho un problema che non mi è mai capitato, di solito sono autonomo nella risoluzione ma questa volta non ci riesco 
Vi espongo il problema:
Arduino Mega
Questa funzione legge un valore analogico da un sensore e restituisce una risposta in seriale:
void lettura() {
int sensorReading = analogRead(A7);
Serial.println(sensorReading);
if (sensorReading <= 256) {
Serial.println("XXXX");
}
if (sensorReading > 256 && sensorReading <= 512) {
Serial.println("XXXX");
}
if (sensorReading > 512 && sensorReading <= 768) {
Serial.println("XXXX");
}
if (sensorReading > 768) {
Serial.println("XXXX");
}
}
Il problema è che non riesco a caricarlo su arduino e l'IDE si blocca su "Caricamento in corso"
Se elimino gli if non ci sono problemi.
Ho anche provato a creare un programma solo con questo pezzo di codice ma non cambia nulla.
Oramai è un po' che lavoro con Arduino ma una cosa simile non mi era mai capitata.
Grazie a chi potrà aiutarmi
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:
Cambia quei XXXX con qualche altro messaggio. Mi pare che tre o quattro X avessero un significato particolare per il compilatore. E' solo un ricordo. Prova.
Grazie nid,
(Presentazione fatta)
ho riportato le X per non rendere più complesso il codice ma nel programma ci sono delle semplici frasi.
Che versione di IDE ?
L'IDE quando compila calcola quanto è grande il programma come codice (spazio occupato in memoria flash), quanto ti dà ?
E di memoria SRAM ?
Provato ad usare F() ? Serial.println( F("XXXX") );
Anche utilizzando Serial.println(F("Testo))
non cambia nulla.
la verifica:
Lo sketch usa 12.834 byte (5%) dello spazio disponibile per i programmi. Il massimo è 253.952 byte.
Le variabili globali usano 612 byte (7%) di memoria dinamica, lasciando altri 7.580 byte liberi per le variabili locali. Il massimo è 8.192 byte.
Utilizzo la IDE 1.6.8
il fatto è che se elimino la parte dove eseguo il controllo degli IF riesco a caricarlo senza problemi.
ho provato ad utilizzare anche switch (var) ma senza successo, resta bloccato durante la fase di caricamento
Prova con l'IDE 1.6.5r5 oppure con la 1.6.9, la 1.6.8 ha dei bug "strani".
abilita il log del compilatore dal menu di Arduino IDE.
Una volta compilato postalo , tramite gli appositi tag code, in questo thread
vbextreme:
abilita il log del compilatore dal menu di Arduino IDE.
Una volta compilato postalo , tramite gli appositi tag code, in questo thread
Più che il log del compilatore, quello del caricamento visto che la compilazione va a buon fine.
Ecco il LOG del caricamento, va in timeout durante il caricamento... ma se commento la parte degli if carica senza alcun problema.
Ho provato L'IDE 1.6.9 ma senza successo, mi sto per arrendere
avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"
Using Port : COM3
Using Programmer : wiring
Overriding Baud Rate : 115200
AVR Part : ATmega2560
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 10 8 0 no 4096 8 0 9000 9000 0x00 0x00
flash 65 10 256 0 yes 262144 256 1024 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : Wiring
Description : Wiring
Programmer Model: AVRISP
Hardware Version: 15
Firmware Version Master : 2.10
Vtarget : 0.0 V
SCK period : 43.5 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e9801
avrdude: reading input file "C:\Users\ALESSA~1\AppData\Local\Temp\buildee05df1415cafbe33700f4d8fa19de51.tmp/Main.ino.hex"
avrdude: writing flash (12742 bytes):
Writing | #################################################avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
Ah dimenticavo, una cosa sono riuscito a farla:
void perdite() {
int sensorReading = analogRead(A7);
//Serial.println(sensorReading);
//int range = map(sensorReading, sensorMin, sensorMax, 0, 3);
if (sensorReading >= 1000) {
Serial.println("1");
}
if (sensorReading < 1000 && sensorReading >= 300) {
Serial.println("2");
}
if (sensorReading < 300 && sensorReading >= 200) {
Serial.println("3");
}
if (sensorReading < 200) {
//Serial.println("4");
}
}
Commentando un solo "serial.print" lo carica, quasi avesse un limite
posta il log completo del compilatore
Se può aiutare, questo è il report del compilatore, che comunque va a buon fine
lo metto su pastebin perchè eccede il limite di caratteri:
dal log che hai postato sembra che non hai abilitato i warning, ma sono sul cellulare e quindi fatico a leggerlo, cerca nel menu compile warning e mettilo su All e show verbose output su si.