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?
P.S.:
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento
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);
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?
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);
}
}
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
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