


8-siffrors-räknare
En enkel digital räknare som inte tar många portar på ett UNO-kort. Knappen tar en port och displayen tar 3 portar.
Denna koppling kan användas som varvräknare om du lindar en spole och vill veta hur många varv du har lindat.

Klicka på bilden för att lättare se hur det är kopplat.

För att få bättre kontakt, böj benen på brytaren som ett 'S'

Inkoppling till ett UNO-kort. Displayen Använder biblioteket 'LedControl'.
Brytaren bör vara av micro-switch typ för att minska kontaktstuds.
Bibloteket 'LedControl' Kan laddas ner från denna sida: https://github.com/wayoda/LedControl
Sketchen 'SimpelCounter'
/* Digitalt räkneverk, räknar ett steg upp för varje tryck på knappen. Skapad: 2015-03-01 Av: pc_h - pchbutik.se */ // Brytaren kopplas till pinne 2 på UNO-kortet. // Ändra detta till den pinne du vill använda. const int pinneBrytare = 2; // Digital ingång kopplad från strömbrytaren, andra pinnen av strömbrytaren kopplas till GND #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 senastBrytare = HIGH; void setup() { //Initsiera LED-Displayen lc.shutdown(0,false); lc.setIntensity(0,8); lc.clearDisplay(0); //Initsiera IO pinMode(pinneBrytare, INPUT_PULLUP); DisplayNumber(c); } void loop(){ //Denna räknar inte när brytaren trycks ner. //Men räknar när brytaren har varit nere och släppts upp igen. //Kallas för "Positiv flank". //pinneBrytare är HIGH när brytaren INTE är nertryckt //pinneBrytare är LOW när brytaren är nertryckt if (digitalRead(pinneBrytare) == HIGH){ if (senastBrytare == LOW){ CountOneUp(); senastBrytare = HIGH; } }else{ senastBrytare = LOW; } } //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; }




