Bonjour,
je suis débutant en programmation, mais j'ai quand même réussi à réaliser un téléphone avec un arduino mega, un sim808 et un clavier matriciel 4x4 et un afficheur deux lignes
pourriez-vous optimiser un peu mon programme ?
de plus, sur le sim808, il y a un vibreur.... quelqu'un aurait la fonction pour le contrôler ?
voici le code : ...accrochez vous.. ça doit être très mal codé et pas du tout optimisé mais je voulais quand même présenter quelque chose plutôt que de pomper un code sans le comprendre !
#include <Keypad.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
#include <sim900.h>
#include <Wire.h>
char Incomingch;
String data, Fdata, callnumber;
LiquidCrystal monEcran(30, 31, 32, 33, 34, 35);
SoftwareSerial gprs(10, 11);
const byte LIGNES = 4;
const byte COLONNES = 4;
const int L1 = 22;
const int L2 = 23;
const int L3 = 24;
const int L4 = 25;
const int C1 = 26;
const int C2 = 27;
const int C3 = 28;
const int C4 = 29;
char touches[LIGNES][COLONNES] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte BrochesLignes[LIGNES] = {L1, L2, L3, L4};
byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4};
char clav;
String touche[10]; // variable de stockage de la valeur de la touche appuyée
String message;
String mess1;
int i = 0;
int sonne = 0;
int decr = 0;
Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
void setup() {
Serial.begin(9600);
sim900_init(&gprs, 9600);
gprs.print("AT+CMGF=1\r");
delay(100);
gprs.print("AT+CNMI=2,2,0,0,0\r");
delay(2000);
mess1 = "En reception";
message = "Composez numero";
affiche();
}
void loop()
{
menu();
}
void menu()
{
clav = clavier.getKey();
if (clav == NO_KEY)
{ reception();
}
else
{
if (sonne != 1) {
compose();
}
}
}
void appel() {
gprs.print("ATD");
gprs.print(message);
gprs.print(";\r");
gprs.println();
clav = clavier.getKey();
while (clav != 'B') {
clav = clavier.getKey();
}
if (clav == 'B') {
gprs.print("ATH\r");
mess1 = "fin de l'appel";
message = " ";
affiche();
delay(2000);
mess1 = "En reception";
message = "Composez numero";
affiche();
// menu();
}
}
void affiche() {
monEcran.begin(16, 2); //on initialise la communication avec 16 colonnes et deux lignes
monEcran.clear(); // on efface l'écran
monEcran.print(mess1); // on écrit Bonjour
monEcran.setCursor(0, 1); //on passe à la ligne suivante
monEcran.print(message); // on finit d'écrire
}
void compose() {
while (clav != 'A' ) {
clav = clavier.getKey();
if (clav != NO_KEY) {
if (clav != 'A' ) {
if (clav != '*') {
touche[i] = clav;
i = i + 1;
message = touche[0] + touche[1] + touche[2] + touche[3] + touche[4] + touche[5] + touche[6] + touche[7] + touche[8] + touche[9];
mess1 = "numero en cours";
affiche();
}
if (clav == '*') {
if (i != 0) {
i = i - 1;
}
touche[i] = " ";
message = touche[0] + touche[1] + touche[2] + touche[3] + touche[4] + touche[5] + touche[6] + touche[7] + touche[8] + touche[9];
mess1 = "numero en cours";
affiche();
}
}
}
}
if (clav == 'A') {
delay(1000);
i = 0;
message = "+33" + touche[1] + touche[2] + touche[3] + touche[4] + touche[5] + touche[6] + touche[7] + touche[8] + touche[9];
mess1 = "composition : ";
affiche();
appel();
}
if (clav == 'B') {
i = 0;
mess1 = "En reception";
message = "Composez numero";
menu();
}
}
void reception()
{
if (gprs.available())
{
Incomingch = gprs.read();
String newchar = String (char(Incomingch));
if (Incomingch == 10 || Incomingch == 13)
{
callnumber = data;
if (callnumber.length() > 20) {
callnumber.remove(0, 11);
callnumber.remove(9, 15);
callnumber = "0" + callnumber;
mess1 = "APPEL ENTRANT";
message = callnumber;
affiche();
}
Fdata = data;
if (Fdata == "RING") {
sonne = 1;
mess1 = "ca sonne";
message = " ";
affiche();
}
if (Fdata == "NO CARRIER") {
sonne = 0;
mess1 = "appel manque";
message = " ";
affiche();
delay(2000);
mess1 = "En reception";
message = "Composez numero";
affiche();
}
data = "";
}
else
{
String newchar = String (char(Incomingch));
data = data + newchar;
}
}
if (sonne == 1) {
clav = clavier.getKey();
if (clav == 'A') {
gprs.print("ATA\r\n");
decr = 1;
}
if (clav == 'B') {
if (decr == 1) {
gprs.print("ATH\r\n");
mess1 = "fin d'appel";
message = " ";
affiche();
delay(2000);
mess1 = "En reception";
message = "Composez numero";
affiche();
sonne = 0;
}
if (decr != 1) {
gprs.print("ATH\r\n");
mess1 = "Appel rejet";
message = " ";
affiche();
delay(2000);
mess1 = "En reception";
message = "Composez numero";
affiche();
sonne = 0;
decr = 0;
}
}
}
}