Comunicazione tra due Arduino e sim900 su I2C

Buongiorno a tutti. La SIM900 lancia SMS un po' come gli pare. Ho 2 Arduino che li chiamerò ARDU1 e ARDU2. ARDU1 ha configurato 5 pin di output. Gli stessi pin sono configurati su ARDU2 come pin di input. Quando si scatena un evento su ARDU1 il pin, o i pin, vanno alti. ARDU2 riceve lo stato logico e comuninica tramite seriale alla SIM900. Su seriale gli ingressi di ARDU2 (SIM900) sono perfetti. Scrive 0 se 0, scrive 1 se è 1. Lo sketch l'ho riscritto un po' di volte dichiarando dei semplici input, poi degli input pullup (molto stabile). Il trattamento delle variabili come ultima spiaggia le ho dichiarate bool. Il problema è che la SIM900 invia SMS un po' come gli pare.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);//TX RX
int umial = 4;
int tempal = 5;
int temp1al = 6;
int temp2al = 7;
int temp3al = 8;
int voltal = 9;
void setup()
{
  Serial.begin(9600);
  mySerial.begin(9600);
  Serial.println("Inizializzazione");
  delay(5000);
  mySerial.println("AT+CSQ"); //segale rete da 0 a 31
  Serial.println("AT+CSQ");
  mySerial.println("AT+CCID"); //informazioni SIM
  Serial.println("AT+CCID");
  mySerial.println("AT+CREG?"); //SIM registata in rete
  Serial.println("AT+CREG?");
  delay(1000);
  mySerial.println("AT+CMGF=1");
  Serial.println("AT+CMGF=1");
  mySerial.println("AT+CMGS=\"+39xxxxx\"");
  Serial.println("AT+CMGS=\"+39xxxxx\"");
  mySerial.print("Test invio SMS");
  Serial.println("Test invio SMS");
  mySerial.write(26);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  delay (20000);
}
void loop()
{
  bool umial = digitalRead(4);
  Serial.print("UR ");
  Serial.println (umial);
  if (umial = 1)
  {
    mySerial.println("AT+CMGS=\"+39xxxxxx\"");
    mySerial.print("ALLARM UR");
    mySerial.write(26);
    delay (20000);
  }

etc ripetizione per le altre variabili

Qualche idea? Grazie!

@anon7706864: ti prego di notare che il codice va racchiuso negli appositi tag (quelli indicati così: </>) come ho corretto io e NON come citazione (inserendo nella prima riga il carattere >) come avevi fatto tu. Tienilo presente per i prossimi tuoi post. Grazie.

Guglielmo

if (umial == true)

O ancora meglio

if (true == umial)

Se lo avessi scritto così il compilatore di avrebbe avvertito, dicendoti che non può assegnare umial a una costante.

Ciao.

Grazie Guglielmo

Grazie Maurotec. Se uso true false le variabili vanno bene o le devo dichiarare in altro modo?

Dipende ... se vuoi usare true e false la cosa migliore da fare è dichiarere le variabili che debbono assumere tali valori come "bool" così poi ci pensa il compilatore.

Difatti, se ricordo bene, in 'C' sono definite tramire della #define che valgono:

#define true 1
#define false 0

... mentre in CPP esiste proprio il tipo booleano e sono definite true e false come tali (e anche qui credo dipenda dalla versione di CPP).

Considera inoltre che nel file Arduino.h, che fa parte del "core" di Arduino, si trova la seguente riga:

typedef bool boolean;

... quindi, quando dichiari un tipo "boolean" in realtà stai appunto definendo un "bool" del CPP.

Guglielmo

EDIT: Ho corretto il post perché avevo invertito le definizioni della typedef :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.