Arduino mätarställning för cykel (1.1 mA totala strömmen, ingen display) (2 / 5 steg)
Steg 2: Skiss
Nedan visas de Arduino skisser du kommer att behöva använda vägmätare. Jag ingår också den .ino arkivera (koden är densamma som anges nedan, men du kanske vill ladda ner filerna .ino eftersom olägenheter HTML taggar kan visas i den inbäddade koden)
Odometer skiss:
< p > #include < avr/eeprom.h >
#include < avr/sleep.h >
flyktiga osignerade långa totRot, rotSinceClr;
flyktiga boolean canClear; //determine om det är
"säkra" till noll rotSinceClr
eftersom avbrott kan utlösas
under installationen av programmet
void setup()
{
CLKPR = B10000000;
CLKPR = B00000001; //divide ck av 2
canClear = false;
pinMode (2, INPUT_PULLUP).
totRot = eeprom_read_dword((uint32_t*)0) + 0x80; //round upp
rotSinceClr = eeprom_read_dword((uint32_t*)4);
attachInterrupt (0, rot, faller); //int0 är stift 3 på micro
attachInterrupt (1, clr, faller); //int1 är pin2 på micro
}
void clr()
{
IF(canClear)
{
rotSinceClr = 0;
eeprom_update_dword ((uint32_t*) 4, 0);
}
}
void loop()
{
CLI();
canClear = sant;
digitalWrite 13, låg.
IF(totRot%(0x100) == 0)
{
eeprom_update_dword ((uint32_t*) 0, totRot);
}
IF(rotSinceClr%(0x100) == 0)
{
eeprom_update_dword ((uint32_t*) 4, rotSinceClr);
}
Tack vare < en href = "http://www.nongnu.org/avr-libc/user-manual/group__avr__sleep.html" > http://www.nongnu.org/avr-libc/user-manual/group_...>
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
SEI();
sleep_cpu();
sleep_disable();
SEI();
digitalWrite 13, hög.
Detta är den enda platsen i loop() där
avbrott bör kallas
}
void rot()
{
totRot ++;
rotSinceClr ++;
} < /p >
Visning avstånd skiss: (Använd denna skiss för att Visa avstånd reste på serial bildskärmen)
< p > #include < avr/eeprom.h >
#define ROT_PER_MI 737 / / för en 700c hjul
void setup()
{
osignerade långa totRot = eeprom_read_dword((uint32_t*)0);
osignerade långa rotSinceClr = eeprom_read_dword((uint32_t*)4);
tag (!. Seriell);
Serial.BEGIN(9600);
String toPrint = "totRot:";
toPrint += totRot;
toPrint += "\nrotSinceClr:";
toPrint += rotSinceClr;
Serial.println(toPrint);
Serial.Print ("total miles:");
Serial.println(((float)totRot)/ROT_PER_MI);
Serial.Print ("miles sedan clr:");
Serial.println(((float)rotSinceClr)/ROT_PER_MI);
}
void loop()
{
} < /p >