GirlsGoIT Wiki (ro)
RU
  • Introducere
  • Unelte
    • Slack
    • Visual Studio Code
    • CodeSandbox
      • Cum rezolvi un task la proiect
      • Cum rezolvi un exercițiu
    • GitHub
  • FRONTEND STATIC
    • Internet
    • HTML
    • CSS
    • Exerciții
      • Erontend Static Exercitii
  • FRONTEND DINAMIC
    • JavaScript
      • Introducere
      • Consola Browser'ului
      • Variabile
      • Tipuri de date
      • Operatori
      • JavaScript & HTML
      • Funcții
      • DOM & Window API
      • Math API
      • Condiționale (if)
      • Cicluri (for & while)
    • Vue.js
      • Componente Vue
      • Componente & Forme
      • Lifecycle hooks
      • Comunicare între componente
      • Vue Router
      • Axios
      • Instalare locală
    • Exercitii
    • Rest API
      • Rest api GET
      • Rest api GET one
      • Rest api POST
      • Rest api PUT
      • Rest api DELETE
  • PYTHON
    • Introducere
    • Variabile
    • Tipuri de Date
    • Operatori
    • Control Flow
    • Liste
    • Cicluri for
    • Funcții
    • Dictionare
    • Seturi
    • Fișiere
    • Try-except-finally. Lambda
    • Librării, module
    • Exercitii
      • Variabile
      • TIpuri de Date
      • Operatori
      • If...else
      • Liste
      • Cicluri for
      • Funcții
      • Dicționare
      • Seturi
      • Fișiere
      • Try-except, Lambda
      • Librării , module
      • ✨Mai multe exerciții ✨
    • Python Archiva
  • BACKEND
    • Instalare Python
    • Python OOP
    • Baze de date
    • Django
    • REST API's
    • Django REST Framework
    • Exerciții
      • Python OOP
      • Django
      • Django Rest Framework
  • Data Science
    • Introducere în Data Science
    • Vizualizarea datelor
      • Matplotlib
    • Numpy
    • Pandas
    • DecisionTrees
  • 3D Printing
    • Intro
    • Fusion 360 Intro
    • Sketch
    • Solid body
    • Arduino
    • Final Projects
  • ARHIVA
    • Milligram
    • Drone
      • Intro
    • Old Backend
      • Bootstrap
      • Hello Flask
      • DB Modeling
      • Ubuntu Quest
      • Baze de date
      • Heroku Deploy
    • Robotica NAO
      • Finalizarea proiectelor
      • Flow Control
      • Cum creez un Dialog box
      • Convenția GirlsGoIT Robotics Choregraphe
      • Tracker
      • Dialog - QiChat
    • Robotica
      • 1.1 mBlock
      • 1.2 Descărcarea, instalarea și conectarea
      • 1.3 Execută un program de pe mBlock IDE sau încarcă pe Board
      • 1.4 Conectarea prin USB, Bluetooth sau 2.4GHz
      • 2.1 Programe Simple
      • 2.2 Senzori
      • 2.3 Exerciții avansate - Scratch
      • 3.0.1 Instalare Arduino IDE
      • 3.0.2 Instalare Arduino IDE WEB
      • 3.1 Configurare Arduino IDE
      • 3.2 Introducere în limbajul C
      • 3.3 Exemple Arduino - mBot
      • 3.4 Line follow - Arduino
      • 3.5 Ultimate robot
      • 4.1 Planificarea și managementul proiectelor
      • Custom robot
      • Noțiuni și explicații
      • Delay fara sa opreasca programul
      • Alte resurse și exemple
Powered by GitBook
On this page
  1. ARHIVA
  2. Robotica

Delay fara sa opreasca programul

Pentru situatia cand in loop avem nevoie de un delay care sa afecteze o singura componenta si sa nu blocheze programul


#include "MeMCore.h"

bool myDelay(int milliseconds, unsigned int &startDelay) {
    if( millis()-startDelay >= milliseconds) {
      startDelay = millis();
      return true;  
    }
    return false;
}

void setup() {
  Serial.begin(9600);
  Serial.print("Started");
}

// De fiecare data cand am un myDelay nou, trebuie sa adaug o variabila noua asa
unsigned int startPrinting1 = millis();
unsigned int startPrinting2 = millis();

void loop() {
  // Exemplu de utilizare
  // pentru fiecare data cand folosesc, trebuie sa declar o alta variabila de start, de ex. startPrinting1, startPrinting2 etc.
  if(myDelay(1000, startPrinting1)) {
    Serial.println("Yep");  
  }
  
  // Al doilea exemplu de utilizare
  // Atentie, acest delay nu tine cont de alte delayuri definite mai sus sau mai jos!!!
  // Actiunea se va executa in general o data la 2 secunde
  if(myDelay(2000, startPrinting2)) {
    Serial.println("It's working!");  
  }
}

Buzzer code - neterminat!

//#include "MeMCore.h"
#include <MeMCore.h>

bool myDelay(int milliseconds, unsigned int &startDelay) {
    if( millis()-startDelay >= milliseconds) {
      startDelay = millis();
      return true;  
    }
    return false;
}

unsigned int startTone1 = millis();
bool startToneFlag = true;
//
//void buzzerTone(uint16_t frequency, uint32_t duration)
//{
//  int buzzer_pin = 8;
//  int period = 1000000L / frequency;
//  int pulse = period / 2;
//  Serial.println("Pulse:");
//  Serial.print(pulse);
//  
//  pinMode(buzzer_pin, OUTPUT);
//  
//  if(myDelay(pulse, startTone1)) {
//    if(startToneFlag==true) {
//      digitalWrite(buzzer_pin, HIGH);
//      Serial.println("High");
//    } else {
//      digitalWrite(buzzer_pin, LOW);
//      Serial.println("Low");
//    }
////      wdt_reset();
////    }
//    startToneFlag = !startToneFlag;
//  }
//}

//TimerFreeTone( pin, frequency, duration, volume);
void setup() {
//  buzzerTone(582, 1000);
}

void loop() {
  buzzerTone2(784, 1000);
//  buzzerTone2(582, 100);
  
  Serial.println("Hello");
}


unsigned int delayBuzzer1 = millis();
bool delayBuzzerFlag1 =true;

void buzzerTone2(uint16_t frequency, uint32_t duration)
{
int   buzzer_pin = 8;
//  int period = 1000000L / frequency;
  int period = 1000L / frequency;
  int pulse = period / 2;
  pinMode(buzzer_pin, OUTPUT);
//  for (long i = 0; i < duration * 1000L; i += period) 
//  {
    if(myDelay(pulse, delayBuzzer1)) {
      if(delayBuzzerFlag1 ==true) {
      digitalWrite(buzzer_pin, HIGH);  
      } else {
       digitalWrite(buzzer_pin, LOW);  
      }
      delayBuzzerFlag1 = !delayBuzzerFlag1;
    }
////    delayMicroseconds(pulse);
//    digitalWrite(buzzer_pin, LOW);
//    delayMicroseconds(pulse);
//    wdt_reset();
//  }
}

// 
//void MeBuzzer::tone(uint16_t frequency, uint32_t duration)
//{
//  buzzer_pin = 8;
//  int period = 1000000L / frequency;
//  int pulse = period / 2;
//  pinMode(buzzer_pin, OUTPUT);
//  for (long i = 0; i < duration * 1000L; i += period) 
//  {
//    digitalWrite(buzzer_pin, HIGH);
//    delayMicroseconds(pulse);
//    digitalWrite(buzzer_pin, LOW);
//    delayMicroseconds(pulse);
//    wdt_reset();
//  }
//}
//
//
PreviousNoțiuni și explicațiiNextAlte resurse și exemple

Last updated 6 years ago

942B
myDelay.ino
Descarca acest cod aici (sa nu iti apara greseli de la copiere)
2KB
testBuzzer.ino
Acelasi cod poate fi descarcat