Aiuto errori caricamento sketch

Buona sera a tutti, dopo aver premuto il tasto carica del programma per controllare il robot mi escono questi errori, come risolvo?

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x4c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x4c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x4c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x4c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x4c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x4c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x4c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x4c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x4c
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x4c

Questo è lo screen della porta seriale sull'ide di arduino:
http://marcorangaioli.altervista.org/arduino3.html

aha
E tu hai un Arduino UNO sulla com5?

Quella scheda é nuova o ti funionava giá?
È un Arduino originale o un clone? (link al venditore)

Ciao Uwe

Arduino uno nuovo e originale, è il primo utilizzo.

Viene visto dal PC? La COM5 viene fuori quando lo colleghi?
Ciao Uwe

Ma hai qualche cosa collegata o che utilizza i pin 0 ed 1 ? Una qualche shield ?

Guglielmo

Guglielmo sullo 0 e 1 ho l'hc-06

Se impegni i pin 0 e 1 con qualcosa non puoi caricare nulla perché sono quelli della seriale hardware utilizzata durante l'upload, devi prima scollegarli se vuoi usare il bootloader.

Quindi cosa dovrei fare? Posso avere una spiegazione migliore?

Normalmente i pin 0 ed 1 vanno SEMPRE lasciati liberi dato che sono quelli che sono collegati al convertitore "USB <-> Seriale" che ti permette il caricamento dei programmi e, dovendo fare "debug" (quasi sempre necessario), ti permette di mandare i messaggi della Serial da/verso il monitor seriale.

Hai DUE possibili soluzioni:

  1. NON usare quei pin e collegare il modulo BT ad altri due pin (tipicamente 10 ed 11) ed utilizzare la SoftwareSerial per creare una seriale "viruale" con cui parlare con detto modulo. Questa è l'opzione altamente consigliata, anche perché abbiamo visto che, nel 80% dei casi, per vari problemi di livelli, i moduli BT collegati direttamente alla vera seriale di Arduino (0, 1) ... danno problemi.

  2. Continuarli ad usare, ma staccare ogni volta il modulo BT da quei pin se si deve caricare il programma. Questa opzione è quella meno consigliata dato che a) obbliga ogni volta a staccare ed attaccare il modulo, b) non permette di usare il "monitor seriale" per fare il "debug".

Guglielmo

  1. puoi usare un altra scheda che ha piú seriali:
  • Leonardo la seriale sui pin 0 e 1 é indipendente dal USB
  • MEGA 2560 ha 4 Seriali (pin 0 e 1 e 20-25) di cui solo una (0 e 1) é usata.
    Ciao Uwe

Posso collegare il modulo BT alla porta 2 o 3 anzichè 10 e 11?
(Le 10 e 11 sono occupate per altro)

MarcoR99:
Posso collegare il modulo BT alla porta 2 o 3 anzichè 10 e 11?

SI, sulla UNO si, su altre schede NO (vd. il reference della SoftwareSerial dove è chiaramente specificato).

Guglielmo

Infatti ho Arduino UNO quindi collegherò sul 2 e 3.

C'è qualcosa che non va in questo sketch?

#include <SoftwareSerial.h>

#define  BT_RX 3           // PIN to receive from bluetooth
#define  BT_TX 2           // PIN TO transmit to bluetooth

SoftwareSerial btSerial(BT_RX, BT_TX);

/*
 * Created by Marco Rangaioli
 * Project: Arduino Control Car via Bluetooth with Android Smartphone
*/

//L298 Connection   
  const int motorA1  = 5;  // Pin  in1 of L298
  const int motorA2  = 6;  // Pin  in2 of L298
  const int motorB1  = 10; // Pin in3 of L298
  const int motorB2  = 11;  // Pin in4 of L298
//Leds connected to Arduino UNO Pin 13-12-9
  const int ledPost = 12; //led fari posteriori
  const int frecce = 9; // led luci di emergenza
 
//Useful Variables
  int i=0;
  int j=0;
  int state;
  int vSpeed=255;     // Default speed, from 0 to 255

void setup() {
    // Set pins as outputs:
    pinMode(motorA1, OUTPUT);
    pinMode(motorA2, OUTPUT);
    pinMode(motorB1, OUTPUT);
    pinMode(motorB2, OUTPUT);
    pinMode(ledPost, OUTPUT);  
    pinMode(frecce,OUTPUT); 
    // Initialize serial communication at 9600 bits per second:
    delay (2000);
    Serial.begin(9600);
    btSerial.begin(9600);
    Serial.println("--- Ports ready ---");
    Serial.println("");
}
 
void loop() {
{
   while (btSerial.available())
   {
       char dato= btSerial.read(); // "dato" è il valore che viene ricevuto dalla seriale
       switch(dato)
       {  
     
  /***********************Forward****************************/
  //If state is equal with letter 'a', car will go forward!
    case 'a': 
         {
      analogWrite(motorA1, vSpeed); 
      analogWrite(motorA2, 0);
      analogWrite(motorB1, vSpeed);      
      analogWrite(motorB2, 0);
      btSerial.println("Avanti");
      break; 
     
    }
  /***********************Backward****************************/
  //If state is equal with letter 'i', car will go backward
    case 'i': 
         {
      analogWrite(motorA1, 0);   
      analogWrite(motorA2, vSpeed); 
      analogWrite(motorB1, 0);  
      analogWrite(motorB2, vSpeed); 
      btSerial.println("Indietro");
      break; 
    }
  /***************************Left*****************************/
  //If state is equal with letter 's', wheels will turn left
    case 's': 
         {
      analogWrite(motorA1, 200);   
      analogWrite(motorA2, 0); 
      analogWrite(motorB1, 0); 
      analogWrite(motorB2, 200); 
      btSerial.println("Sinistra");
      break; 
    }
  /***************************Right*****************************/
  //If state is equal with letter 'd', wheels will turn right
    case 'd': 
         {
      analogWrite(motorA1, 0);   
      analogWrite(motorA2, 200); 
      analogWrite(motorB1, 200);   
      analogWrite(motorB2, 0);  
      btSerial.println("Destra");
      break;    
    }

     /************************Luci Posteriori*****************************/
  //If state is equal with letter 'e', turn leds on or of off
    case 'e': 
         {
      if (i==0){  
         digitalWrite(ledPost, HIGH); 
         i=1;
         btSerial.println("Accese uno");
      break; 
      }
      else if (i==1){
         digitalWrite(ledPost, LOW); 
         i=0;
         btSerial.println("Spente uno");
      break; 
      }
      state='n';
    }
     /************************Luci di Emergenza*****************************/
  //If state is equal with letter 'f', turn leds on or of off
    case 'f': 
         {
      if (i==0){  
         digitalWrite(frecce, HIGH);
         delay(1000);
         digitalWrite(frecce, LOW);
         delay(1000);
         digitalWrite(frecce, HIGH);
         delay(1000);
         digitalWrite(frecce, LOW);
         delay(1000);
         i=1;
         btSerial.println("Accese due");
      break; 
      }
      else if (i==1){
         digitalWrite(frecce, LOW); 
         i=0;
         btSerial.println("Spente due");
      break; 
      }
      state='n';
    }
 
  /************************Stop*****************************/
  //If state is equal with letter 'p', stop the car
    case 'p': 
         {
        analogWrite(motorA1, 0);  
        analogWrite(motorA2, 0); 
        analogWrite(motorB1, 0);  
        analogWrite(motorB2, 0);
        digitalWrite(ledPost, HIGH);
        btSerial.println("Stop");
        break;
        }
     }
   }             
}

Grazie a tutti :slight_smile:

A parte un uso indiscriminato di delay() che, prima o poi, sicuramente ti renderanno la vita difficile (la prima volta che dovrai fare un qualche cosa durante un periodo di delay() te ne accorgerai ...) ed una pessima formattazione del codice (usa il comado del IDE che trovi nel menu Tools -> Auto Format ... ti sistema come si deve il sorgente) che ti impedisce di vedere un banale errore, per cui NON compila (c'è una parentesi graffa di troppo dopo il "loop() {") ... altre cose eclatanti non mi saltano al momento agli occhi ... ::slight_smile:

Guglielmo

Quali delay tolgo?
Io ho l'ide di arduino in italiano, e non riesco a trovare autoformat.

MarcoR99:
Quali delay tolgo?

Non ho detto di toglierli così brutalmente, ho detto che è bene che cominci a pensare in una logica in cui il programma NON si deve mai fermare e occorre usare altre tecniche per fare qualche cosa con tempistiche ben determinate.

Attualmente, in quel tuo programma non ne hai bisogno, ma andando avati ti accorgerai che spesso serve fare delle cose ogni X secondi, ma NON si può stare fermi ad aspettare e quindi NON si può usare il delay().

Se, in un ottica futura, sei interessato all'argomento, allora ti consiglio di studiarti come si usa la millis(), prima QUI, poi QUI ed infine leggi anche QUI e QUI ... ti chiariranno le possibilità che hai :wink:

MarcoR99:
Io ho l'ide di arduino in italiano, e non riesco a trovare autoformat.

Lo trovi sicuramete, deve stare nel menu Strumenti (Toos), credo la prima voce ...

Guglielmo

Guglielmo, puoi caricare il mio programma sul pc e sistemarmi le parentesi graffe che mi danno continuamente errore?

ciao

marco, leggi bene il post #13 di Guglielmo... te lo ha già scritto la quale parentesi togliere.

ciao
pippo72