Go Down

Topic: [GSM module] Arduino + Hilo Sagem problema numero (Read 381 times) previous topic - next topic

efleme

Dec 09, 2012, 03:41 pm Last Edit: Dec 09, 2012, 03:58 pm by efleme Reason: 1
Ciao a tutti!
Info
Vi spiego il mio progettino :D
Con arduino 2009 e il modulo GSM Hilo sagem vorrei realizzare un cercapersone un po' particolare.

Ad arduino sono collegati 5 led (uno per pin) e un buzzer.
pin 13 = led 1
pin 12 = led 2
pin 11 = led 3
pin 10 = led 4
pin 9  = led 5
pin 8  = buzzer
gnd    = gnd

Premetto che utilizzo l'ide v23 su Windows Seven e che non ho nessun problema a comunicare con il modulo. Anche in modalità gateway.
Cosa dovrebbe succedere? Vorrei che ad ogni squillo ricevuto si deve accendere un led ed il buzzer emmettere un suono ma ogni led corrisponde ad un numero telefonico differente.
Esempio:
se mi chiama il numero 3401432*** si deve accendere il led 1 e il buzzer
se mi chiama il numero 3332344*** si deve accendere il led 3 e il buzzer
e così via per i restanti.
Ovviamente avrò solo 5 numeri ma non importa, questo è ciò che vorrei.
E invece riesco solo a far accendere il led e a far suonare il cicalino soltanto quando legge il segno '+' e ovviamente sarebbe lentissimo comunque e non riconoscerebbe i numeri chiamanti.
Vi posto il codice.. spero riusciate a capirmi e ad indicarmi la giusta via perchè sto diventanto matto.
Code: [Select]

  int led = 13;
  int onModulePin = 2;        // the pin to switch on the module (without press on button)


char lettura; // Where to store the character read


  void switchModule(){
  digitalWrite(onModulePin,HIGH);
  delay(2000);
  digitalWrite(onModulePin,LOW);
  }
 




  void setup(){
 
  Serial.begin(9600);                // the GPRS baud rate
  delay(2000);
  pinMode(8, OUTPUT);
  pinMode(led, OUTPUT);
  pinMode(onModulePin, OUTPUT);
  switchModule(); //Turn module on

  Serial.println("AT+CRC=1;");
  delay(5000);
 


  }

  void loop(){
  while (Serial.available() > 0){
 

  lettura = Serial.read();
 
  Serial.print(lettura);
   
   if(lettura == '+'){
     buzz(8, 4186, 100);
     delay(10);
     digitalWrite(led, HIGH);
     delay(1000);
     buzz(8, 4186, 100);
     delay(10);
     digitalWrite(led, LOW);
     delay(1000);
     
     break;
   } else {
     digitalWrite(led, LOW);
     delay(1000);
    }
 }
 
  //Serial.println();
  //reset();
}



void buzz(int targetPin, long frequency, long length) {
long delayValue = 1000000/frequency/2;
long numCycles = frequency * length/ 1000;
for (long i=0; i < numCycles; i++)
{
digitalWrite(targetPin,HIGH);
delayMicroseconds(delayValue);
digitalWrite(targetPin,LOW);
delayMicroseconds(delayValue);
}
}


Go Up