oggi a scuola abbiamo fatto i flip flop subito ho pensato a emularlo in arduino
int xm=0; //x_memoria
int xc=0; //x_conteggio
int xb=0; //x_boolean
void setup() {
pinMode(13, OUTPUT);
pinMode(12, INPUT);
Serial.begin(9600);
}
void loop() {
if(digitalRead(12)==HIGH){
if(xm==0){
xm=1;
}
}
if(digitalRead(12)==LOW){
if(xm==1){
xc=xc+1;
xm=0;
// per invertire lo stato x_boolean
if (xb==1){
xb=0;
}
else{
xb=1;
}
Serial.print(xc);
Serial.print(' ');
}
}
// stato led
if(xb==1){
digitalWrite(13, HIGH);
}
if(xb==0){
digitalWrite(13, LOW);
}
}
questo è il codice che mi sono inventato ma non mi sembra che ha una buona logica c'è qualche cosa di più logico come codice?
x_memoria: serve per ricordare lo stato logico
x_conteggio: serve per motorizzare il numero di volte che è stato premuto il bottone
x_boolean: ogni volta che il bottone è premuto se era 0 diventa 1, se era 1 diventa 0 ci servirà per il led
si ecco un flip flop è composto da due latch s/r
ha 3 ingressi J/K e CLOK e due uscite Q/Qnegato + preset e clear per impostare alla prima accensione bassa l'uscita
ci sono tutte le varie combinazioni tra J/K/CLOCK ma la più importante è quella dove J/K sono a 1
in quel caso si ha una cosa molto interessante, ogni volta che il CLOK varia da 1 a 0 si inverte Q
in soldoni io ho preso solo la combinazione J/K = 1 e ho fatto un contatore che conta quante volte premi un bottone (variabile xm) e in più per sola comodità ho emulato l'uscita Q che ogni volta che si preme il bottone cambia il suo stato in particolare il programma memorizza l'evento del bottone quando esso è rilasciato cioè che lo stato del clock varia da 1 a 0 come un flip flop(per fare che memorizza invece quando il bottone viene premuto basta spostare xc=xc+1; nella prima parte di codice quando il clock passa da 0 a 1).
il mio codice per sta cavolata mi sembra troppo lungo e contorto come logica
farò una fotocopia degli appunti rimandiamo a domani ora devo andare