PchButik.se

ï»ż

Kontaktstuds

Kontaktstuds

Hitta komponenter hÀr.

http://pchbutik.se/

Kontaktstuds bild 1

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.

Kontaktstuds bild 2

Denna koppling Àr helt sÀker, det kan inte studsa sÄ det rÀknar flera steg pÄ en gÄng.

Kontaktstuds bild 3

BÄda stift 2 och 3 mÄste ha varit lÄga innan rÀknaren tar ett steg.

Kontaktstuds bild 4

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.