In acest exemplu vom folosi tranzistorul MOS-FET impreuna cu un buton pentru a aprinde si stinge un led.

Pentru a face acest lucru vom folosi intreruperile oferite de catre Arduino.

Butonul se va conecta la pinul digital 2 si va avea un rezistor PULL-DOWN de 10KiloOhmi.

Celelalte conexiuni raman neschimbate, acestea fiind cele din articolul anterior.

Sketchul folosit este cel de mai jos:

int mosfet = 3;
int buton = 2;
long timp_debounce = 50;
volatile unsigned long ultima_micro;
  
void setup() {
  pinMode(mosfet, OUTPUT);
  pinMode(buton, INPUT);
  digitalWrite(mosfet, HIGH);
  attachInterrupt(digitalPinToInterrupt(buton), debounceApasare, RISING); 
}

void loop() { 
}

void debounceApasare() {
  if((long)(micros() - ultima_micro) >= timp_debounce * 1000) {
    butonApasat();
    ultima_micro = micros();
  }
}

void butonApasat() {
  int buf = digitalRead(mosfet);
  if (buf == 0) {
    digitalWrite(mosfet, HIGH);
  } else {
    digitalWrite(mosfet, LOW);
  }
}

Vom modifica sketchul in asa fel incat ledul sa fie aprins initial pentru o perioada de 3 secunde apoi se va stinge automat. Ulterior la fiecare apasare de buton ledul se va aprinde iarasi pentru aceeasi perioada de 3 secunde.

Codul modificat se poate vedea mai jos:

int mosfet = 3;
int buton = 2;
long timp_debounce = 50;
volatile unsigned long ultima_micro;
int perioada = 3000;
unsigned long timpAcum = 0;
  
void setup() {
  pinMode(mosfet, OUTPUT);
  pinMode(buton, INPUT);
  digitalWrite(mosfet, HIGH);
  attachInterrupt(digitalPinToInterrupt(buton), debounceApasare, RISING); 
}

void loop() {
  while (millis() > timpAcum + perioada) {
    timpAcum = millis();
    digitalWrite(mosfet, LOW);
  } 
}

void debounceApasare() {
  if((long)(micros() - ultima_micro) >= timp_debounce * 1000) {
    butonApasat();
    ultima_micro = micros();
  }
}

int butonApasat() {
  int buf = digitalRead(mosfet);
  if (buf == 0) {
    digitalWrite(mosfet, HIGH);
  } else {
    digitalWrite(mosfet, LOW);
  }
  timpAcum = millis();
  return timpAcum;
}

Un video cu montajele in functiune se poate vedea mai jos:

 

 

 

Nu sunt comentarii

Acest website foloseste cookie-uri pentru o experienta placuta in timpul navigarii.