Buongiorno a tutti,
Ho un problema, simile a quello di "albepancio", di trasmissione con I2C dei numeri superiori a 10 che non vorrei (o meglio non sono riuscito) a risolvere neppure con una stringa.
Qualcuno può indicarmi dove sbaglio? Allego i due files.
Master
#include <Wire.h>
int suono = 0;
char conta;
void setup() {
Serial.begin(9600);
Wire.begin();
}
void loop() {
if (Serial.available()) {
int input = Serial.read();
suono = input;
Serial.println(suono);
}
vai();
suono = 0;
}
void vai() {
if (suono > 0) {
Serial.println(suono);
Wire.beginTransmission(7);
Wire.write(suono);
Wire.endTransmission();
}
suono = 0;
}
Slave
#include <Wire.h>
#include <LiquidCrystal.h>
#define BUTTON A0
#define BACKLIGHT 10
String v_testo;
int X = 0;
int X_old = 0;
int ripeti = 0;
int strLength = v_testo.length();
boolean blacklightStatus = false;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
Serial.begin(9600);
Wire.begin(7);
Wire.onReceive(ricevi);
pinMode( BACKLIGHT, OUTPUT );
digitalWrite( BACKLIGHT, LOW );
lcd.begin(16, 1);
digitalWrite( BACKLIGHT, HIGH );
}
void loop() {
if (X > 0) {
X_old = X;
lcd.setCursor(16, 0);
testo();
Serial.println(v_testo);
int strLength = v_testo.length();
Serial.println(strLength);
while (X == X_old) {
lcd.println(v_testo); // mi stampa su LCD la stringa
for (int pCounter = 0; pCounter < strLength; pCounter++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(400);
ricevi();
if (X != X_old) {
pCounter = strLength + 1;
lcd.clear();
}
}
}
}
}
void ricevi() {
int input = 0;
while (Wire.available()) {
input = Wire.read();
X = (input - 48);
Serial.println(X);
Serial.println(input);
}
}
void testo() {
switch (X) {
case 4:
v_testo = "Sistema acceso. ";
break;
case 5:
v_testo = "Sistema spento";
break;
case 6:
v_testo = " 2 minuti inizio tiri poi una volee di prova di 6 frecce 1 turno ";
break;
case 7:
v_testo = " 2 minuti inizio tiri poi gara di 6 frecce 1 turno";
break;
case 8:
v_testo = "Gara di 6 frecce 1 turno";
break;
case 9:
v_testo = "2 minuti inizio tiri poi una volee di prova di 6 frecce 2 turni";
break;
case 10:
v_testo = "2 minuti inizio tiri poi gara di 6 frecce 2 turni";
break;
case 11:
v_testo = "Gara di 6 frecce 2 turni";
break;
case 27:
v_testo = "2 minuti inizio tiri poi prima volee di prova di 3 frecce 1 turno";
break;
case 20:
v_testo = "Seconda volee di prova di 3 frecce 1 turno";
break;
case 21:
v_testo = "Gara di 3 frecce 1 turno";
break;
case 23:
v_testo = "2 minuti inizio tiri poi prima volee di prova di 3 frecce 2 turni";
break;
case 24:
v_testo = "Seconda volee di prova di 3 frecce 2 turni";
break;
case 25:
v_testo = "Gara di 3 frecce 2 turni";
break;
case 12:
v_testo = "2 minuti inizio tiri O.R.";
break;
case 13:
v_testo = "O.R. Gara";
break;
case 22:
v_testo = "2 minuti inizio tiri poi gara di 3 frecce 1 turno";
break;
case 26:
v_testo = "2 minuti inizio tiri poi gara di 3 frecce 2 turni";
break;
case 14:
v_testo = "Volee di recupero - 1 freccia";
break;
case 15:
v_testo = "Volee di recupero - 2 frecce";
break;
case 16:
v_testo = "Volee di recupero - 3 frecce";
break;
case 17:
v_testo = "Volee di recupero - 4 frecce";
break;
case 18:
v_testo = "Volee di recupero - 5 frecce";
break;
case 19:
v_testo = "Volee di recupero - 6 frecce";
break;
case 31:
v_testo = "Prova tempi - 120 sec";
break;
case 30:
v_testo = "Prova tempi - 240 sec";
break;
}
}
Grazie anticipatamente per eventuali suggerimenti.
Enrico