Problemi con funzionamento Beep

Ciao a tutti, ho riscontrato un problema con lo sketch allegato.
Il programma è un piccolo allarme composto da un sensore PIR, un lettore RFID e un beep.
Il programma funziona l'unico problema è che il beep (già collaudato e funzionante) non suona.
QUALCUNO RIESCE A DARMI UNA MANO?

progetto_2.ino (4.01 KB)

non urlare e usa di piú paroline magiche come "per favore" "grazie"

Ciao Uwe

non mi sembrava di essere stato scortese...comunque avresti suggerimenti da darmi?
grazie in anticipo

ciao

Non hai dichiarato il pin 7 come output.

ciao
pippo72

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

ciao

grazie mille per la tua risposta ho aggiunto il pin 7 come output ma comunque non suona, qui trovi il codice modificato

#include <SPI.h>
#include <MFRC522.h>

//Costanti per i collegamenti dei PIN
//PIN dell'RFID
#define SDA_DIO 10 //53 per Mega
#define RESET_DIO 9
#define delayRead 1000 //Tempo di ritardo (Attesa)

//Variabili globali
//Viene creata una l'istanza dell'RFID dalla libreria
MFRC522 RC522(SDA_DIO, RESET_DIO);
//Codice della tessera autorizzata
String codiceAutorizzato = "117414340";
int mode = 0;
int StatoSensore = 0;
byte i;
int led=6;
void setup()
{
//OUTPUT a console
Serial.begin(9600);

pinMode(2, INPUT);
pinMode(7, OUTPUT);
//Abilita SPI
SPI.begin();

//Viene inizilizzato RFID
RC522.PCD_Init();

//OUTPUT a console
Serial.println("ALLARM-DUINO");
Serial.println("Setup");
//Controlla se l'RFID è collegato
ShowReaderDetails();
}

void loop()
{

//Controllo se è stato riconosciuto un codice, se non lo è riparto con il loop della funzione
if (RC522.PICC_IsNewCardPresent())
{
return;
}

//Se viene letta una tessera
if (RC522.PICC_IsNewCardPresent())
{
//Aquisisco il codice della tessera
RC522.PICC_ReadCardSerial();

//Variabile che conterrà il codice letto dalla tessera
String codiceLetto ="";

//OUTPUT a console
Serial.println("Codice delle tessera letto:");

//Carico il codice della tessera
for(i = 0; i<RC522.uid.size; i++)
{
codiceLetto+= String (RC522.uid.uidByte*);*

  • codiceLetto.toUpperCase();*

  • }*

  • Serial.println(codiceLetto);*

  • delay(delayRead);*

  • Serial.println();*

  • Serial.println();*

  • if(verificaCodice(codiceLetto))*

  • {*

  • Serial.println("Tessera autorizzata");*

  • if(mode==0)*

  • {*

  • mode++;*

  • }*

  • else*

  • {*

  • mode--;*

  • }*

  • }*

  • else*

  • {*

  • Serial.println("Tessera non autorizzata");*

  • }*

  • delay(delayRead); *

  • }*

  • //Se spento*

  • if(mode == 0)*

  • {*

  • //OUTPUT a console*

  • Serial.println("ALLARME SPENTO");*

  • }*

  • else*

  • {*

  • suono();*
    _ /* Temporary loop counter */_

  • Serial.println("ALLARME ATTIVO");*

  • delay(delayRead);*

  • // Se viene letta una tessera*

  • }*
    }

  • // Questa funzione verifica se il codice Letto è autorizzato*

  • boolean verificaCodice(String codiceLetto)*

  • {*

  • if(codiceLetto.equals(codiceAutorizzato))*

  • {*

  • return true;*

  • }*

  • else*

  • {*

  • return false;*

  • } *

  • }*

  • //controllo che il lettore RFID sia collegato*

  • void ShowReaderDetails()*

  • {*

  • // Get the MFRC522 software version*

  • byte v = RC522.PCD_ReadRegister(RC522.VersionReg);*

  • Serial.print(F("MFRC522 Software Version: 0x"));*

  • Serial.print(v, HEX);*

  • if (v == 0x91)*

  • Serial.print(F(" = v1.0"));*

  • else if (v == 0x92)*

  • Serial.print(F(" = v2.0"));*

  • else*

  • Serial.print(F(" (unknown)"));*

  • Serial.println("");*

  • // When 0x00 or 0xFF is returned, communication probably failed*

  • if ((v == 0x00) || (v == 0xFF))*

  • {*

  • Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?"));*

  • }*

  • }*

  • void suono()*

  • {*

  • //leggo segnale Sensore PIR*

  • StatoSensore = digitalRead(2);*

  • //invia i dati solo se rilevo un movimento*

  • if (StatoSensore == HIGH)*

  • {*

  • digitalWrite(led, HIGH); // accendo il led*

  • ///codice per il suono*

  • delay (2000);*

  • digitalWrite(7, HIGH);*

  • //frequenza del suono*

  • delayMicroseconds(1000);*

  • digitalWrite(7, LOW);*

  • delayMicroseconds(100);*

  • }*

  • else*

  • {*

  • digitalWrite(led, LOW);*

  • } *

  • }*
    ciao

Ho analizzato attentamente il tuo codice e mi sono accorto che:

  • Non ti sei presentato
  • Non ti sei preso la briga di leggere il regolamento altrimenti il codice lo avresti racchiuso con l'apposito tag.

Se non hai il tempo per fare queste due operazioni basilari...

Jack_Bear:
ciao

grazie mille per la tua risposta ho aggiunto il pin 7 come output ma comunque non suona, qui trovi il codice modificato

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

  • qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
  • qui le pinout delle varie schede by xxxPighi: Pinout
  • qui una serie di link generali utili: Link Utili
    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.

Ciao,
scusate ma avevo capito male, ora mi sono presentato e ho racchiuso il codice nel tag code.
per favore qualcuno riesce a darmi una mano? :slight_smile:
GRAZIE in anticipo

#include <SPI.h>
#include <MFRC522.h>

//Costanti per i collegamenti dei PIN
//PIN dell'RFID
#define SDA_DIO 10     //53 per Mega
#define RESET_DIO 9
#define delayRead 1000 //Tempo di ritardo (Attesa)

//Variabili globali
//Viene creata una l'istanza dell'RFID dalla libreria
MFRC522 RC522(SDA_DIO, RESET_DIO);
//Codice della tessera autorizzata
String codiceAutorizzato = "117414340";
int mode = 0;
int StatoSensore = 0;
byte i;
int led=6;
void setup()
{
  //OUTPUT a console
  Serial.begin(9600);
 
  pinMode(2, INPUT);
  pinMode(7, OUTPUT);
  //Abilita SPI
  SPI.begin();
 
  //Viene inizilizzato RFID
  RC522.PCD_Init();
 
  //OUTPUT a console
  Serial.println("**ALLARM-DUINO**");
  Serial.println("Setup");
  //Controlla se l'RFID è collegato
  ShowReaderDetails();
}
   
void loop()
{
 
     //Controllo se è stato riconosciuto un codice, se non lo è riparto con il loop della funzione
    if (RC522.PICC_IsNewCardPresent())
    {
   return;
    }

    //Se viene letta una tessera
    if (RC522.PICC_IsNewCardPresent())
    {
        //Aquisisco il codice della tessera
        RC522.PICC_ReadCardSerial();
       
        //Variabile che conterrà il codice letto dalla tessera
        String codiceLetto ="";
       
        //OUTPUT a console
        Serial.println("Codice delle tessera letto:");
   
        //Carico il codice della tessera
        for(i = 0; i<RC522.uid.size; i++)
        {
          codiceLetto+= String (RC522.uid.uidByte);
          codiceLetto.toUpperCase();
        }
       
        Serial.println(codiceLetto);
        delay(delayRead);
        Serial.println();
        Serial.println();
       
   
        if(verificaCodice(codiceLetto))
        {
            Serial.println("Tessera autorizzata");
            if(mode==0)
            {
             
              mode++;
            }
            else
            {
             
              mode--;
            }
           
         }
         else
         {
            Serial.println("Tessera non autorizzata");
           
         }
        delay(delayRead); 
        }

 
  //Se spento
  if(mode == 0)
  {
   
   
    //OUTPUT a console
    Serial.println("ALLARME SPENTO");
   
  }
  else
  {
    suono();
    /* Temporary loop counter */
    Serial.println("ALLARME ATTIVO");
   
    delay(delayRead);
   
   // Se viene letta una tessera

  }
}


  // Questa funzione verifica se il codice Letto è autorizzato
  boolean verificaCodice(String codiceLetto)
  {
    if(codiceLetto.equals(codiceAutorizzato))
    {
      return true;
    }
    else
    {
      return false;
    } 
  }
 
  //controllo che il lettore RFID sia collegato
  void ShowReaderDetails()
  {
   // Get the MFRC522 software version
   byte v = RC522.PCD_ReadRegister(RC522.VersionReg);
   Serial.print(F("MFRC522 Software Version: 0x"));
   Serial.print(v, HEX);
   if (v == 0x91)
      Serial.print(F(" = v1.0"));
   else if (v == 0x92)
      Serial.print(F(" = v2.0"));
   else
      Serial.print(F(" (unknown)"));
   Serial.println("");
   // When 0x00 or 0xFF is returned, communication probably failed
   if ((v == 0x00) || (v == 0xFF))
        {
      Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?"));
   }
  }
 
  void suono()
  {
   
    //leggo segnale Sensore PIR
    StatoSensore = digitalRead(2);
    //invia i dati solo se rilevo un movimento
    if (StatoSensore == HIGH)
    {
      digitalWrite(led, HIGH);   // accendo il led
      ///codice per il suono
      delay (2000);
      digitalWrite(7, HIGH);
      //frequenza del suono
      delayMicroseconds(1000);
      digitalWrite(7, LOW);
      delayMicroseconds(100);
    }
    else
    {
      digitalWrite(led, LOW);
    } 

  }

ciao

Jack_Bear

Come è fatto questo componente "beep" ?
Come è collegato ?

A parte questo, tutto il codice è un po' strano in diversi punti... ma se dici che funzione e l'unica cosa che non funziona è il beep che non fa beep, allora concentriamoci sulla funzione suono().

ciao paulus1969 grazie mille per la risposta,
In allegato c'è l'immagine del circuito.
il programma legge la tessera, accende e spegne l'allarme e se l'allarme è acceso e rileva movimento accende il led (quindi entra nella funzione suono()) ma non fa partire il beep. Il beep è funzionante e con lo stesso codice della funzione suono() in uno sketch isolato funziona.
Non riesco a capire il problema :o

ciao e grazie

Non fare le foto al buio. Sulla foto si vede che hai 2 Led accesi. Fai la foto a Arduino spento.

Ciao Uwe

ciao

ecco la foto con arduino spento

grazie e ciao

Ciao a tutti,

ho letto rapidamente il codice e, guardando la funzione suona(), mi sono reso conto che tu ti limiti a inviare un singolo segnale con digitalWrite() e delayMicroseconds(). Per far suonare il buzzer, però, è necessaria una serie più lunga di impulsi. Per generarli usa la funzione tone().
Sostituisci a

digitalWrite(7, HIGH);
//frequenza del suono
delayMicroseconds(1000);
digitalWrite(7, LOW);
delayMicroseconds(100);

questo codice:

tone(7,1047);
delay(1000);
noTone();

dove 7 è il pin del buzzer e 1047 la frequenza del suono (nota).
Penso sia possibile evitare il delay e il noTone e dire a tone direttamente la durata del suono, ma non l'ho mai provato. Comunque se vuoi la pagina ufficiale è qui

GRAZIE MILLE ptia!!!!!
ORA FUNZIONA
GRAZIE
GRAZIE
GRAZIE!!!!!

Allora togli la resistenza che hai messo al Buzzer e ne aggiungi una al LED.
Ciao Uwe