Salve ragazzi ....
sono in cerca del vostro aiuto... vi spiego in cosa consiste .
dovrei accendere dei led 6 di preciso in modo totalmente casuale, per ora aiutandomi col forum sono riuscito a scrivere un programma che li fa accendere casualmente ma solo uno per volta.
a me invece servirebbe molto più casuale.. per esempio..
se ne accende 1 poi 4 poi tutti poi 3 poi di nuovo tutti proprio a casaccio...ma non so proprio dove andar a sbattere la testa , lo trovo già troppo avanzato per me come scrittura del codice che sono solo al secondo progetto
Ad esempio con un Arduino Uno (ATmega328P), potresti usare il direct port manipulation mettendo i led tutti in fila ad esempio sui pin D8 - D13 (registro PORTB).
...o, ancora più semplicemente: PORTB = random (0, 64);
Naturalmente bisogna prima impostare i pin come uscite nel setup(): DDRB = 63;
equivalente a: DDRB = 0b00111111;
A volte la manipolazione diretta delle porte rende semplicissime e velocissime delle operazioni che, altrimenti, richiederebbero molte righe di programma. L'unico lato che può essere considerato negativo è che il codice deve essere scritto specificamente per quel microcontrollore che si intende usare. Per utilizzare queste tecniche bisogna conoscere i numeri binari: https://www.google.com/search?q=i+numeri+binari
e gli operatori bit a bit (bitwise):
Ciao e innanzitutto grazie per l'aiuto
grazie a voi già ho capito in cosa consiste PORTB che non conoscevo da neofita
sarebbe l'intera sezione dei pin da 8 a 13 mentre PORTD da 0 a 7 giusto?
ora aggiungendo la stringa PORTB = random (0, 64); sono riuscito a ottenere quasi il risultato cercato...
la mia domanda è se con questa istruzione si possa avere un breve spegnimento totale fra un lampeggio e l'altro
allora di nuovo grazie....
aggiungendo PORTB = PORTB & ~63; rimane tutto spento, ho eliminato parte del codice che credo fosse obsoleto ma rimettendolo funziona un pò e poi si blocca...
cosa ho sbagliato?
void setup()
{
DDRB=63; // Uscite da B0 a B5.
}
void loop()
{
PORTB = random (0, 64);
randomSeed(millis());
PORTB &= 0b11000000; // Moltiplica per 0 da B0 a B5.
delay(500); // Mezzo secondo di buio.
}
Li ho letti, ma perdonami se non capisco d'altronde sono solo al 2° giorno che uso arduino
quindi i pezzi di codice che ho "scopiazzato" sono quelli che ho capito.
Nella funzione che hai scritto te partendo dal fatto che hai usato {2 , 0 , 0} {3, 0 , 0} etc che non so cosa siano ho potuto intuire che serve un pulsante per far partire il tutto cosa che devo escludere , ma anche la non saprei come fare