sono riuscito (dopo aver stampato il listato) a vedere cosa andava fatto per i led, modificando le stringhe che mi avevi dato d'esempio e modificandole in base all'uscita di accensione e di corsia.
Per l'accensione del led, devo comprare le resistenze, cosa che se non le prendo online, devo andare per forza a Bologna, perchè da noi non ci sono più negozi.
per quel che riguarda la funzione cronometro (millis), ho trovato qualcosa in rete, ma non sono riuscito a capire dove modificarlo, per fa scrivere minuti e secondi.
questo è quello che ho trovato online.........sulle pagine di Daniele Alberti
#include <Wire.h>
#include "rgb_lcd.h"
rgb_lcd lcd;
int pinpuls1 = 10;
int pinpuls2 = 11;
int statopuls1;
int statopuls2;
unsigned long tempo_base;
unsigned long tempo_cronometrato = 0;
unsigned long tempo_congelato;
unsigned long temposec;
int flag = 1;
void setup()
{
delay(1000);
lcd.begin(16, 2);
lcd.setRGB(255, 255, 255);
lcd.setCursor(0, 0);
lcd.print("DanieleAlberti");
lcd.setCursor(13, 1);
lcd.print(".It");
delay(3000);
lcd.clear();
lcd.setRGB(50, 100, 200);
lcd.setCursor(2, 0);
lcd.print("Cronometrino");
pinMode (pinpuls1, INPUT_PULLUP);
pinMode (pinpuls2, INPUT_PULLUP);
}
void loop()
{
statopuls1 = digitalRead (pinpuls1);
statopuls2 = digitalRead (pinpuls2);
if ((statopuls1 == LOW) && (flag < 2))
{
tempo_base = millis();
flag = 0;
}
if ((statopuls1 == LOW) && (flag == 2))
{
flag = 0;
}
if (flag == 0)
{
lcd.setRGB(200, 100, 00);
lcd.setCursor(0, 0);
lcd.print("TEMPO (secondi)");
lcd.setCursor(0, 1);
lcd.print("PARTITO! ");
tempo_cronometrato = millis() - tempo_base;
temposec = tempo_cronometrato / 1000;
if (temposec <= 9)
{
lcd.setCursor(12, 1);
lcd.print(" ");
lcd.print(temposec);
}
if ((temposec > 9) && (temposec <= 99))
{
lcd.setCursor(12, 1);
lcd.print(" ");
lcd.print(temposec);
}
if ((temposec > 99) && (temposec <= 999))
{
lcd.setCursor(12, 1);
lcd.print(" ");
lcd.print(temposec);
}
if ((temposec > 999) && (temposec <= 9999))
{
lcd.setCursor(12, 1);
lcd.print(temposec);
}
}
if (statopuls2 == LOW)
{
lcd.setRGB(100, 200, 0);
lcd.setCursor(0, 0);
lcd.print("TEMPO (millisec)");
lcd.setCursor(0, 1);
lcd.print("STOP! ");
if ((tempo_cronometrato > 9) && (tempo_cronometrato <= 99))
{
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.print(tempo_cronometrato);
}
if ((tempo_cronometrato > 99) && (tempo_cronometrato <= 999))
{
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.print(tempo_cronometrato);
}
if ((tempo_cronometrato > 999) && (tempo_cronometrato <= 9999))
{
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.print(tempo_cronometrato);
}
if ((tempo_cronometrato > 9999) && (tempo_cronometrato <= 99999))
{
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.print(tempo_cronometrato);
}
if ((tempo_cronometrato > 99999) && (tempo_cronometrato <= 999999))
{
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.print(tempo_cronometrato);
}
if ((tempo_cronometrato > 999999) && (tempo_cronometrato <= 9999999))
{
lcd.setCursor(9, 1);
lcd.print(tempo_cronometrato);
}
flag = 2;
}
}
ecco come ho editato la parte di programma per quel che riguarda i led:
for (;;) { //inizio loop infinita scansione corsie
val = digitalRead(BUTTON1);
if (val == HIGH) { //il pulsante è rilasciato
lcd.setCursor(9,0);
lcd.print("PRONTA ");
digitalWrite(LEDVERDE1, HIGH);
statoCorsia1 = true;
}
if (val == LOW) { //il pulsante è premuto
lcd.setCursor(9,0);
lcd.print("NON ATTIVA");
digitalWrite(LEDROSSO1, LOW);
statoCorsia1 = false;
}
if (val == HIGH) { //il pulsante è rilasciato
lcd.setCursor(9,1);
lcd.print("PRONTA ");
digitalWrite(LEDVERDE2, HIGH);
statoCorsia2 = true;
}
if (val == LOW) { //il pulsante è premuto
lcd.setCursor(9,1);
lcd.print("NON ATTIVA");
digitalWrite(LEDROSSO2, LOW);
statoCorsia2 = false;
}
val = digitalRead(BUTTON3);
if (val == HIGH) { //il pulsante è rilasciato
lcd.setCursor(9,2);
lcd.print("PRONTA ");
digitalWrite(LEDVERDE3, HIGH);
statoCorsia3 = true;
}
if (val == LOW) { //il pulsante è premuto
lcd.setCursor(9,2);
lcd.print("NON ATTIVA");
digitalWrite(LEDROSSO3, LOW);
statoCorsia3 = false;
}
val = digitalRead(BUTTON4);
if (val == HIGH) { //il pulsante è rilasciato
lcd.setCursor(9,3);
lcd.print("PRONTA ");
digitalWrite(LEDVERDE4, HIGH);
statoCorsia4 = true;
}
if (val == LOW) { //il pulsante è premuto
lcd.setCursor(9,3);
lcd.print("NON ATTIVA");
digitalWrite(LEDROSSO4, LOW);
statoCorsia4 = false;
Per il display................ vedremo più avanti........quando riuscirò a far funzionare il tutto.
per il circuito di alimentazione, ok per l'inversione di polarità.
se per te il 7805 è troppo basso di voltaggio, posso anche utilizzare un 7809, con lo stesso circuito, teoricamente dovrebbe scaldare un po meno
ciao e grazie
Ivan