Go Down

Topic: Voice recognize geeetech (Read 942 times) previous topic - next topic

Etabeta2018

#15
Jun 20, 2018, 10:56 pm Last Edit: Jun 20, 2018, 11:02 pm by Etabeta2018
Salve ho fatto qualche prova ma niente da fare riconosce sempre tutto,è esattamente come hai detto tu. Debbo solo provare a registrare tutto da capo .Adesso sono completamente impantanato.Questo è il codice modificato su tuo consiglio, ho tentato di aggiungere un'altra if ma niente da fare.
Code: [Select]
#include <SoftwareSerial.h>
int cuc = 12;
int uno = 11;
int due = 10;
int por = 9;
int cal = 8;
int cli = 13;
//-------------------------
int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
int val6 = 0;
int val7 = 0;
int val8 = 0;
int val9 = 0;
int g1=0x21;
int g2=0x22;
byte com = 0;
SoftwareSerial Speech(5, 6); // RX, TX
void setup()
{
  Serial.begin(9600);
  Speech.begin(9600);
  pinMode(cli, OUTPUT);//inserito causa accensione fievole del led
  pinMode(cuc, OUTPUT);
  pinMode(uno, OUTPUT);
  pinMode(due, OUTPUT);
  pinMode(por, OUTPUT);
  pinMode(cal, OUTPUT);
  pinMode(5, INPUT);//RX
  pinMode(6, OUTPUT); //TX
  delay(2000);
  Speech.write(0xAA);
  Speech.write(0x37);
  delay(1000);
  Speech.write(0xAA);
  Speech.write(0x21);
}
void loop() {
  val8 = digitalRead(cuc);
  if (val8 == HIGH) {
    Speech.write(0xAA);
    Speech.write(0x37);
    delay(2000);
    Speech.write(0xAA);
    Speech.write(0x22);
    delay(2000);
  }
  if (g2==0x22){
   
  }
 
 if (Speech.available())
  {
    com = Speech.read();
    switch (com) {
      case 0x11:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        val1 = digitalRead(cuc);
        if (val1 == LOW) {
          digitalWrite(cuc, HIGH);
          Serial.print("luci cucina ");
          Serial.println("  pin 12 HIGH");
        }
        else {
          digitalWrite(cuc, LOW);
          Serial.print("cucina  spenta");
          Serial.println(" pin 12 low");
        }
        break;
      case 0x12://stanza uno(byte lettura18)
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        val8 = digitalRead(uno);
        if (val8 == LOW) {
          digitalWrite(uno, HIGH);
          Serial.print("luci   accese");
          Serial.println(" pin 11 alto");
        }
        else {
          digitalWrite(uno, LOW);
          Serial.print("led spento");
          Serial.println(" pin 11 basso");
        }
        break;
      case 0x13:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);

        val3 = digitalRead(due);
        Serial.print(" stanza accesa");
        Serial.println(" pin 10 alto");
        if (val3 == LOW) {
          digitalWrite(due, HIGH);
        }
        else {
          digitalWrite(due, LOW);
          Serial.print("stanza spenta");
          Serial.println(" pin 10 basso");
        }
        break;
        case 0x14:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        val4 = digitalRead(por);
        if (val4 == LOW) {
          digitalWrite(por, HIGH);
          Serial.println("port");
        }
        else {
          digitalWrite(por, LOW);
        }
      case 0x15:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);

        val5 = digitalRead(cal);
        if (val5 == LOW) {
          digitalWrite(cal, HIGH);
          Serial.println("Caldaia accesa");
        }
        else {
          digitalWrite(cal, LOW);
        }
        break;
      case 0x16://clima
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);

        val5 = digitalRead(cli);
        if (val5 == LOW) {
          digitalWrite(cli, HIGH);
          Serial.println("Clima acceso");
          Serial.println(com);
        }
        else {
          digitalWrite(cli, LOW);
        }
       break;
    }
  }
}

Etabeta2018

#16
Jun 21, 2018, 07:10 am Last Edit: Jun 21, 2018, 07:12 am by Etabeta2018
Giorno ho provato ha riscrivere nuovamente ma debbo lavorarci ancora su,pero sembra che un passo avanti lo abbia fatto.Adesso se val8 è alta si ferma li e non prosegue debbo capire perchè,se bassa prosegue normale.Questo è il nuovo codice
Code: [Select]
[code]
#include <SoftwareSerial.h>
int cuc = 12;
int uno = 11;
int due = 10;
int por = 9;
int cal = 8;
int cli = 13;
//-------------------------
int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
int val6 = 0;
int val7 = 0;
int val8 = 0;
int val9 = 0;
int g1=0x21;
int g2=0x22;
byte com = 0;
SoftwareSerial Speech(5, 6); // RX, TX
void setup()
{
  Serial.begin(9600);
  Speech.begin(9600);
  pinMode(cli, OUTPUT);//inserito causa accensione fievole del led
  pinMode(cuc, OUTPUT);
  pinMode(uno, OUTPUT);
  pinMode(due, OUTPUT);
  pinMode(por, OUTPUT);
  pinMode(cal, OUTPUT);
  pinMode(5, INPUT);//RX
  pinMode(6, OUTPUT); //TX
  delay(2000);
  Speech.write(0xAA);
  Speech.write(0x37);
  delay(1000);
  Speech.write(0xAA);
  Speech.write(0x21);
}
void loop() {
  val8 = digitalRead(cuc);
  if (val8 == HIGH) {
    Speech.write(0xAA);
    Speech.write(0x37);
    delay(2000);
    Speech.write(0xAA);
    Speech.write(0x22);
    delay(2000);
     }
    //______________
    if (Speech.available())
  {
    com = Speech.read();
    switch (com) {
      case 0x11:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        val1 = digitalRead(cuc);
        if (val1 == LOW) {
          digitalWrite(cuc, HIGH);
          Serial.print(" cucina ");
          Serial.println("  pin 12 HIGH");
        }
        else {
          digitalWrite(cuc, LOW);
          Serial.print("cucina  spenta");
          Serial.println(" pin 12 low");
        }
        break;
      case 0x12://stanza uno(byte lettura18)
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        val8 = digitalRead(uno);
        if (val8 == LOW) {
          digitalWrite(uno, HIGH);
          Serial.print("luci   accese");
          Serial.println(" pin 11 alto");
        }
        else {
          digitalWrite(uno, LOW);
          Serial.print("led spento");
          Serial.println(" pin 11 basso");
        }
        break;
    }
  }
 
  if (g2==0x22){
    //_________________
  //}
 
 if (Speech.available())
  {
    com = Speech.read();
    switch (com) {
      case 0x11:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        val1 = digitalRead(cuc);
        if (val1 == LOW) {
          digitalWrite(cuc, HIGH);
          Serial.print("luci cucina ");
          Serial.println("  pin 12 HIGH");
        }
        else {
          digitalWrite(cuc, LOW);
          Serial.print("cucina  spenta");
          Serial.println(" pin 12 low");
        }
        break;
      case 0x12://stanza uno(byte lettura18)
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        val8 = digitalRead(uno);
        if (val8 == LOW) {
          digitalWrite(uno, HIGH);
          Serial.print("luci   accese");
          Serial.println(" pin 11 alto");
        }
        else {
          digitalWrite(uno, LOW);
          Serial.print("led spento");
          Serial.println(" pin 11 basso");
        }
        break;
      case 0x13:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);

        val3 = digitalRead(due);
        Serial.print(" stanza accesa");
        Serial.println(" pin 10 alto");
        if (val3 == LOW) {
          digitalWrite(due, HIGH);
        }
        else {
          digitalWrite(due, LOW);
          Serial.print("stanza spenta");
          Serial.println(" pin 10 basso");
        }
        break;
        case 0x14:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        val4 = digitalRead(por);
        if (val4 == LOW) {
          digitalWrite(por, HIGH);
          Serial.println("port");
        }
        else {
          digitalWrite(por, LOW);
        }
      case 0x15:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);

        val5 = digitalRead(cal);
        if (val5 == LOW) {
          digitalWrite(cal, HIGH);
          Serial.println("Caldaia accesa");
        }
        else {
          digitalWrite(cal, LOW);
        }
        break;
      case 0x16://clima
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);

        val5 = digitalRead(cli);
        if (val5 == LOW) {
          digitalWrite(cli, HIGH);
          Serial.println("Clima acceso");
          Serial.println(com);
        }
        else {
          digitalWrite(cli, LOW);
        }
       break;
    }
  }
}

}




[/code]

docdoc

Intanto posta (copia/incolla sempre nei tag "code") cosa scrive sul monitor seriale quando fai girare il programma.

Ma devi anche spiegare meglio cosa pensi che debba fare, ossia il processo, perché perché dal codice non si capisce...

Ad esempio vedo che leggi il pin 12 (cucina) e lo memorizzi in val8 (ma si possono evitare sti nomi che non significano nulla?) poi vedi è HIGH e se lo è imposti il gruppo 2. Intanto questo lo fai continuamente finché è HIGH mentre (immagino) dovresti farlo solo quando passa da LOW a HIGH, una sola volta!

In ogni caso poi vedi se ricevi un comando speech, se è 0x11 leggi un'altra volta dal pin 12 (perché?) e lo metti in val1 (?) quindi se è LOW lo metti HIGH altrimenti lo metti LOW (quindi inverti ed è ok).

Diciamo quindi che lo metti HIGH, a quel punto il loop() entra nella prima if() e imposta il gruppo 2. A quel punto che deve fare?

Insomma, prova a descrivere le cose che dovrebbe leggere o fare, e mettile poi come se fossero dei commenti al codice quindi strutturati ad esempio:

Code: [Select]
// Leggi lo stato del pin cucina
// se è alto
  // Imposta Gruppo 2
// Leggi dalla scheda speech
  // Se ricevo il comando 0x11
    // Inverti il valore del pin cucina
  // Se ricevo il comando 0x12
    // ... eccetera


A quel punto potrei avere la traccia per inserire sotto ad ogni commento tutte le istruzioni che realizzano la cosa descritta.




Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

Etabeta2018

#18
Jun 21, 2018, 09:29 pm Last Edit: Jun 21, 2018, 09:30 pm by Etabeta2018
E' ancora un casino ma sembra incominciare a rispondere ai comandi, solo che è un po troppo lento debbo ancora capire il perché. Il nuovo codice è questo vedi i casini che ho fatto.
Code: [Select]
[code]
#include <SoftwareSerial.h>
int pin1 = 12;
int pin2 = 11;
int pin3 = 10;
int pin4 = 9;
int pin5 = 8;
int pin6 = 13;
//-------------------------
int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
int val6 = 0;
int val7 = 0;
int val8 = 0;
int val9 = 0;
int g1 = 0x21;
int g2 = 0x22;
byte com = 0;
SoftwareSerial Speech(5, 6); // RX, TX
bool onetime = true;
void setup()

{
  Serial.begin(9600);
  Speech.begin(9600);
  pinMode(pin1, OUTPUT);//inserito causa accensione fievole del led
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);
  pinMode(pin5, OUTPUT);
  pinMode(pin6, OUTPUT);
  pinMode(5, INPUT);//RX
  pinMode(6, OUTPUT); //TX
  delay(2000);
  Speech.write(0xAA);
  Speech.write(0x37);
  delay(1000);
  Speech.write(0xAA);
  Speech.write(0x21);
}
void loop() {
  val8 = digitalRead(pin1);
  if (val8 == HIGH)
    if (onetime)
    {
      Speech.write(0xAA);
      Speech.write(0x37);
      delay(2000);
      Speech.write(0xAA);
      Speech.write(0x22);
      delay(2000);
    }
  //______________
  if (Speech.available())
  {
    com = Speech.read();
    switch (com) {
      case 0x11:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        Serial.print(com, DEC);
        val1 = digitalRead(pin6);
        if (val1 == LOW) {
          digitalWrite(pin6, HIGH);
          Serial.print(" case11g2IGH ");

        }
        else {
          digitalWrite(pin6, LOW);
          Serial.print("case11g2LOW");
          onetime = false;
        }
        break;
      case 0x12:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        val8 = digitalRead(pin2);
        if (val8 == LOW) {
          digitalWrite(pin2, HIGH);
          Serial.print("case12g2IGH");

        }
        else {
          digitalWrite(pin2, LOW);
          Serial.print("case12g2OW");
        }
        break;
    }
  }

  //
  //_________________
  //}

  if (Speech.available())
  {
    com = Speech.read();
    switch (com) {
      case 0x11:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        val1 = digitalRead(pin1);
        if (val1 == LOW) {
          digitalWrite(pin1, HIGH);
          Serial.print("case11 g1HIGH ");
        }
        else {
          digitalWrite(pin1, LOW);
          Serial.println(" case11 g2 low");
        }
        break;
      case 0x12:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        val8 = digitalRead(pin2);
        if (val8 == LOW) {
          digitalWrite(pin2, HIGH);
          Serial.print("case12 HIGH");
        }
        else {
          digitalWrite(pin2, LOW);
          Serial.print("case12 g1LOW");
        }
        break;
      case 0x13:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);

        val3 = digitalRead(pin3);
        Serial.print(" case 13 g1 HIGH");
        if (val3 == LOW) {
          digitalWrite(pin3, HIGH);
        }
        else {
          digitalWrite(pin3, LOW);
          Serial.print("case12 g1 LOW");

        }
        break;
      case 0x14:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        val4 = digitalRead(pin4);
        if (val4 == LOW) {
          digitalWrite(pin4, HIGH);
          Serial.println("case13 g1 high");
        }
        else {
          digitalWrite(pin4, LOW);
        }
      case 0x15:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);

        val5 = digitalRead(pin5);
        if (val5 == LOW) {
          digitalWrite(pin5, HIGH);
          Serial.println("case15 g1 HIGH");
        }
        else {
          digitalWrite(pin5, LOW);
          Serial.println("case15 G1 LOW");
        }
        break;
      case 0x16:
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);

        val5 = digitalRead(pin6);
        if (val5 == LOW) {
          digitalWrite(pin6, HIGH);
          Serial.println("Case16 g2 HIGH");
        }
        else {
          digitalWrite(pin6, LOW);
          Serial.print ("case16 LOW");
        }
        break;
    }
  }
}






[/code]

Etabeta2018

#19
Jun 23, 2018, 12:22 am Last Edit: Jun 23, 2018, 12:26 am by Etabeta2018
Salve allora ho registrato tutto da capo e riscritto nuovamente il codice ,ma non ci sono stati cambiamenti,ti allego la visualizzazione del M.S. I primi cinque byte ricevuti si riferiscono al gruppo uno gli altri sono valori usciti pronunciando comandi (in sequenza )degli altri due gruppi .
Code: [Select]
17
Ricevuto byte 11
18
Ricevuto byte 12
19
Ricevuto byte 13
20
Ricevuto byte 14
21
Ricevuto byte 15
21
Ricevuto byte 15
21
Ricevuto byte 15
20
Ricevuto byte 14
19
Ricevuto byte 13
Ricevuto byte 13
20
Ricevuto byte 14
20
Ricevuto byte 14

 il codice è:
Code: [Select]
#include <SoftwareSerial.h>


SoftwareSerial Speech(5, 6); // RX, TX
int ledPin = 12;//uscita digitale  pin 12
int redPin = 11; // uscita digitale  pin 11
int greenPin = 10; // uscita digitale  pin 10
int bbPin = 9;//uscita digitale  pin9
int bluePin = 8; // uscita digitale  pin 8
int apin = 13;
int bpin = 7;
int cpin = 4;
int dpin = 3;
int epin = 2;
//-------------------------
int val1 = 0; // iniziazzione della variabile e resa uguale a zero
int val2 = 0; // variabile per memorizzare il valore letto
int val3 = 0; // variabile per memorizzare il valore letto
int val4 = 0; // variabile per memorizzare il valore letto
int val5 = 0; // variabile per memorizzare il valore letto
int val6 = 0;
int val7 = 0;
int val8 = 0;
int val9 = 0;
byte com = 0; //reply from voice recognition

void setup()
{
  Serial.begin(9600);
  Speech.begin(9600);
    pinMode(ledPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT); // sets the greenPin to be an output
  pinMode(bluePin, OUTPUT); // sets the bluePin to be an output
  pinMode(bbPin, OUTPUT);
  pinMode(apin, OUTPUT);
  pinMode(bpin, OUTPUT);
  pinMode(cpin, OUTPUT);
  pinMode(dpin, OUTPUT);
  pinMode(epin, OUTPUT);
  delay(2000);
  Speech.write(0xAA);      
  Speech.write(0x37);
  delay(1000);
  Speech.write(0xAA);
  Speech.write(0x21);    


}

void loop()
{
  while (Speech.available())
  {
    com = Speech.read();
    Serial.println(com);
    switch (com)
    {

                  case 0x11:
        val1 = digitalRead(ledPin);
        if (val1 == LOW) {
          digitalWrite(ledPin, HIGH);
           Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        else {
          digitalWrite(ledPin, LOW);
          Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
      
        }
        break;
      
      case 0x12:
        val2 = digitalRead(redPin);
        if (val2 == LOW) {
          digitalWrite(redPin, HIGH);
           Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        
        }
        else {
          digitalWrite(redPin, LOW);
           Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        
        }

        break;
    
      case 0x13:
        val3 = digitalRead(greenPin);
         Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
      
        if (val3 == LOW) {
          digitalWrite(greenPin, HIGH);
        }
        else {
          digitalWrite(greenPin, LOW);
           Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        
        }
        break;
      
      case 0x14:
        {
          digitalWrite(bbPin, HIGH);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
          delay(2000);              
          digitalWrite(bbPin, LOW);  
        }
        break;
      
      case 0x15:
        val5 = digitalRead(bluePin);
        if (val5 == LOW) {
          digitalWrite(bluePin, HIGH);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        else {
          digitalWrite(bluePin, LOW);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);

        }
        break;
      
      case 0x16://red
        val5 = digitalRead(apin);
        if (val5 == LOW) {
          digitalWrite(apin, HIGH);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        else {
          digitalWrite(apin, LOW);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        break;
      
      case 0x17://black
        val5 = digitalRead(bpin);
        if (val5 == LOW) {
          digitalWrite(bpin, HIGH);
             Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        else {
          digitalWrite(bpin, LOW);
             Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        break;
      
      case 0x18:
        val5 = digitalRead(8);
        if (val5 == LOW) {
          digitalWrite(cpin, HIGH);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        else {
          digitalWrite(cpin, LOW);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        break;
      
      case 0x19:
        val5 = digitalRead(dpin);
        if (val5 == LOW) {
          digitalWrite(dpin, HIGH);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        else {
          digitalWrite(dpin, LOW);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        break;

    
      case 0x20:
        val5 = digitalRead(epin);
        if (val5 == LOW) {
          digitalWrite(epin, HIGH);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        else {
          digitalWrite(epin, LOW);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        break;
    
      case 0x21:
        val5 = digitalRead(8);
        if (val5 == LOW) {
          digitalWrite(8, HIGH);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        else {
          digitalWrite(8, LOW);
        }
        break;
      
      case 0x22:
        val5 = digitalRead(8);
        if (val5 == LOW) {
          digitalWrite(8, HIGH);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        else {
          digitalWrite(8, LOW);
        }
        break;
      
      case 0x23:
        val5 = digitalRead(8);
        if (val5 == LOW) {
          digitalWrite(8, HIGH);
             Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        else {
          digitalWrite(8, LOW);
        }
        break;
      
      case 0x24:
        val5 = digitalRead(8);
        if (val5 == LOW) {
          digitalWrite(8, HIGH);
             Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        else {
          digitalWrite(8, LOW);
        }
        break;
      
      case 0x25:
        val5 = digitalRead(8);
        if (val5 == LOW) {
          digitalWrite(8, HIGH);
              Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        }
        else {
          digitalWrite(8, LOW);
        }
        break;
        
    }
  }
}


Etabeta2018

#20
Jun 23, 2018, 06:47 pm Last Edit: Jun 23, 2018, 07:14 pm by Etabeta2018
Allora sono di nuovo qui faccio tutto io domanda e risposta. Ho ricompilato di nuovo il codice ,tanto per cambiare ,sembra funzionare bene anche se lo speech imbroglia un po i comandi ed penso che sia lui perché ho provato anche con un codice molto semplice .Ora volevo sapere se l'ultimo che ho riscritto ci sono cavolate all'interno o può andare. Tu mi dirai(scusami se ti do del tu) ma se funziona qual è il problema .Voglio il consiglio di un esperto per capire cosa posso migliorare o dove c'è l'errore grazie.
Code: [Select]
[code]
#include <SoftwareSerial.h>
int pin2 = 2;
int pin3 = 3;
int pin4 = 4;
int pin7 = 7;
int pin8 = 8;
int pin9 = 9;
int pin10 = 10;
int pin11 = 11;
int pin12 = 12;
int pin13 = 13;
int x = 0;
//-------------------------
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val7 = 0;
int val8 = 0;
int val9 = 0;
int val10 = 0;
int val11 = 0;
int val12 = 0;
int val13 = 0;

byte com = 0;
SoftwareSerial Speech(5, 6); // RX, TX
bool onetime = true;
void setup()
{
  Serial.begin(9600);
  Speech.begin(9600);
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);
  pinMode(pin7, OUTPUT);
  pinMode(pin8, OUTPUT);
  pinMode(pin9, OUTPUT);
  pinMode(pin10, OUTPUT);
  pinMode(pin11, OUTPUT);
  pinMode(pin12, OUTPUT);
  pinMode(pin13, OUTPUT);
  pinMode(5, INPUT);//RX
  pinMode(6, OUTPUT); //TX
  delay(2000);
  Speech.write(0xAA);
  Speech.write(0x37);
  delay(1000);
  Speech.write(0xAA);
  Speech.write(0x21);
}
void loop() {
  val13 = digitalRead(pin13);
  if (val13 == HIGH)  //Se vero dovrebbe caricare il gruppo due
  {
    if (onetime) {
      Speech.write(0xAA);
      Speech.write(0x37);
      delay(2000);
      Speech.write(0xAA);
      Speech.write(0x22);
      delay(2000);
      onetime = false;
    }
    //______________
    if (Speech.available())
    {
      com = Speech.read();
      switch (com) {
        case 0x11:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          Serial.print(com, DEC);
          val2 = digitalRead(pin13);
          if (val2 == LOW) {
            digitalWrite(pin2, HIGH);
          }
          else {
            digitalWrite(pin2, LOW);
          }
          break;
        case 0x12:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          val2 = digitalRead(pin2);
          if (val2 == LOW) {
            digitalWrite(pin2, HIGH);
          }
        case 0x13:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          val4 = digitalRead(pin4);
          if (val4 == LOW) {
            digitalWrite(pin4, HIGH);
          }
          else {
            digitalWrite(pin3, LOW);
          }
          break;
        case 0x14:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          val7 = digitalRead(pin7);
          if (val7 == LOW) {
            digitalWrite(pin4, HIGH);
          }
          else {
            digitalWrite(pin7, LOW);
          }
          break;
        case 0x15:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          val13 = digitalRead(pin13);
          if (val13 == HIGH) {
            digitalWrite(pin13, LOW);
            onetime = true;
          }
          else {
            digitalWrite(pin7, LOW);
          }
          break;
      }
    }
  }
  else {
    //---------------
    if (Speech.available())
    {
      com = Speech.read();
      switch (com) {
        case 0x11:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          val8 = digitalRead(pin8);
          if (val13 == LOW) {
            digitalWrite(pin8, HIGH);
          }
          else {
            digitalWrite(pin8, LOW);
          }
          break;
        case 0x12:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          val9 = digitalRead(pin9);
          if (val9 == LOW) {
            digitalWrite(pin9, HIGH);
          }
          else {
            digitalWrite(pin9, LOW);
          }
          break;
        case 0x13:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          val10 = digitalRead(pin10);
          if (val10 == LOW) {
            digitalWrite(pin10, HIGH);
          }
          else {
            digitalWrite(pin10, LOW);
          }
          break;
        case 0x14:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          val11 = digitalRead(pin11);
          if (val11 == LOW) {
            digitalWrite(pin11, HIGH);
          }
          else {
            digitalWrite(pin11, LOW);
          }
        case 0x15:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          val13 = digitalRead(pin13);
          if (val13 == LOW) {
            digitalWrite(pin13, HIGH);
          }
          else {
            digitalWrite(pin12, LOW);
          }
          break;
      }
    }
  }
}






[/code]

docdoc

#21
Jun 25, 2018, 02:44 pm Last Edit: Jun 25, 2018, 02:45 pm by docdoc
Ok, bene. Quindi ora vuoi qualche consiglio "stilistico" immagino...

Allora iniziamo da alcune cose relativamente semplici, poi approfondiremo meglio altre cose.

1) tu definisci così i pin:

Code: [Select]
int pin2 = 2;
int pin3 = 3;
int pin4 = 4;
int pin7 = 7;
int pin8 = 8;
int pin9 = 9;
int pin10 = 10;
int pin11 = 11;
int pin12 = 12;
int pin13 = 13;

Di fatto sono variabili inutili perché il numero del pin non cambia per cui già sarebbe più corretto definirle non solo "int" ma "const int" (indica al compilatore che quel valore non può cambiare).
Ma in realtà è meglio definirli come semplici simboli costanti, definiti con le righe #define che dicono al compilatore "quando trovi questo simbolo sostituiscilo con quest'altro".
I nomi dei simboli sono per convenzione tutti maiuscoli, non è necessario ma è ormai standard.
Ad esempio scrivendo:
#define PIN2 2
dove il compilatore nel codice trova "PIN2" è come se avessi scritto "2".
Per cui quelle righe diventano:
Code: [Select]
#define PIN2 2
#define PIN3 3
#define PIN4 4
#define PIN7 7
#define PIN8 8
#define PIN9 9
#define PIN10 10
#define PIN11 11
#define PIN12 12
#define PIN13 13


2) definisci queste variabili, peraltro globali:
Code: [Select]
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val7 = 0;
int val8 = 0;
int val9 = 0;
int val10 = 0;
int val11 = 0;
int val12 = 0;
int val13 = 0;

In realtà non ti servono, perché quei valori li leggi, confronti il valore una volta e non lo usi più, ad esempio tu fai:
Code: [Select]
        case 0x11:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          val8 = digitalRead(pin8);
          if (val13 == LOW) {
            digitalWrite(pin8, HIGH);
          }
          else {
            digitalWrite(pin8, LOW);
          }
          break;

Quindi a parte il fatto che se devi invertire un pin puoi usare una forma più compatta semplicemente negando il valore attuale con l'operatore "!", questo codice è tutto più compatto e leggibile:

Code: [Select]
        case 0x11:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          digitalWrite(pin8, ! digitalRead(pin8));
          break;

3) I nomi di costanti e variabili dovrebbero essere in qualche modo significativi. Nell'esempio dei pin di sopra, a che serve dire che PIN12 vale 12? Metti direttamente 12 nel codice se lo usi così!
Invece sarebbe utile fare una cosa del tipo (è un esempio):

#define PIN_SALA 2
#define PIN_CUCINA 3
...eccetera

Nel codice sarà tutto più chiaro perché farai ad esempio:

Code: [Select]
        case 0x11:
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          digitalWrite(PIN_CUCINA, ! digitalRead(PIN_CUCINA));
          break;


Beh, questa è per ora solo una prima parte, fammi sapere cosa ne pensi e se riesci a modificare il codice in questo senso, poi vediamo il resto!
Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

Etabeta2018

#22
Jun 26, 2018, 10:18 pm Last Edit: Jun 26, 2018, 10:20 pm by Etabeta2018
Sera.Ho riscritto nuovamente il codice ed ho cercato di seguire le tue indicazioni, dico ho cercato perché penso di non essere riuscito a capirle tutte in pieno,ed in più ho aggiunto qualcosa ,più per capire come funzionano che per necessità.Sto incominciando a capire qualcosa ma come ho detto agli inizi non ne capisco nulla di programmazione.Sono un elettrico con questa passione. Tornando a noi qualche altro consiglio su come migliorare ulteriormente il codice e dove intervenire.Adesso sto cercando di fare in modo che il conteggio debba essere unico,cioè un solo valore che si aggiorni sempre.il codice è:
Code: [Select]
[code]
#include <SoftwareSerial.h>
#define PIN_CUCINA  2
#define PIN_LUCI    3
#define PIN_LUCE    4
#define PIN_CALDAIA 7
#define PIN_CLIMA   8
#define PIN_VENTILATORE 9
#define PIN_VENT   10
#define PIN_VIKY   11
//#define PIN12 12
#define SWITCH_GRUPPO 13
//-------------------------
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val7 = 0;
int val8 = 0;
int val9 = 0;
int val10 = 0;
int val11 = 0;
int val12 = 0;
int val13 = 0;
byte com = 0;
SoftwareSerial Speech(5, 6); // RX, TX
//variabile inserita affinche il programma legga il codice
//una sola volta ovvero quando è true
bool onetime = true;
//--------variabili time
unsigned long inizio = 0;//variabli per timer
unsigned int counter = 0;
void setup()
{
  Serial.begin(9600);
  Speech.begin(9600);
  pinMode( 2, OUTPUT);
  pinMode( 3, OUTPUT);
  pinMode( 4, OUTPUT);
  pinMode( 7, OUTPUT);
  pinMode( 8, OUTPUT);
  pinMode( 9, OUTPUT);
  pinMode( 10, OUTPUT);
  pinMode( 11, OUTPUT);
  //pinMode(PIN 12, OUTPUT);
  pinMode( 13, OUTPUT);
  pinMode(5, INPUT);//RX
  pinMode(6, OUTPUT); //TX
  delay(2000);
  Speech.write(0xAA);
  Speech.write(0x37);
  delay(1000);
  Speech.write(0xAA);
  Speech.write(0x21);
}
void loop() {

  val13 = digitalRead(SWITCH_GRUPPO );
  if (val13 == HIGH)  //Se vero dovrebbe caricare il gruppo due
  {
    if (onetime) //
    {
      Speech.write(0xAA);
      Speech.write(0x37);
      delay(2000);
      Speech.write(0xAA);
      Speech.write(0x22);
      delay(2000);
      onetime = false;
    }
    //________Gruppo2______
    if (Speech.available())
    {
      com = Speech.read();
      switch (com) {
        case 0x11:
          {
            Serial.print("Ricevuto byte ");
            Serial.println(com, HEX);
            digitalWrite(PIN_CLIMA, ! digitalRead(PIN_CLIMA));
            val8 = digitalRead(PIN_CLIMA );
            inizio = millis();
            if ((millis() + inizio) >= 200)
              Serial.print("  Conteggio  ");
            Serial.println(   ++counter);//conta quante volte ho acceso o spenti
            Serial.print(" Stato");
            if (val8 == LOW) Serial.println("   OFF");
            if (val8 == HIGH) Serial.println("   ON");
          }
          break;
        case 0x12: {
            Serial.print("Ricevuto byte ");
            Serial.println(com, HEX);
            digitalWrite(PIN_VENTILATORE, ! digitalRead(PIN_VENTILATORE));
            val9 = digitalRead(PIN_VENTILATORE );
            inizio = millis();
            if ((millis() + inizio) >= 200)
              Serial.print("  Conteggio  ");
            Serial.println(   ++counter);//conta quante volte ho acceso o spenti
            Serial.print(" Stato");
            if (val9 == LOW) Serial.println("   OFF");
            if (val9 == HIGH) Serial.println("   ON");
          }
        case 0x13: {
            Serial.print("Ricevuto byte ");
            Serial.println(com, HEX);
            digitalWrite(PIN_VENT, ! digitalRead(PIN_VENT));
            val10 = digitalRead(PIN_VENT );
            inizio = millis();
            if ((millis() + inizio) >= 200)
              Serial.print("  Conteggio  ");
            Serial.println(   ++counter);//conta quante volte ho acceso o spenti
            Serial.print(" Stato");
            if (val10 == LOW) Serial.println("   OFF");
            if (val10 == HIGH) Serial.println("   ON");
          }
          break;
        case 0x14: {
            Serial.print("Ricevuto byte ");
            Serial.println(com, HEX);
            digitalWrite(PIN_VIKY, ! digitalRead(PIN_VIKY));
            val11 = digitalRead(PIN_VIKY );
            inizio = millis();
            if ((millis() + inizio) >= 200)
              Serial.print("  Conteggio  ");
            Serial.println(   ++counter);//conta quante volte ho acceso o spenti
            Serial.print(" Stato");
            if (val11 == LOW) Serial.println("   OFF");
            if (val11 == HIGH) Serial.println("   ON");
          }
          break;
        case 0x15:{
          Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          digitalWrite(SWITCH_GRUPPO, ! digitalRead(SWITCH_GRUPPO));
          val13 = digitalRead(SWITCH_GRUPPO );
          inizio = millis();
          if ((millis() + inizio) >= 200)
            Serial.print("  Conteggio  ");
          Serial.println(   ++counter);//conta quante volte ho acceso o spenti
          Serial.print(" Stato");
          if (val13 == LOW) Serial.println("   OFF");
          if (val13 == HIGH) Serial.println("   ON");
          onetime = true;//onetime è diventata false percui
          //il codice non verra più letto
      }
      break;
    }
  }
}
else {
  //--------Gruppo1-------

  if (Speech.available())
  {
    com = Speech.read();
    switch (com) {
      case 0x11:
        {
          Serial.print("Ricevuto byte ");
          Serial.print(com, HEX);
          digitalWrite(PIN_CUCINA, ! digitalRead(PIN_CUCINA));
          val2 = digitalRead(PIN_CUCINA );
          inizio = millis();
          if ((millis() + inizio) >= 200)
            Serial.print("  Conteggio  ");
          Serial.println(   ++counter);//conta quante volte ho acceso o spenti
          Serial.print(" Stato");

         
          if (val2 == LOW) Serial.println("   OFF");
          if (val2 == HIGH) Serial.println("   ON");
        }
     
        break;
      case 0x12:{
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        digitalWrite(PIN_LUCI, ! digitalRead(PIN_LUCI));
          val3 = digitalRead(PIN_LUCI );
          inizio = millis();
          if ((millis() + inizio) >= 200)
            Serial.print("  Conteggio  ");
          Serial.println(   ++counter);//conta quante volte ho acceso o spenti
          Serial.print(" Stato");
          if (val3 == LOW) Serial.println("   OFF");
          if (val3 == HIGH) Serial.println("   ON");
        }
        break;
      case 0x13:{
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
        digitalWrite(PIN_LUCE, ! digitalRead(PIN_LUCE));
          val4 = digitalRead(PIN_LUCE );
          inizio = millis();
          if ((millis() + inizio) >= 200)
            Serial.print("  Conteggio  ");
          Serial.println(   ++counter);//conta quante volte ho acceso o spenti
          Serial.print(" Stato");
          if (val4 == LOW) Serial.println("   OFF");
          if (val4 == HIGH) Serial.println("   ON");
        }
        break;
      case 0x14:{
        Serial.print("Ricevuto byte ");
        Serial.println(com, HEX);
       digitalWrite(PIN_CALDAIA, ! digitalRead(PIN_CALDAIA));
          val7 = digitalRead(PIN_CALDAIA );
          inizio = millis();
          if ((millis() + inizio) >= 200)
            Serial.print("  Conteggio  ");
          Serial.println(   ++counter);//conta quante volte ho acceso o spenti
          Serial.print(" Stato");
          if (val7 == LOW) Serial.println("   OFF");
          if (val7 == HIGH) Serial.println("   ON");
        }
      case 0x15:{
        Serial.print("Ricevuto byte ");
          Serial.println(com, HEX);
          digitalWrite(SWITCH_GRUPPO, ! digitalRead(SWITCH_GRUPPO));
          val13 = digitalRead(SWITCH_GRUPPO );
          inizio = millis();
          if ((millis() + inizio) >= 200)
            Serial.print("  Conteggio  ");
          Serial.println(   ++counter);//conta quante volte ho acceso o spenti
          Serial.print(" Stato");
          if (val13 == LOW) Serial.println("   OFF");
          if (val13 == HIGH) Serial.println("   ON");
        }
        break;
    }
  }
}
}







[/code]

Etabeta2018


Go Up