flip flop

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

Non capisco una cosa, ma che ff è? Un S/R? Non dovresti avere quindi due ingressi?

non ricordo nemmeno come funziona un flip flop :slight_smile:

tu che sei fresco di studi metti 2 righe cosi' ripassi e noi (io) forse ricordo :wink:

ma col flip flop non hai 1 ingresso e 2 uscite? XD

comunque ad occhio e croce ti manca una cosa chiamata debounce, per un solo pulsante ti basterebbe anche mettere un delay a fondo loop()

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 :slight_smile:

farò una fotocopia degli appunti :slight_smile: rimandiamo a domani ora devo andare :slight_smile:

Tutto questo poteva essere utile scriverlo come premessa la codice xD