Arduino baserad Auto Timer / sluta titta på Timer för strök tid mätning (5 / 6 steg)
Steg 5: Arduino skiss - programmering
Sista sketch\code för Arduino nedan:/*
Skiss \ koden av Chuppandi aka Jana
Chuppandi
www.chuppandee.blgospot.com
*/
#include < StopWatch.h >
#include < LiquidCrystal.h >
LiquidCrystal lcd (7, 8, 9, 10, 11, 12); LCD pins försäkran
int switchPin1 = 3; / / VÄXEL1 är ansluten till stift 3
int switchPin2 = 2; / / VÄXEL2 är ansluten till stift 2
int ledPin = 13. LED är ansluten till stift 13 i arduino
int värde1;
int värde2;
int frameRate = 500. bildfrekvens (bildrutor per sekund) som stoppuret körs - förändring som passar
långa intervall = (1000/frameRate); Blink intervall
char buf [15f00]; Strängbufferten för itoa funktion
osignerade långa starttime = 0;
osignerade långa endtime = 0;
osignerade långa lasttime = 0;
osignerade långa currenttime = 0;
Stoppur sw_millis; MILLIS (standard)
Stoppur sw_micros(StopWatch::MICROS);
Stoppur sw_secs(StopWatch::SECONDS);
void setup() {
LCD.BEGIN(16,2);
pinMode (switchPin1, ingång);
pinMode (switchPin2, ingång);
pinMode (ledPin, produktionen);
Serial.BEGIN(9600);
sw_millis.start();
sw_micros.start();
sw_secs.start();
}
void loop() {
värde1 = digitalRead(switchPin1); Läs indatavärde och lagra den i val
värde2 = digitalRead(switchPin2); Läs indatavärde och lagra den i val
om (värde1 == låg & & värde2 == låg)
{
digitalWrite (ledPin, hög); Aktivera LED
currenttime = (sw_millis.elapsed() - lasttime);
Serial.Print("sw_millis=");
Serial.println(sw_millis.Elapsed());
Serial.Print("sw_micros=");
Serial.println(sw_micros.Elapsed());
Serial.Print("sw_secs=");
Serial.println(sw_secs.Elapsed());
LCD.Clear();
LCD.Print("SECS:");
float SEK = sw_millis.elapsed () / 10;
LCD.Print(SEC);
int elapsedMinutes = (currenttime / 60000L);
int elapsedSeconds = (currenttime / 1000 L);
int elapsedFrames = (currenttime / intervall);
int fractionalSecs = (int) (elapsedSeconds % 60L).
int fraktionerad = (int) (elapsedFrames % frameRate); använda modulooperatorn för att få decimaldelen av 100 sekunder
fractionalSecs = (int) (elapsedSeconds % 60L). använda modulooperatorn för att få decimaldelen av 60 sekunder
int fractionalMins = (int) (elapsedMinutes % 60L). använda modulooperatorn för att få decimaldelen av 60 minuter
LCD.Clear(); tydlig LCD
LCD.Print("Time:");
om (fractionalMins < 10) {/ / pad i inledande nollor
LCD.Print("0"); lägga till en nolla
}
LCD.Print (itoa (fractionalMins, buf, 10)); konvertera int till en sträng och skriva ut en decimaldelen av 60 minuter till LCD-skärmen
LCD.Print(":"); skriva ut en colan.
om (fractionalSecs < 10) {/ / pad i inledande nollor
LCD.Print("0"); lägga till en nolla
}
LCD.Print (itoa (fractionalSecs, buf, 10)); konvertera int till en sträng och skriva ut en decimaldelen av 60 sekunder att LCD-skärmen
LCD.Print(":"); skriva ut en colan.
om (fraktionerad < 10) {/ / pad i inledande nollor
LCD.Print("0"); lägga till en nolla
}
LCD.Print (itoa (fraktionerad, buf, 10)); konvertera int till en sträng och skriva ut en decimaldelen av 25 bildrutor till LCD-skärmen
lcd.setCursor (0, 1);
LCD.Print ("MANÖVERDONET TIMER");
EndTime = currenttime;
/ * lcd.print ("ms =");
LCD.Print(sw_millis.Elapsed());
lcd.setCursor (0, 1);
LCD.Print("US=");
LCD.Print(sw_micros.Elapsed());
*/
Delay(10);
}
om (värde1 == låg) {
digitalWrite (ledPin, låg);}
annat {
lasttime = sw_millis.elapsed();
EndTime = (sw_millis.elapsed() - starttime);
EndTime = (currenttime - starttime);
digitalWrite (ledPin, låg);
int elapsedMinutes = (endtime / 60000L);
int elapsedSeconds = (endtime / 1000 L);
int elapsedFrames = (endtime / intervall);
int fractionalSecs = (int) (elapsedSeconds % 60L).
int fraktionerad = (int) (elapsedFrames % frameRate); använda modulooperatorn för att få decimaldelen av 100 sekunder
fractionalSecs = (int) (elapsedSeconds % 60L). använda modulooperatorn för att få decimaldelen av 60 sekunder
int fractionalMins = (int) (elapsedMinutes % 60L). använda modulooperatorn för att få decimaldelen av 60 minuter
LCD.Clear(); tydlig LCD
LCD.Print("Time:");
om (fractionalMins < 10) {/ / pad i inledande nollor
LCD.Print("0"); lägga till en nolla
}
LCD.Print (itoa (fractionalMins, buf, 10)); konvertera int till en sträng och skriva ut en decimaldelen av 60 minuter till LCD-skärmen
LCD.Print(":"); skriva ut en colan.
om (fractionalSecs < 10) {/ / pad i inledande nollor
LCD.Print("0"); lägga till en nolla
}
LCD.Print (itoa (fractionalSecs, buf, 10)); konvertera int till en sträng och skriva ut en decimaldelen av 60 sekunder att LCD-skärmen
LCD.Print(":"); skriva ut en colan.
om (fraktionerad < 10) {/ / pad i inledande nollor
LCD.Print("0"); lägga till en nolla
}
LCD.Print (itoa (fraktionerad, buf, 10)); konvertera int till en sträng och skriva ut en decimaldelen av 25 bildrutor till LCD-skärmen
lcd.setCursor (0, 1);
LCD.Print ("MANÖVERDONET TIMER");
}
}
Slutet av programmet