Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SoftwareSerial.h>
- const byte led = 13;
- const byte rxPin = 8;
- const byte txPin = 9;
- const int EnTxPin = 2; // HIGH:TX y LOW:RX
- // Configurem un nou objecte Softserial
- SoftwareSerial rs485 (rxPin, txPin);
- int red = 0, green = 0, blue = 0;
- //Pins ID
- int redPin = 6; //Dada a llegir
- int greenPin = 5;
- int bluePin = 3;
- //Variables Globals
- char Paquet[18];
- String Trama_Sencera;
- String ID_Desti;
- String ID_Font;
- String Funcio;
- String FuncioRGB;
- String FuncioDelay;
- String temps_delay;
- String iteracions;
- String Red;
- String Green;
- String Blue;
- String Dades;
- bool funcio = false;
- /***************Configuració Inicial**************/
- void setup() {
- //Configurem IO
- pinMode(redPin, OUTPUT); //definir pin sortida
- pinMode(greenPin, OUTPUT); //definir pin sortida
- pinMode(bluePin, OUTPUT); //definir pin sortida
- pinMode(led, OUTPUT); //definir pin sortida
- // Definim els modes de funcionament per TX i RX
- pinMode(rxPin, INPUT);
- pinMode(txPin, OUTPUT);
- pinMode(EnTxPin, OUTPUT);
- // Configura la velocitat del nou objecte Softserial
- rs485.begin(9600);
- rs485.setTimeout(100); //Establim un temps d'espera de 100 ms
- //Configura veloctiat del port serie
- Serial.begin(9600);
- digitalWrite(EnTxPin, LOW); //RS485 com a mestre, però per defecte posem com a escolta
- }
- /******** LECTURA PORT SERIE + VALIDAR MIDA DEL PAQUET *********/
- int LecturaPort()
- {
- int num_caracter;
- if (Serial.available() > 0)
- {
- while (Serial.available() > 0)
- {
- char caracter = Serial.read();
- if (caracter == '[')
- {
- // iniciem el recompte de bit
- num_caracter = 0;
- }
- else if (caracter == ']')
- {
- // Recompte de caracters
- if (num_caracter == 18)
- {
- return 1; //Paquet correcte
- }
- else
- {
- return 2; //Paquet incorrecte
- }
- }
- else
- {
- Paquet [num_caracter] = caracter; //Guardem caracters dins de l'array Paquet
- num_caracter++; //Incrementeme la posició de l'array
- }
- }
- }
- else
- {
- return 0;
- }
- }
- /******** LECTURA RS-485 + VALIDAR MIDA DEL PAQUET *********/
- int LecturaPort_rs485()
- {
- int num_caracter;
- if (rs485.available() > 0)
- {
- while (rs485.available() > 0)
- {
- char caracter = rs485.read();
- if (caracter == '[')
- {
- // iniciem el recompte de bit
- num_caracter = 0;
- }
- else if (caracter == ']')
- {
- // Recompte de caracters
- if (num_caracter == 18)
- {
- return 1; //Paquet correcte
- }
- else
- {
- return 2; //Paquet incorrecte
- }
- }
- else
- {
- Paquet [num_caracter] = caracter; //Guardem caracters disn l'array Paquet
- num_caracter++; //Incrementeme la posició de l'array
- }
- }
- }
- else
- {
- return 0;
- }
- }
- /******** FUNCIÓ SI EL PAQUET REBUT ES PER MI *********/
- void comprova_funcio(String temps_delay, String iteracions, int Estat_Paquet, String red, String green, String blue ) {
- int temps = String(temps_delay).toInt();
- int f = String(iteracions).toInt();
- int delay_t = temps * 100;
- int vermell = String(red).toInt();
- int verd = String(green).toInt();
- int blau = String(blue).toInt();
- if (Funcio == "1") {
- digitalWrite(led, HIGH);
- //analogWrite(redPin, vermell);
- //analogWrite(greenPin, verd);
- //analogWrite(bluePin, blau);
- } else if (Funcio == "2") {
- analogWrite(redPin, vermell);
- analogWrite(greenPin, verd);
- analogWrite(bluePin, blau);
- } else if (Funcio == "3") {
- for (int i = 0; i <= f; i++) {
- analogWrite(redPin, vermell);
- analogWrite(greenPin, verd);
- analogWrite(bluePin, blau);
- delay(delay_t);
- analogWrite(redPin, 0);
- analogWrite(greenPin, 0);
- analogWrite(bluePin, 0);
- delay(delay_t);
- }
- f = 0;
- Funcio = "0";
- //Reinicialitzar Variables
- ID_Desti = "";
- ID_Font = "";
- Trama_Sencera = "";
- Estat_Paquet = 0;
- Serial.flush();
- } else if (Funcio == "0") {
- digitalWrite(led, LOW);
- //analogWrite(redPin, 0);
- //analogWrite(greenPin, 0);
- //analogWrite(bluePin, 0);
- //Serial.flush();
- } else {
- Serial.println("FUNCIÓ NO RECONEGUDA");
- }
- Estat_Paquet = 0;
- }
- /**************Programa Principal***************/
- void loop() {
- // put your main code here, to run repeatedly:
- // LECTURA POR SERIE
- int Estat_Paquet = LecturaPort();
- int Estat_Paquet2 = LecturaPort_rs485();
- if (Estat_Paquet == 1 || Estat_Paquet2 == 1)
- {
- //Reinicialitzar Variables
- ID_Desti = "";
- ID_Font = "";
- Trama_Sencera = "";
- Estat_Paquet = 0;
- //Passar array a string
- for (int i = 0; i <= 17; i++)
- {
- Trama_Sencera = Trama_Sencera + Paquet[i];
- }
- Serial.println("S ha rebut la trama correctament, longitud -> " + Trama_Sencera.length());
- Serial.println("ID Destí -> " + Trama_Sencera.substring(0, 2)); ID_Desti = Trama_Sencera.substring(0, 2);
- Serial.println("ID Font -> " + Trama_Sencera.substring(2, 4)); ID_Font = Trama_Sencera.substring(2, 4);
- Serial.println("ID Funció -> " + Trama_Sencera.substring(4, 5)); Funcio = Trama_Sencera.substring(4, 5);
- Serial.println("ID Dades -> " + Trama_Sencera.substring(5, 18)); Dades = Trama_Sencera.substring(5, 18);
- FuncioRGB = Dades.substring(0, 9);
- FuncioDelay = Dades.substring(9, 13);
- temps_delay = FuncioDelay.substring(0, 2);
- iteracions = FuncioDelay.substring(2, 4);
- Red = FuncioRGB.substring(0, 3);
- Green = FuncioRGB.substring(3, 5);
- Blue = FuncioRGB.substring(5, 8);
- /**************COMPROVA PER QUI ÉS EL PAQUET REBUT ***************/
- if (ID_Desti == "20") {
- comprova_funcio(temps_delay, iteracions, Estat_Paquet, Red, Green, Blue);
- } else {
- digitalWrite(EnTxPin, HIGH); //RS485 com a mestre
- rs485.print("["+Trama_Sencera+"]");
- delay(500);
- digitalWrite(EnTxPin, LOW); // Torna a posar en escolta
- //rs485.flush();
- //Serial.flush();
- }
- Estat_Paquet = 0;
- Estat_Paquet2 = 0;
- }
- else if (Estat_Paquet > 1 || Estat_Paquet2 > 1)
- {
- Serial.println("Paquet erroni");
- Estat_Paquet = 0;
- Estat_Paquet2 = 0;
- }
- }
- /*
- while(Serial.available() > 0){
- // BUSCA LA SEGÜENT CADENA DE NÚMEROS ENTERS VÀLIDS I ASSIGNA EL VALOR CONVERTIT A ENTER A LA VARIABLE CORRESPONENT AL COLOR
- red = Serial.parseInt();
- // TORNA A BUSCAR
- green = Serial.parseInt();
- // TORNA A BUSCAR
- blue = Serial.parseInt();
- // IMPRIMIM PER PANTALLA ELS VALORS
- Serial.println(red);
- Serial.println(green);
- Serial.println(blue);
- analogWrite(redPin,red);
- analogWrite(greenPin,green);
- analogWrite(bluePin,blue);
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement