કોડ શોધો

પાઠ 14/31-2: Arduino કોડિંગ millis() ઉદાહરણ 2 ઇવેન્ટ સાથે

પાઠ 14/31-2: Arduino કોડિંગ millis() ઉદાહરણ 2 ઇવેન્ટ સાથે

આ ટ્યુટોરિયલમાં, તમે શીખી શકશો કે કેવી રીતે Arduino millis() ફંક્શનનો ઉપયોગ કરીને નિર્દિષ્ટ સમયગાળો વીતી ગયા પછી જ કોઈ ક્રિયા શરૂ કરવી, અને તે પણ તમારા પ્રોગ્રામના બાકીના ભાગને અવરોધ્યા વિના. આ સ્પંદનશીલ Arduino પ્રોજેક્ટ્સ બનાવવા માટેની મૂળભૂત તકનીક છે જ્યાં બહુવિધ કાર્યો એકસાથે ચાલવાની જરૂર હોય, જેમ કે સેન્સર વાંચતી વખતે અથવા બટન દબાણોનું નિરીક્ષણ કરતી વખતે LED ઝબકાવવી. આ ચોક્કસ ઉદાહરણ પાંચ સેકન્ડ પછી ઇવેન્ટ શરૂ કરવા પર ધ્યાન કેન્દ્રિત કરે છે, પરંતુ આ તર્ક અસંખ્ય વાસ્તવિક-વિશ્વ દૃશ્યોમાં લાગુ કરી શકાય છે.

સનફાઉન્ડર કાર એસેમ્બલ

તમારા પોતાના પ્રોજેક્ટ્સમાં આ પેટર્નનો ઉપયોગ કેવી રીતે કરી શકો તેના કેટલાક વ્યવહારુ ઉદાહરણો અહીં છે:

  • વિલંબિત સક્રિયકરણ: સિસ્ટમ ચાલુ થયા પછી નિર્ધારિત સમય પછી જ પંખો અથવા પંપ ચાલુ કરો.
  • સલામતી ઇન્ટરલોક: ખતરનાક ક્રિયા કરતા પહેલા, જેમ કે મોટર શરૂ કરવી, બટનને ચોક્કસ સમયગાળા માટે દબાવી રાખવાની જરૂર પડે.
  • સમય-આધારિત ચેતવણીઓ: જો સેન્સર રીડિંગ ચોક્કસ સમયમાં બદલાયું ન હોય તો એલાર્મ અથવા સૂચના શરૂ કરો.
  • નોન-બ્લોકિંગ ટાઈમર: "વોચડોગ" ટાઈમર બનાવો જે ઉપકરણ અપ્રતિભાવશીલ બને તો તેને રીસેટ કરે.

આ જે મુખ્ય સમસ્યા હલ કરે છે તે delay() ફંક્શનની મર્યાદા છે. જ્યારે તમે delay(5000) નો ઉપયોગ કરો છો, ત્યારે Arduino તે પાંચ સેકન્ડ માટે અન્ય કોઈપણ કોડ ચલાવવાનું બંધ કરી દે છે. આ સરળ સ્કેચ માટે ઠીક છે, પરંતુ તે વધુ જટિલ પ્રોજેક્ટ્સમાં મોટી સમસ્યા બની જાય છે જ્યાં રાહ જોતી વખતે તમારે સેન્સર વાંચવા, ડિસ્પ્લે અપડેટ કરવા અથવા બટન દબાણો સાંભળવાની જરૂર હોય. millis() ફંક્શન, જે બોર્ડ ચાલુ થયા પછી મિલિસેકન્ડની ગણતરી કરે છે, તમને પ્રોગ્રામને રોક્યા વિના સમય તપાસવાની મંજૂરી આપે છે.

જરૂરી હાર્ડવેર

  • Arduino બોર્ડ (Uno, Nano, Mega, વગેરે)
  • એક પુશ બટન
  • જમ્પર વાયર

વાયરિંગ માર્ગદર્શિકા

આ ઉદાહરણ માટે વાયરિંગ ખૂબ જ સરળ છે. તે આંતરિક પુલ-અપ રેઝિસ્ટરનો ઉપયોગ કરે છે, તેથી બટન માટે કોઈ બાહ્ય રેઝિસ્ટરની જરૂર નથી.

  • પુશ બટનનો એક પગ Arduino પરના GND પિન સાથે જોડો.
  • પુશ બટનનો બીજો પગ Arduino પરના ડિજિટલ પિન 2 સાથે જોડો.

કારણ કે આપણે કોડમાં INPUT_PULLUP નો ઉપયોગ કરીએ છીએ, જ્યારે બટન દબાવવામાં ન આવે ત્યારે પિન HIGH વાંચશે અને જ્યારે તે દબાવવામાં આવે ત્યારે LOW વાંચશે, પિનને ગ્રાઉન્ડ સાથે જોડશે. (વિડિયોમાં 08:29 પર)

કોડ સમજવો

આ કોડ એક સરળ ઇવેન્ટ-આધારિત ટાઈમર દર્શાવે છે. પ્રોગ્રામ સતત વર્તમાન millis() મૂલ્ય સીરિયલ મોનિટર પર છાપે છે. જ્યારે પુશ બટન દબાવીને પકડી રાખવામાં આવે છે, અને Arduino ઓછામાં ઓછા 5 સેકન્ડથી ચાલી રહ્યું હોય, ત્યારે તે સીરિયલ મોનિટર પર "Take action" છાપશે. મુખ્ય વાત એ છે કે millis() તપાસ સમયની સતત છપાઈને અટકાવતી નથી.

ચાલો કોડના વપરાશકર્તા-રૂપરેખાંકિત ભાગોને સમજીએ:

unsigned long event = 5000;// 5 સેકન્ડ

આ રૂપરેખાંકિત કરવા માટેનું સૌથી મહત્વપૂર્ણ ચલ છે. તે તમારી "ઇવેન્ટ" ની અવધિ મિલિસેકન્ડમાં વ્યાખ્યાયિત કરે છે. આ ઉદાહરણમાં, તે 5000 પર સેટ છે, જે 5 સેકન્ડ બરાબર છે. વિલંબ બદલવા માટે, ફક્ત આ સંખ્યા સંશોધિત કરો. ઉદાહરણ તરીકે, તેને 10000 પર સેટ કરવાથી ક્રિયા 10 સેકન્ડ પછી શરૂ થશે. unsigned long ડેટા પ્રકારનો ઉપયોગ કરવો નિર્ણાયક છે, કારણ કે millis() નું મૂલ્ય ખૂબ મોટું થઈ શકે છે અને આખરે પ્રમાણભૂત int ચલના મહત્તમ મૂલ્ય કરતાં વધી જશે, જે સરખામણીમાં ભૂલો પેદા કરશે. (વિડિયોમાં 05:46 પર)

pinMode(2,INPUT_PULLUP);

આ લાઇન ડિજિટલ પિન 2 ને ઇનપુટ તરીકે ગોઠવે છે અને તેના આંતરિક પુલ-અપ રેઝિસ્ટરને સક્રિય કરે છે. આ એક મુખ્ય રૂપરેખાંકન પગલું છે જે તમને બાહ્ય રેઝિસ્ટર વિના બટન જોડવાની મંજૂરી આપે છે. પિન ડિફોલ્ટ રૂપે HIGH વાંચશે અને જ્યારે બટન દબાવવામાં આવે ત્યારે LOW થશે, તેને ગ્રાઉન્ડ સાથે જોડશે. જો તમે અલગ પિનનો ઉપયોગ કરવા માંગતા હો, તો અહીં અને લૂપની અંદર digitalRead(2) લાઇનમાં નંબર 2 બદલો. (વિડિયોમાં 08:46 પર)

loop() ની અંદરનો તર્ક સીધો છે. તે બટનની સ્થિતિ વાંચે છે. જો બટન દબાવવામાં આવે છે (pb == LOW), તો તે પછી તપાસે છે કે શું વર્તમાન સમય (millis()) તમારા વ્યાખ્યાયિત event સમય કરતાં મોટો અથવા બરાબર છે. જો બંને શરતો સાચી હોય, તો તે ક્રિયા સંદેશ છાપે છે. લૂપનો બાકીનો ભાગ, જે સમય છાપે છે, તે અવિરત ચાલુ રહે છે, જે delay() પર millis() ની શક્તિ દર્શાવે છે.

આ ઉદાહરણ Arduino શરૂ થાય તે ક્ષણથી સમય તપાસે છે. વિડિયો શ્રેણીનું ત્રીજું ઉદાહરણ પ્રથમ બટન દબાણનો સમય રેકોર્ડ કરીને અને ફક્ત ત્યારે જ ક્રિયા શરૂ કરીને આ પર આધારિત છે જો ઓછામાં ઓછા 5 સેકન્ડ પછી બીજું દબાણ થાય. તે તર્ક પાઠ 14/31-3: પુશ બટન સાથે Arduino કોડિંગ millis() ઉદાહરણ 3 માં આવરી લેવામાં આવ્યો છે.

લાઇવ પ્રોજેક્ટ પ્રદર્શન

એકવાર તમે કોડ અપલોડ કરો અને સીરિયલ મોનિટર ખોલો (9600 બૉડ પર), તમે સંખ્યાઓનો સતત પ્રવાહ જોશો, જે બોર્ડ ચાલુ થયા પછી મિલિસેકન્ડ દર્શાવે છે. જો તમે 5 સેકન્ડ પસાર થાય તે પહેલાં પુશ બટન દબાવીને પકડી રાખો છો, તો કંઈ થશે નહીં. જો કે, જો તમે 5-સેકન્ડના નિશાન પછી બટન દબાવીને પકડી રાખો છો, તો તમે સીરિયલ મોનિટરમાં "Take action" સંદેશ છપાયેલો જોશો. જ્યાં સુધી બટન પકડી રાખવામાં આવે ત્યાં સુધી ક્રિયા છપાતી રહેશે. આ એક નોન-બ્લોકિંગ ટાઈમર દર્શાવે છે જે અન્ય કોડ (છપાઈ) ને સરળતાથી ચાલવા દે છે. (વિડિયોમાં 10:52 પર)

આ વિડિયોમાંથી સંબંધિત પ્રોજેક્ટ્સ

આ વિડિયો Arduino ટાઇમિંગ અને મેપિંગ ફંક્શન્સ પરની બહુ-ભાગની શ્રેણીનો ભાગ છે. આ જ સ્ત્રોત સામગ્રીમાંથી બનાવેલા અન્ય ટ્યુટોરિયલ્સ શોધો:

પ્રકરણો

  • [00:00] millis() અને SunFounder કિટનો પરિચય
  • [01:19] millis() શું છે અને delay() ને બદલે તેનો ઉપયોગ કેમ કરવો?
  • [03:06] વ્યવહારુ પ્રદર્શન: millis() મૂલ્ય છાપવું
  • [05:46] millis() અને unsigned long સાથે ઇવેન્ટ બનાવવી
  • [08:29] INPUT_PULLUP સાથે પુશ બટન વાયરિંગ અને કોડિંગ
  • [10:52] પુશ બટન સાથે ઇવેન્ટ ઉદાહરણ ચલાવવું
  • [12:14] ઉદાહરણ 3 ની ઝલક: બીજા બટન દબાવવાનું શોધવું
  • [17:20] map() ફંક્શનનો પરિચય
  • [19:47] LED સાથે map() ફંક્શન કોડિંગ અને પ્રદર્શન

છબીઓ

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
917-Lesson 14/31-2: Arduino coding millis() example 2 with event
ભાષા: C++
/*
Lesson 14/31: Arduino coding millis() example 2 with event
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


unsigned long event = 5000;// 5 seconds
void setup() {
  Serial.begin(9600);//initialize serial monitor
  Serial.println("Introduction to millis");
  pinMode(2,INPUT_PULLUP);
  


}

void loop() {
  // Robojax.com millis() example 1
  Serial.println(millis());
  int pb = digitalRead(2);// read pin 2
  if(pb ==LOW)
  {
      if(millis() >= event)
      {
        Serial.println("Take action");
      }// if end
  }// if end
  
}// loop end

સંસાધનો અને સંદર્ભો

ફાઇલો📁

વપરાશકર્તાનું માર્ગદર્શિકા