Een ander Arduino teller (4 / 5 stap)

Stap 4: Code

[code]

/*******************************************************

RSP Humpleby 2014

Project - adaptieve teller kan worden afgestemd op elke huidige machine.

Voordelen:-

Geschikt voor het verzenden van graaf gegevens terug naar andere locaties voor meer accurate en betrouwbare deel telt.

Geschikt voor het afsluiten van de machine aan einde van run voor verandering over

Exploitant kan vertellen wanneer einde van deel run klaar is met het opslaan van kosten in het "meer dan Looppas"

Kan gemonteerd worden in minder gevoelig posities dan huidige mechanische tellers.

Lange termijn kostenbesparingen.

Betrouwbaarder.

Uitzonderlijk flexibel kan worden geprogrammeerd om extra functies op dezelfde boord zoals machine tempratures opnemen, automatische verlichting, ethernet, aanroepgegevens logging, enz.

Wide + 5v aan + 20 maximale voedingsspanning.

Goedkoper dan mechanische tellers.

Logboeken en tijdstempels zal tonen waar tellers werden opnieuw instellen of geknoeid.

Als exploitanten zich bewust van dit zijn is het mogelijk dat zij minder vatbaar voor "zachte toffee" getallen die in betere / nauwkeuriger graven resulteren zal.

Moet ook mogelijk zijn functie op te nemen van de bar / materiaal toe te voegen typ selectie wat resulteert in betere voorraadniveau van specifieke onderdelen.

Kan worden ingesteld voor de exploitant (onveilige) of onderhoud (veilig) toename wijzigen.

Sensor input schild momenteel voor demonstratie, maar gemakkelijk gemodificeerde voor meerdere bronnen van inductieve, capacitieve, IR, microswitch, etc. etc.

Dit programma momenteel is ingesteld voor bar schaar variabele increment grootte (geschikt voor elke toename van 1 tot 32.767 zie hierboven).

***********************************************************

bekende beperkingen:-

Bovenste limiet 32.767 als gevolg van 8 bit arithmatic (kon gebruiken FLOAT uit te breiden tegen).

Stuc sensor blijven tellen maar tijdstempels zal tonen waar dit gebeurde en dit zou gebeuren op andere elektronische tellers.

Suceptible te hoge elektrische ruis. Moet in geval van afgeschermde / metaal in de meeste toepassingen.

Vereist voeding binnen 10 voet van MCU.

EEPROM schrijven limiet 100.000!!! op welk punt moet eenheid programma naar 4 nieuwe EEPROM locaties (512 beschikbaar)

TO DO *****************************************************

Toevoegen van EEPROM herstellen voor telling bij stroomstoring

menu van de omslaggrootte bundel instellen

increment menu instellen

***********************************************************

Herziening

1.4 gebruik van string-matrix.

Increment automatisch ingesteld op één voor machines dan schuintrekken (gedefinieerd door sting volgorde).

EEPROM schrijven volgens George suggestie toevoegen

EEPROM duidelijk toevoegen voor legitieme reset (waarschijnlijk twee punten)

1.3 toegevoegd Andrew suggestie van bundel countdown.

Toegevoegde routine voor pin hoge eind van de bundel. exploitant signaal.

Toegevoegde machine lijst (matrix) voor toekomstig gebruik.

1.2 opgenomen naar beneden van de graaf.

Toegevoegde graaf increment en lagere maximumgrenzen.

Verbeterde uitgang voor seriële.

1.1 basic counter functie en alleen opnieuw instellen.

********************************************************/

#include / / display bibliotheek

LiquidCrystal lcd (8, 13, 9, 4, 5, 6, 7); Selecteer de pinnen gebruikt op het LCD-scherm

#include / / EEPROM functies

int bundel = 1000; de grootte van de bundel

int nm = 2; selectie van machine 0 = grote shear, 1 = kleine afschuiving enz enz

int lcd_key = 0; belangrijke initiële waarde instellen

int adc_key_in = 0; analoge pincode instellen voor belangrijke lezen

int count = 0; geteld vanaf nul

int inc = 50; instellen van teller increment *** temp ingesteld op 50 voor demo alleen ***

int deb = 300; 1ste ontdendering / valse trigger factor (0,3 seconden)

int del2 = 100; 2de ontdendering / valse trigger factor (0.1 seconden)

int led2 = 11; 11 gebruiken als signaal indicator voor bundel einde

int addr = 0; instellen voor EEPROM schrijven

int va5 = 1234; instellen als een oneven aantal voor lezen terug vanaf EEPROM en overdracht te bundelen die nog niet gebruikt

int. bd0 = ((EEPROM.read(0)*4)); Lees bundel waarde vanaf EEPROM die nog niet gebruikt

int. nm0 = ((EEPROM.read(1)*4)); Nm waarde afgelezen EEPROM die nog niet gebruikt

int. ct0 = ((EEPROM.read(2)*4)); Waarde van de count lezen vanaf EEPROM die nog niet gebruikt

int in0 = ((EEPROM.read(3)*4)); Lees inc waarde vanaf EEPROM die nog niet gebruikt

#define btnRIGHT 0 / / gewend decrement (inc) graaf stappen

#define btnUP 1 / / inrement (inc) tellen

#define btnDOWN 2 / / decrement graaf door (inc)

#define btnLEFT 3 / / gebruikt voor het ophogen van (ex) graaf stappen

#define btnSELECT 4 / / gebruikt om de teller op nul instellen

#define btnNONE 5 / / gebruikt voor fout doeleinden alleen

#define endloop 6 / / jump naar einde van de routine van de bundel

#define herstart / / nog niet gestart

MACHINE lijst (zie "nm" variabele) kunt u deze aanpassen aan uw eigen behoeften, maar ik zet de machines één knippen zou 6 bars die de basis vormt voor de telling van de increment meerdere bezuinigingen op de voorzijde van de lijst doen.

char * Str1 [] = {"grote 45 SHEAR", "kleine 45 SHEAR", "Rechte SHEAR", "Plaat PRESS", "ROLL vorm", "VOORMACHINES", "ONE THREADER", "Twee THREADER",

"IK / D MACHINE", "PEELER", "AUTO PIN EEN", "AUTO PIN TWEE", "HANDLEIDING PIN EEN", "HANDLEIDING PIN TWEE", "KOPTEKST", "WELDER ONE", "WELDER TWEE", "WELDER DRIE"};

int read_LCD_buttons() / / Lees de knoppen

{

herstarten;

adc_key_in = analogRead(0); luiden naar de waarde van het schild

mijn knoppen wanneer Lees zijn gecentreerd op deze valies: 0, 144, 329, 504, 741

ongeveer 50 toevoegen aan deze waarden en controleren om te zien als we nauwe

Als (nm > = 3) inc = 1; Als de machine niet schuintrekken vervolgens toename = 1

Als (bundel < = 0) terug van endloop;

Als (adc_key_in > 1000) return btnNONE; over het algemeen geen schakelaar geactiveerd

BAR INC

Als (adc_key_in < 50 & & inc < = 10) inc = inc + 1; verhogen bar graaf stap-grootte niet meer dan 10 geboden

EEPROM.write (3, inc); Winkel INC in EEPROM

Als (adc_key_in < 50) return btnRIGHT;

TELLER INC

delay(del2);

Als (bundel < = 0) terug van endloop;

Als (adc_key_in < 250) tellen = count + inc; Increment teller door "inc"

EEPROM.write (2, telling); Graaf opgeslagen in EEPROM

Als (adc_key_in < 250) bundel = bundel - inc; verkleinen van de bundel

Als (adc_key_in < 250) return btnUP;

delay(del2);

TELLER-DEC

Als (bundel < = 0) terug van endloop;

Als (adc_key_in < 450) tellen = tellen -inc; decrement teller door "inc"

EEPROM.write (2, telling); Graaf opgeslagen in EEPROM

Als (adc_key_in < 450) bundel = bundle + inc; vergroten van de bundel

EEPROM.write (0, bundel); Winkel bundel in EEPROM

Als (adc_key_in < 450) return btnDOWN;

BAR DEC

delay(del2);

Als (bundel < = 0) terug van endloop;

Als (adc_key_in < 650 & & inc > = 1) inc = inc - 1; decrement bar graaf stap-grootte

EEPROM.write (3, inc); Winkel INC in EEPROM

Als (adc_key_in < 650) btnLEFT retourneert;

ENDLOOP-STAP-SPRINGEN

delay(del2);

Als (bundel < = 0) terug van endloop;

RESET

delay(del2);

Als (adc_key_in < 850) tellen = 0; teller reset

Als (adc_key_in < 850) bundel = 1000; Reset bundel

voor (int i = 0; ik < 3; i ++) / / clear eerste 5 bytes van EEPROM

EEPROM.write (i, 0); Schakel de eerste 5 bytes van EEPROM

Als (adc_key_in < 850) return btnSELECT;

Return btnNONE; in geval van fout

}

void setup / / INITALISE

{

Serial.begin (9600); Instellen van seriële en externe tellen met behulp van "coole term"

terwijl (!. Seriële) {}

; wachten op de seriële poort te verbinden. Alleen nodig voor Leonardo

}

LCD.begin (16, 2); de LCD's aantal kolommen en rijen instellen:

lcd.setCursor (0, 0); lijn 1

LCD.Print ("JENMAR INC c2014"); Splash-scherm

lcd.setCursor (0, 1); lijn 2

LCD.Print ("ADAPTIEVE COUNTER"); Splash-scherm

vertraging (5000); onderbreken van 10 seconden

LCD.Clear(); scherm wissen

lcd.setCursor (0, 0); lijn 2

LCD.Print(Str1[nm]); STD MACHINE LOGO

pinMode (led2, OUTPUT); definiëren van signaal op

}

void loop / / MAIN LOOP

{

lcd.setCursor(0,1); verplaatsen naar het begin van de tweede lijn

lcd_key = read_LCD_buttons(); Lees de knoppen

schakelaar (lcd_key) / / afhankelijk van welke knop werd geduwd, we een actie uitvoeren

{

Case btnRIGHT:

{

Als (inc > = 10) inc = 10; bovengrens zorgen

Serial.println(Str1[nm]);

Serial.Print ("increment =");

Serial.println(Inc);

vertraging (deb); ontdendering en increment teller stap + 1

breken;

}

Case btnLEFT:

{

Als (inc < = 0) inc = 1; ondergrens zorgen

Serial.println(Str1[nm]);

Serial.Print ("Decrement =");

Serial.println(Inc);

vertraging (deb); ontdendering decrement teller - stap1

breken;

}

Case btnUP:

{

LCD.Print(Count); teller plus telling weergeven

LCD.Print ("BNDL >"); Tekst van de bundel

LCD.Print(Bundle); bundel graaf

LCD.Print(""); volgspaties

Serial.println(Str1[nm]);

Serial.Print ("UP count");

Serial.println(Count);

vertraging (deb); ontdendering

breken;

}

Case btnDOWN:

{

LCD.Print(Count); teller minus graaf weergeven

LCD.Print ("BNDL >"); Tekst van de bundel

LCD.Print(Bundle); bundel graaf

LCD.Print(""); volgspaties

Serial.println(Str1[nm]);

Serial.Print ("DOWN count");

Serial.println(Count);

vertraging (deb); ontdendering

breken;

}

Case btnSELECT:

{

LCD.Print(Count); teller terug op nul weergeven

LCD.Print ("BNDL >"); Tekst van de bundel

LCD.Print(Bundle); bundel graaf

LCD.Print(""); volgspaties

Serial.Print ("***");

Serial.Print (Str1[nm]);

Serial.Print ("teller RESET *** =");

Serial.println(Count);

voor (int i = 0; ik < 4; i ++) / / clear eerste 5 bytes van EEPROM

EEPROM.write (i, 0); Schakel de eerste 5 bytes van EEPROM

vertraging (deb); ontdendering

breken;

}

Case endloop:

{

digitalWrite (led2, hoge); de bundel einde signaal inschakelen

LCD.Clear(); scherm wissen

lcd.setCursor (0, 0); lijn 1

LCD.Print ("> bundel einde <"); Splash-scherm

lcd.setCursor (0, 1); lijn 2

LCD.Print ("* verandering OVER *"); Splash-scherm

vertraging (20000); onderbreken van 20 seconden

digitalWrite (led2, laag); de bundel einde signaal uitschakelen

bundel = 1000; Reset bundel

Graaf = 0; teller reset

voor (int i = 0; ik < 4; i ++) / / clear eerste 5 bytes van EEPROM

EEPROM.write (i, 0); Schakel de eerste 5 bytes van EEPROM

LCD.Clear(); scherm wissen

lcd.setCursor (0, 0); lijn 1

LCD.Print(Str1[nm]); STD LOGO

lcd.setCursor(0,1); lijn 2

breken;

}

Case btnNONE:

{//lcd.print ("geen"); behandelen als een reguliere indrukken van een toets

vertraging (deb); ontdendering

breken;

}

Case epWRITE:

// {

Kopieën van kritische variabelen naar EEPROM schrijven

int va0 = bundel / 4; prep variabelen voor eeprom

int va1 = nm / 4; prep variabelen voor eeprom

int va2 = aantal / 4; prep variabelen voor eeprom

int va3 = inc / 4; prep variabelen voor eeprom

EEPROM.write (0, va0); schrijven naar eeprom

EEPROM.write (1, va1); schrijven naar eeprom

EEPROM.write (2, va2); schrijven naar eeprom

EEPROM.write (3, va3); schrijven naar eeprom

// }

Case EPclear:

// {

Legitieme reset *** verplaatst naar legit reset sectie ***

EEPROM duidelijke routine

voor (int i = 0; ik < 4; i ++) / / clear eerste 5 bytes van EEPROM

EEPROM.write (i, 0); Schakel de eerste 5 bytes van EEPROM

breken;

// }

Case EPread:

// {

Lezen en bijwerken van variabelen vanaf EEPROM, als ze bestaan zijn verschillend van 0 of initiële waarde

va0 = (EEPROM.read(0)*4); Lees bundel waarde vanaf EEPROM

int bundel = va0 * 4; Ingestelde variabelen met behulp van de eeprom

va1 = (EEPROM.read(1)*4); Waarde van de count lezen vanaf EEPROM

int count = va1 * 4; Ingestelde variabelen met behulp van de eeprom

va2 = (EEPROM.read(2)*4); Machine naamwaarde lezen vanaf EEPROM

int nm = va2 * 4; Ingestelde variabelen met behulp van de eeprom

va3 = (EEPROM.read(3)*4); Lees increment-waarde vanaf EEPROM

int inc = va4 * 4; Ingestelde variabelen met behulp van de eeprom

breken;

// }

}

}

EOF

[/ code]

Gerelateerde Artikelen

Hoe te programmeren een AVR (arduino) met een ander arduino

Hoe te programmeren een AVR (arduino) met een ander arduino

deze instructables is handig als:* je hebt je arduino met atmega168 en je kocht een atmega328 op je lokale elektronicawinkel. Het hoeft niet een arduino bootloader* u wilt maken van een project dat geen gebruik maakt van arduino - gewoon een regelmat
Een ander Arduino Taffic licht

Een ander Arduino Taffic licht

na het werken met de arduino en niet wetende wat de heck ik doe maakte ik een andere eenvoudige verkeerslicht. Ik keek rond het web te vinden, die ziet er over het normaal en niemand kwam. Ze leek ook snel. Dus, ik vond en modded enkele code om dit w
Nog een ander Arduino 110v Power Controller

Nog een ander Arduino 110v Power Controller

dit Instructable toont u hoe te bouwen van een vier-bende stopcontact-doos waarin elk stopcontact wordt beheerd via een Arduino (of elke andere TTL-level signalen).Het verschilt van de andere relay-dozen in dat het gebruikt geen printplaten en zeer w
Een ander Arduino Laser Tripwire

Een ander Arduino Laser Tripwire

dit is mijn versie van login258 van laser tripwire opIk heb een paar wijzigingen: de laser is nu onafhankelijk van de Arduino, zodat het kan overal worden geplaatst op de kamer en ik de LED in een zoemer veranderde heb.LASERS ZIJN GEVAARLIJK EN KUNNE
Een ander Arduino afstandsbediening auto bestuurd door Android telefoon via Bluetooth-Module

Een ander Arduino afstandsbediening auto bestuurd door Android telefoon via Bluetooth-Module

Deze tutorial gaat door het opzetten van de Arduino IDE voor gebruik met een Adafruit motor shield kloon board, alsmede het opzetten van een oude RC auto, zodat het kan worden gecontroleerd met een android telefoon via bluetooth. De Code voor de RC a
64 pixel RGB-LED Display - een andere kloon Arduino

64 pixel RGB-LED Display - een andere kloon Arduino

dit scherm is gebaseerd op een 8 x 8 RGB LED Matrix. Voor testdoeleinden was deze verbonden op een standaard Arduino board (Diecimila) met behulp van 4 shift registers. Na het krijgen van het aan het werk permatized ik het op een fabbed PCB. De regis
Bouwen van een eenvoudige binaire teller met behulp van de Arduino

Bouwen van een eenvoudige binaire teller met behulp van de Arduino

De volgende instructable zal gaan door de stappen voor het bouwen van een eenvoudige binaire teller met behulp van de volgende materialen.1 x Arduino Uno1 x drukknop5 x LED's (maar het aantal bits u wilt uw teller)1 x 10 k ohm weerstand1 x 220 ohm we
Yarcow (nog een ander Rover aangestuurd via Wifi) - Makeblock, Arduino, Droidscript

Yarcow (nog een ander Rover aangestuurd via Wifi) - Makeblock, Arduino, Droidscript

In dit Instructable, zullen wij bekijken hoe te bouwen van een Wifi/web gecontroleerde rover gebaseerd op Makeblock Starter Robot Kit en Dave-Smart howto.Hoe is het werk:De rover in een browser (smartphone of computer) wordt beheerd, de opdrachten wo
Arduino gesynchroniseerd met een andere Bites the Dust

Arduino gesynchroniseerd met een andere Bites the Dust

In deze tutorial zal ik u tonen hoe te maken en arduino gesynchroniseerd met "Another One Bites The Dust" door koningin. U moet:Arduino Uno3 LED'sPerfboardSoldeerDraadSoldeer-minder brood bordStep 1: Brood Board testversieIk drie LED's aan de br
YABBAS- nog een andere kale botten Arduino (op klemmenstrook)

YABBAS- nog een andere kale botten Arduino (op klemmenstrook)

dit Instructable Demonstreer de bouw van een kale botten (en echt goedkoop... minder dan $5) Arduino compatibel module die kan worden samen gelegd op een klein stukje van de klemmenstrook en kan worden gebruikt op een breadboard of onafhankelijk daar
Een ander kartonnen robot-stofzuiger gecontroleerd met Arduino

Een ander kartonnen robot-stofzuiger gecontroleerd met Arduino

Dit is een eenvoudige robot-stofzuiger gecontroleerd door Arduino.Dit kan nog eenvoudiger als in plaats van turbine en stof-bin - gebruik een keuken weefsel of een stuk synthetisch weefsel.Stap 1: Vereiste onderdelenArduinoMotor-shield - besturingsel
Nog een ander Exploration Rover web-gecontroleerde (met Raspberry Pi en Arduino. Android, Iphone, PC, MAC compatible)

Nog een ander Exploration Rover web-gecontroleerde (met Raspberry Pi en Arduino. Android, Iphone, PC, MAC compatible)

Hier is een andere exploration rover, gebouwd in 1 uur of minder, zonder dat hoeft te programmeren. Everthing die u nodig is in het vak! Het geeft je basis te bouwen en verbeteren van uw eigen rover.RaspberryPi met wifi USB-adapter, USB-webcam, de we
1-4 digit Arduino teller

1-4 digit Arduino teller

dit project is ideaal om te begrijpen van de logica van het werk van een teller met behulp van Arduino code aangezien u beschikbaar 4 programma's hebt: 1 voor 1-cijfer, 1 voor 2-cijferige, 1 voor 3-cijferig, en andere voor de 4-cijferige teller met é
Pijp Bot - een slimme arduino bluetooth robot

Pijp Bot - een slimme arduino bluetooth robot

Dit is mijn eerste instructables. Hier ben ik tonen hoe maak je een goedkope twee wielen arduino bluetooth robot, met behulp van PVC-buizen en haar gewrichten (voor het maken van het lichaam). Het is eenvoudig om te maken en eenvoudig te programmeren