Codice di errore + guida

Ciao a tutti , mi è arrivato arduino ieri e come consigliatomi da molti utenti ho provato a scrivere i primi sketch , in particolare quello per fare blinkare un led , ma ho riscontrato diversi problemi. Se per esempio copio lo sketch del blink dagli esempi , questo funziona perfettamente .
Se invece provo a riscriverlo io allo stesso modo mi compare sempre questo errore :

C:\Users\Tommy\AppData\Local\Temp\build872542060055005804.tmp/core.a(main.cpp.o): In function main': C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:43: undefined reference to loop'
collect2.exe: error: ld returned 1 exit status
Errore durante la compilazione

Come posso risolverlo ?

La schermata da cui deriva questo errore è quella dell'esempio del blink , di cui è stata cancellata la parte in cui fa andare in loop il led , eccola :

/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.

Most Arduinos have an on-board LED you can control. On the Uno and
Leonardo, it is attached to digital pin 13. If you're unsure what
pin the on-board LED is connected to on your Arduino model, check
the documentation at http://www.arduino.cc

This example code is in the public domain.

modified 8 May 2014
by Scott Fitzgerald
*/

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}

Grazie a tutti per l'aiuto .

ps: come faccio a vedere gli sketch caricati sulla scheda ? come si possono rimuovere o formattare ?

Ogni sketch deve contenere le dichiarazioni di setup() e di loop() nel tuo esempio loop() non è dichiarato e il compilatore te lo segnala come errore.

Non è possibile leggere gli sketch caricati sul microcontrollore, in quanto questi vengono compilati prima di essere caricati, se vuoi puoi estrarre l'assembly e da quello con un po di pazienza ricostruire lo sketch vero e proprio, ma non è compito per novizi e soprattutto per chi non ha famigliarità con l'assembly.

Per rimuovere uno sketch basta eseguire l'upload di uno sketch vuoto contenente solo la dichiarazione di setup() e loop(), ma è una procedura un po' inutile in quanto tolta la corrente il micro non da segni di vita, nel momento che ti servirà di nuovo caricherai un nuovo sketch che sovrascriverà il precedente.

Quando inserisci del codice in un post racchiudilo tra i tag code.

Lonemi:
Ciao a tutti ,

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Cerca su internet "Programmare Arduino Tiziana Marsella" una breve guida pdf in italiano per iniziare. E' free, grazie alla prof. Marsella

Grazie delle risposte e delle guide che mi avete linkato , appena possibile mi leggo bene tutto e mi presento sul forum :slight_smile:

Riguardo al primo post , setup () era inserito nello sketch poichè volevo fargli fare l'azione solo una volta .
In ogni caso l'errore persiste e mi sembra di avere letto da qualche parte che dipende da dei file nelle libraries ?!

Questo è l'esempio blink originale :

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the Uno and
  Leonardo, it is attached to digital pin 13. If you're unsure what
  pin the on-board LED is connected to on your Arduino model, check
  the documentation at http://www.arduino.cc

  This example code is in the public domain.

  modified 8 May 2014
  by Scott Fitzgerald
 */


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(3000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(2000);              // wait for a second
}
[CODE]


Dal quale io vado per esempio a cancellare la parte setup // the setup function runs once when you press reset or power the board

[CODE]
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
}
[CODE]

quando cancello questa parte e ricompilo mi da questo errore :


Arduino:1.6.5 (Windows 7), Scheda:"Arduino Uno"

C:\Users\Tommy\AppData\Local\Temp\build4402784997489053432.tmp/core.a(main.cpp.o): In function `main':
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:40: undefined reference to `setup'
collect2.exe: error: ld returned 1 exit status
Errore durante la compilazione

Sapete perchè ? 

Grazie ancora per l'aiuto , appena possibile mi aggiornerò sui regolamenti e tutto , perdonatemi è che ora sono impaziente di usare arduino !

Se tu leggessi con più attenzione le risposte che ti si danno, non continueresti a commettere gli stessi errori ... :smiling_imp:

Ti ha appena detto RobertoBochet :

RobertoBochet:
Ogni sketch DEVE contenere le dichiarazioni di setup() e di loop() nel tuo esempio loop() non è dichiarato e il compilatore te lo segnala come errore.

... quindi, come puoi pensare di eliminare la setup() ?

Guglielmo

P.S.: Meglio che dedichi del tempo a studiare il link che ti ha dato nid prima di continuare a fare prove "a caso" ... ::slight_smile:
P.P.S: ... e NO, l'impazienza non è una giustificazione, perché commettendo altri errori, potresti anche fare danni !

Puoi eliminare quello che c'e' DENTRO la setup() o dentro la loop() ma quelle due sono OBBLIGATORIE.
Il tutto viene compilato da GCC, compilatore C, quindi linguaggio C.
Di nascosto, l'IDE inserisce il programma principale che le richiama, qualcosa del genere:

main()
{ setup();
  while (1)  loop();
}

Non è tutto li ma quasi.

nid69ita:
Il tutto viene compilato da GCC, compilatore C, quindi linguaggio C.

Non C++? Dopo tutto con Arduino le classi sono fortemente adoperate.

Si, C++
Non ne abusate però, sempre su una MCU con soli 2k di SRAM lavoriamo :slight_smile:

RobertoBochet:
Non C++? Dopo tutto con Arduino le classi sono fortemente adoperate.

Se ti piglia Astro ti mette al rogo ... :smiley: :smiley: :smiley:

+1 Nid ... se potete NON usate il C++ ma il puro C ... la SRAM della MCU vi ringrazierà :wink:

Guglielmo

Capito , grazie a tutti

gpb01:
Se ti piglia Astro ti mette al rogo ... :smiley: :smiley: :smiley:

Perche? D: Io ho sempre sostenuto la programmazione direttamente in C senza le librerie Arduino e senza classi, ma capisco che sia una scelta estremamente impopolare a livello amatoriale.
Ho solo sottolineato che sono molto usate, anche solo per pilotare un servo Arduino usa una classe. Non fraintendetemi, fuori dall'ambiente AVR sono un fermo sostenitore del paradigma orientato ad oggetti! In diverse occasioni mi è stato però illustrato perché non siano una buona scelta in questo settore. Non mi ha trattenuto da sviluppare versioni C++ delle mie librerie ma io a livello pratico prediligo sempre C senza neanche una malloc. XD