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.