RAUNARDE
| Inviato il: 20/02/2018 14:54:51
|
Ciao a tutti, avrei bisogno di un'informazione o meglio un aiuto.
premessa : ho impiegato 2 giorni per riuscire a far funzionare il mio lcd con I2C, non andava mai, poi ho trovato, dopo aver usato il tool I2c scanner per verificare l'indirizzo, una serie di istruzioni corretta che mi fa funzionare il display a 20colonne e 4 righe di origine cinese, come l'I2c.
ora riesco a far girare il mio primo programma, ma ho 2 problemi:
1) dopo ogni incremento del valore buttonPushCounter, avrei bisogno che tutti i relè tornassero con lo stato HIGH, quindi un digitalWrite (relè n =HIGH);
invece ora mi fa un cambio stato in pratica simultaneo tra es relè2 e 3, invece vorrei una pausa di 500ms
2) a display la prima routine funziona bene, i caratteri sono fissi, mentre nelle altre istanze, c'è uno sfarfallio dei caratteri nella 3 e 4 riga.
vi allego il codice in modo da verificare.
Premetto che sarà pieno di banalità che si potevano escludere ma essendo il mio primo tentativo, ho preso qua e là varie info e le ho adattate al mio scopo.
#include <Wire.h>
// include the library code:
#include <LiquidCrystal_I2C.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void mot_on1();
void mot_on2();
void mot_on3();
void mot_on4();
void mot_off();
const int button = 22;
const int rele1=23;
const int rele2=24;
const int rele3=25;
const int rele4=26;
const int rele5=27;
const int rele6=28;
const int rele7=29;
const int rele8=30;
int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
void setup() {
// Print a message to the LCD.
lcd.begin (20,4);
lcd.setCursor(3,0); //Start at character 4 on line 0
lcd.print("abracadabra");
delay (1000);
lcd.setCursor(0,1);
lcd.print("prova relè");
delay (1000);
lcd.setCursor(0,2);
lcd.print("Selezionare relè");
lcd.setCursor(13,3);
lcd.print("By Raul");
delay(2000);
lcd.clear();
pinMode(button, INPUT);
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
pinMode(rele3, OUTPUT);
pinMode(rele4, OUTPUT);
pinMode(rele5, OUTPUT);
pinMode(rele6, OUTPUT);
pinMode(rele7, OUTPUT);
pinMode(rele8, OUTPUT);
digitalWrite (rele1, HIGH);
digitalWrite (rele2, HIGH);
digitalWrite (rele3, HIGH);
digitalWrite (rele4, HIGH);
digitalWrite (rele5, HIGH);
digitalWrite (rele6, HIGH);
digitalWrite (rele7, HIGH);
digitalWrite (rele8, HIGH);
}
void loop() {
lcd.setCursor(5,0);
lcd.print("pinco pallino ");
lcd.setCursor(1,2);
lcd.print("Selezionare relè");
buttonState = digitalRead(button);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
buttonPushCounter++;
}
}
if (buttonPushCounter == 1){
mot_on1();
}
if (buttonPushCounter == 2){
mot_on2();
}
if (buttonPushCounter == 3){
mot_on3();
}
if (buttonPushCounter == 4){
mot_on4();
}
if (buttonPushCounter == 5){
mot_off();
}
lastButtonState = buttonState;
}
void mot_on1() {
lcd.clear();
lcd.setCursor(5,0);
lcd.print("test relè 1");
lcd.setCursor(0,2);
lcd.print("relè 1 e 5");
delay (500);
digitalWrite (rele1, LOW);
digitalWrite (rele2, HIGH);
digitalWrite (rele3, HIGH);
digitalWrite (rele4, HIGH);
digitalWrite (rele5, LOW);
digitalWrite (rele6, HIGH);
digitalWrite (rele7, HIGH);
digitalWrite (rele8, HIGH);
}
void mot_on2() {
lcd.clear();
lcd.setCursor(5,0);
lcd.print("test relè 2");
lcd.setCursor(0,2);
lcd.print("relè 2 e 6");
delay (500);
digitalWrite (rele1, HIGH);
digitalWrite (rele2, LOW);
digitalWrite (rele3, HIGH);
digitalWrite (rele4, HIGH);
digitalWrite (rele5, HIGH);
digitalWrite (rele6, LOW);
digitalWrite (rele7, HIGH);
digitalWrite (rele8, HIGH);
}
void mot_on3() {
lcd.clear();
lcd.setCursor(5,0);
lcd.print("test relè 3");
lcd.setCursor(0,2);
lcd.print("relè 3 e 7");
delay (500);
digitalWrite (rele1, HIGH);
digitalWrite (rele2, HIGH);
digitalWrite (rele3, LOW);
digitalWrite (rele4, HIGH);
digitalWrite (rele5, HIGH);
digitalWrite (rele6, HIGH);
digitalWrite (rele7, LOW);
digitalWrite (rele8, HIGH);
}
void mot_on4() {
lcd.clear();
lcd.setCursor(5,0);
lcd.print("test relè 4");
lcd.setCursor(0,2);
lcd.print("relè 4 e 8");
delay (500);
digitalWrite (rele1, HIGH);
digitalWrite (rele2, HIGH);
digitalWrite (rele3, HIGH);
digitalWrite (rele4, LOW);
digitalWrite (rele5, HIGH);
digitalWrite (rele6, HIGH);
digitalWrite (rele7, HIGH);
digitalWrite (rele8, LOW);
}
void mot_off() {
buttonPushCounter = 0;
lcd.clear();
digitalWrite (rele1, HIGH);
digitalWrite (rele2, HIGH);
digitalWrite (rele3, HIGH);
digitalWrite (rele4, HIGH);
digitalWrite (rele5, HIGH);
digitalWrite (rele6, HIGH);
digitalWrite (rele7, HIGH);
digitalWrite (rele8, HIGH);
delay (2500);
}
|