

Kontaktstuds

Alla brytare har kontaktytor som studsar när de slås ihop.
Detta kan göra att räknaren hoppar ett par steg när du trycker.
Det finns flera sätt att ta bort eller minska studsen.
Tycker att det lättaste sättet är växlande strömbrytare, och att den måste växla från en kontakt till en annan innan det räknar ett steg.

Denna brytare räknar bra, för den har inte mycket studs.
Men tryck slarvigt på brytaren, så går det fel ibland.
Bibloteket 'LedControl' Kan laddas ner från denna sida: https://github.com/wayoda/LedControl
/* Digitalt räkneverk, räknar ett steg upp för varje tryck på knappen. Studsfri koppling med en växlande brytare. Skapad: 2015-03-06 Av: pc_h - pchbutik.se */ // Brytaren kopplas till pinne 2 och 3 på UNO-kortet. // Ändra detta till den pinne du vill använda. //Gemensamma pinnen kopplas till GND const int pinneBrytareNere = 2; // Digital ingång kopplad från strömbrytarens nedre slutare NO (Normal Opend) const int pinneBrytareUppe = 3; // Digital ingång kopplad från strömbrytarens övre slutare NC (Normal Closed) #include "LedControl.h" /* Pinnarna från LED-Displayen kopplas så här till UNO-kortet DIN kopplas till UNO pinne 12 CLK kopplas till UNO pinne 11 CS kopplas till UNO pinne 10 */ LedControl lc=LedControl(12,11,10,1); //Ettan betyder att vi har en Display i kaskaden. unsigned long c = 0; boolean HarVaritUppe = true; void setup() { //Initsiera LED-Displayen lc.shutdown(0,false); lc.setIntensity(0,8); lc.clearDisplay(0); //Initsiera IO pinMode(pinneBrytareNere, INPUT_PULLUP); pinMode(pinneBrytareUppe, INPUT_PULLUP); DisplayNumber(c); } void loop(){ //Denna räknar när brytaren trycks ner. //Men räknar bara om brytaren varit uppe. if (digitalRead(pinneBrytareUppe) == LOW){ HarVaritUppe = true; } if (digitalRead(pinneBrytareNere) == LOW){ if (HarVaritUppe == true){ CountOneUp(); HarVaritUppe = false; } } } //Varje gång denna anropas ökar talet c ett steg upp void CountOneUp() { c = c + 1; //Räknar ett steg upp DisplayNumber(c); } //Skriver ut ett tal. void DisplayNumber(unsigned long number){ if(number > 99999999){ DisplayString("E9"); //Betyder Error 9, talet är för högt return; } String s = String(number); DisplayString(s); } //Skriver ut en sträng. void DisplayString(String s){ int l = s.length(); if(l > 8){ s = "E8"; //Betyder Error 8, strängen är för lång l = s.length(); } lc.setChar(0, 7, getChar(s, l-8), false); lc.setChar(0, 6, getChar(s, l-7), false); lc.setChar(0, 5, getChar(s, l-6), false); lc.setChar(0, 4, getChar(s, l-5), false); lc.setChar(0, 3, getChar(s, l-4), false); lc.setChar(0, 2, getChar(s, l-3), false); lc.setChar(0, 1, getChar(s, l-2), false); lc.setChar(0, 0, getChar(s, l-1), false); } //Denna returnerar vilket tecken som är på platsen i strängen. //Är platsen utanför strängen returneras ett blanksteg. char getChar(String s, int i){ char rc = ' '; if(s.length() > i ){ rc = s.charAt(i); } return rc; }
Denna sida är konverterad med hjälp av AI.
Skapad av Per-Anders Hult för PchButik.se.




