docsavage:
Se non parte la comunicazione, come fai a sapere che legge il pin 7?mostra pure
Perché ho provato a usare la stringa
Serial.println(digitalRead(BUTTON));
ed effettivamente quando premo il pulsante sul seriale mi esce 1 invece che 0...quindi so che la lettura del pulsante( pin 7 è corretta).
docsavage:
hai qualcosa sul 13?se non hai nulla potresti aggiungere alla loop questa semplice riga
digitalWrite(13,digitalRead(BUTTON));
che ti mostra accendendo il led del 13 se il pulsante è premuto
e nella setup, dopo averla inizializzata, stampa un messaggio di benvenuto sulla seriale
così si vede che la comunicazione serial è OKalemno ci togliamo il dubbio che sia un probelma HW
...il led si accende e spenge in maniera corretta seguendo il pulsante!
giovepluvio:
Salve,
Mettendo insieme un po di roba qua e la ho tentato di scrivere questo pseudo coso.
So che non è un aiuto (almeno non come dovrei darlo), ma credo possa essere abbastanza comprensibile. Non so se ho capito bene il suo scopo, ma per quanto ho capito eccolo. ATTENZIONE, da solo non funziona, ha bisogno di un sistema accensione/spegnimento led (ammesso che con esso funzioni)const byte NUMEROLED = 4;
const byte LED [NUMEROLED] = {2, 3, 4, 5};
int led_accesi = 0;
const byte PINTASTO = 6;
byte pressione;
void setup()
{
Serial.begin (9600);
Serial.println F("H. W.");
for (byte i = 0; i < NUMEROLED; i++)
{
pinMode (LED [i], OUTPUT);
}
pinMode (13, OUTPUT);
//Primo test led, non facciamoci mancare nulla
for (byte i = 0; i < NUMEROLED; i++)
{
digitalWrite (LED [i], HIGH);
}
delay (1000);
for (byte i = 0; i < NUMEROLED; i++)
{
digitalWrite (LED [i], LOW);
}
pinMode (PINTASTO, INPUT_PULLUP);
//Controllo tasto
Serial.println F("Premere tasto e vedere se si accende il pin 13");
unsigned long aspetta=millis();
while (millis()-aspetta<10000)
{
if (LeggoTasto (PINTASTO))
{
digitalWrite (13, HIGH);
}
}
digitalWrite (13, LOW);
Serial.println F("Controlli cessati, inizio loop");
}
void loop()
{
if (! digitalRead (PINTASTO))
{
pressione = LeggoTasto (PINTASTO);
//La funzione LeggoTasto fa un debounce software. è eliminabile inserendo in questa if {} il contenuto della successiva.
//Per eliminarla è necessario O un debounce (anti rimbalzo) hardwere (che non so fare) O accettare i rimbalzi
}
if (pressione)
{
//Sottinteso !=0
pressione = 2; //Per non dimenticarcelo, tanto il controllo if() viene eseguito solo all0inizio
led_accesi = 0;
for (byte i = 0; i < NUMEROLED; i++)
{
led_accesi = led_accesi * 10 + digitalRead (LED [i]);
//Numero massimo led =5.
}
Conseguenza (led_accesi);
led_accesi = 0;
if (pressione == 2)
{
pressione = AttesaRilascio (PINTASTO);
}
}
}
byte LeggoTasto (byte pin)
{
unsigned long partenza = millis();
while (millis() - partenza < 40)
{
if (digitalRead (pin))
{
return (0);
}
}
return (1);
}
void Conseguenza (int causa)
{
Serial.println (causa);
//Riempire con quello che serve fare.
//causa in questo caso è porta scritti gli stati dei led.
//Si comincia da primo pin dell'array LED al posto più a sinistra per andare in ordine.
//Le cifre sono 0 se spento e 1 se acceso.
//Si può quindi qui usare una switch case su causa, terminando ogni chase con return; e ricordandoci che la funzione è void
return;
}
byte AttesaRilascio (byte pin)
{
while (!digitalRead (pin))
{
}
return (0);
}
Buonasera,
innanzitutto la ringrazio per il tanto tempo speso per la mia causa.
Il mio scopo è questo:
ho una serie di Led... (misurano il completamento di alcune commissioni durante la giornata)
in base a quanti Led ho acceso (ovvero quanti compiti ho già svolto durante la giornata) ho bisogno di ricevere un messaggio specifico che mi indichi ad esempio quale sarà il prossimo lavoro da svolgere..
Quindi devo avere per ogni numero di LED accesi un testo specifico da leggere.
Purtroppo sono abbastanza neofita di Arduino e di programmazione in generale infatti alcuni passaggi li perdo del codice che mi ha scritto. Cosa intende per sistema di accensione/spegnimento led?
Grazie ancora a tutti..