Buenos dias, como digo en el titulo esoty intentando hacer una red i2c con dos arduinos, Master-mega Salve1-Uno
El tema es que cada uno de ellos por medio de la libreria Pxmatrix tiene un panel RGB 32*16 y quiero decirle al esclavo que tiene que pintar dependiendo de un numero que mande el Master.
Pero en el esclavo algo hago mas que no lo logro.
Pongo los codigo por si alguien me puede indicar.
Basicamente es, con un flanco se de subida el master pinta una cosa y manda un 1, con un flanco descente pinto otra cosa y mando un 5
El esclavo tiene que ver el 1 y el cinco y pintar cosas deacuerdo con el que le llege.
Master
#define PxMATRIX_COLOR_DEPTH 1
#define PxMATRIX_MAX_HEIGHT 16
#define PxMATRIX_MAX_WIDTH 32
#include <Wire.h>
#include <PxMatrix.h>
#include <avr/pgmspace.h>
// Pins for LED MATRIX
#define P_A 2
#define P_B 3
#define P_C 0
#define P_D 0
#define P_E 0
#define P_LAT 7
#define P_OE 8
//PxMATRIX display(32,16,P_LAT, P_OE,P_A,P_B,P_C);
//PxMATRIX display(64,32,P_LAT, P_OE,P_A,P_B,P_C,P_D);
PxMATRIX display(32,16,P_LAT, P_OE,P_A,P_B);
// Some standard colors
uint16_t myRED = display.color565(255, 0, 0);
uint16_t myGREEN = display.color565(0, 255, 0);
uint16_t myBLUE = display.color565(0, 0, 255);
uint16_t myWHITE = display.color565(255, 255, 255);
uint16_t myYELLOW = display.color565(255, 255, 0);
uint16_t myCYAN = display.color565(0, 255, 255);
uint16_t myMAGENTA = display.color565(255, 0, 255);
uint16_t myBLACK = display.color565(0, 0, 0);
unsigned long start_time=0;
uint8_t icon_index=0;
#define PIN_BOTON_A 6
byte x = 0;
String cadena_1 = "Hola";
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600);
display.begin(2);
display.setMuxPattern(BINARY);
display.setScanPattern(ZAGGIZ);
display.setPanelsWidth(1);
display.clearDisplay();
display.setTextColor(myMAGENTA);
display.setCursor(1,8);
display.print("test");
start_time = millis();
while((millis()-start_time)<3000)
display.display(20);
delay(2000);
}
void loop()
{
int flanco_A = detectaFlanco(PIN_BOTON_A);
if (flanco_A == 1)
{cadena_1 = "Hola_1";
display.clearDisplay();
scroll_text(cadena_1);
x=1;
Wire.beginTransmission(1); // transmit to device #4
Wire.write(x); // sends one byte
Wire.endTransmission(); // stop transmitting
}
if (flanco_A == -1){
cadena_1 = "Hola_2";
display.clearDisplay();
scroll_text(cadena_1);
x=5;
Wire.beginTransmission(1); // transmit to device #4
Wire.write(x); // sends one byte
Wire.endTransmission(); // stop transmitting
}
}
void scroll_text(String cadena_1)
{
display.setTextWrap(false); // we don't wrap text so it scrolls nicely
display.setTextSize(1);
display.setRotation(0);
for (int xpos=64; xpos>-140; xpos--)
{
display.setTextColor(myWHITE);
display.clearDisplay();
display.setCursor(xpos,0);
display.println(cadena_1);
start_time = millis();
while((millis()-start_time)<15)
display.display(5);
}
}
int detectaFlanco(int pin) {
//Devuelve 1 flanco ascendente, -1 flanco descendente y 0 si no hay nada
static boolean anterior_estado = digitalRead(pin);
boolean estado = digitalRead(pin);
if (anterior_estado != estado) {
if (estado == HIGH) {
anterior_estado = estado;
return 1;
}
else {
anterior_estado = estado;
return -1;
}
}
else {
return 0;
}
}
Esclavo
#define PxMATRIX_COLOR_DEPTH 1
#define PxMATRIX_MAX_HEIGHT 16
#define PxMATRIX_MAX_WIDTH 32
#include <PxMatrix.h>
#include <avr/pgmspace.h>
#include <Wire.h>
// Pins for LED MATRIX
#define P_A 2
#define P_B 3
#define P_LAT 7
#define P_OE 8
PxMATRIX display(32, 16, P_LAT, P_OE, P_A, P_B);
// Some standard colors
uint16_t myRED = display.color565(255, 0, 0);
uint16_t myGREEN = display.color565(0, 255, 0);
uint16_t myBLUE = display.color565(0, 0, 255);
uint16_t myWHITE = display.color565(255, 255, 255);
uint16_t myYELLOW = display.color565(255, 255, 0);
uint16_t myCYAN = display.color565(0, 255, 255);
uint16_t myMAGENTA = display.color565(255, 0, 255);
uint16_t myBLACK = display.color565(0, 0, 0);
unsigned long start_time=0;
uint8_t icon_index=0;
String cadena_1="Hola";
void setup() {
Serial.begin(9600);
display.begin(2);
display.setMuxPattern(BINARY);
display.setScanPattern(ZAGGIZ);
display.setPanelsWidth(1);
Wire.begin(1); // join i2c bus with address #4
Wire.onReceive(receiveEvent); // register event
display.clearDisplay();
display.setTextColor(myMAGENTA);
display.setCursor(0,8);
display.print("INICIO");
start_time = millis();
while((millis()-start_time)<3000)
display.display(20);
delay(3000);
}
void loop()
{
delay(100);
}
// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(int howMany)
{
int x;
while(1 < Wire.available()) // loop through all but the last
// {
// char c = Wire.read(); // receive byte as a character
// Serial.print(c); // print the character
// }
int x = Wire.read(); // receive byte as an integer
// Serial.println(x); // print the integer
if (x==1){cadena_1="tengo un 1";
display.clearDisplay();
scroll_text(cadena_1);}
if (x==5){cadena_1="tengo un 5";
display.clearDisplay();
scroll_text(cadena_1); }
}
void scroll_text(String cadena_1)
{
display.setTextWrap(false); // we don't wrap text so it scrolls nicely
display.setTextSize(1);
display.setRotation(0);
for (int xpos=64; xpos>-140; xpos--)
{
display.setTextColor(myWHITE);
display.clearDisplay();
display.setCursor(xpos,0);
display.println(cadena_1);
start_time = millis();
while((millis()-start_time)<15)
display.display(5);
}
}