PuttDuino putt-putt hål med arduino (11 / 11 steg)

Steg 11: Kodgranskning



jag vill gå över arduino koden till kanske Visa min tankeprocess runt sensorerna och hur man reagerar på dem så snabbt som möjligt. Jag ville använda avbryter bifogas sensorer, men...

Eftersom jag inte hade foto-transistorer som producerar digitala signal antingen på eller av, kunde jag inte använda avbrott i programvaran. Avbryter skulle tillåta mig att köra torkarna hela tiden och när som helst det var en boll som rullar förbi en sändare/detector sensor par, vissa åtgärder skulle kunna vidtas.

Eftersom det är jag använde fotodioder som producerar en analog snarare än digital/på signal så jag var tvungen att kontrollera status för sensorer samtidigt också skicka värden till servon kör torkarna.

Detta är vad jag gjorde.
Torkarna kör hela tiden. Jag gjorde denna åtgärd sin egen funktion
funktionen kallas "MoveServo" och tar 3 ingångar.
-vilken servo att flytta (slumpmässigt)
-Hur långt du vill flytta den torkar (slumpmässigt)
-Hur länge ska pausa innan han återvände till "hem" position
I funktionen satte jag kod som kontrollerar status på sensorerna mellan allt.
Dröjsmål slingan är jag tror där kontrollerar den mest.
Normalt en försening skulle vara ett kommando: delay();
i mitt fall jag gjorde dröjsmål kommando bara en millisekund och slinga antalet millisekunder över denna en millisekunden försening så att varje millisekund jag kunde säga arduino för att kontrollera status för sensorerna.
Jag tror det är närmast ett avbrott som jag kunde komma med denna typ av setup.

Resultatet är att arduino reagerar nästan direkt när en klumpa ihop sig korsar en sensor som är vad jag ville.

Här är funktionen MoveServo med några kommentarer till

void MoveServo (int servoNum, lång pos, int paus)
{
/ / före allt annat jag läste sensorer
ReadandReport(); / / detta samtal till en annan funktion som läser status för sensorer och skriver värdena till följetong för felsökning av
om (analogRead(impSensorPin) < 90) {StartMotor();} / / detta läser pumphjulet sensorn och hoppar till funktionen StartMotor om bollen är det
ReadNailPin(); / / detta läser nailgun stiftet och hoppar ut till funktionen om bollen är det

om (servoNum > = 50) / / slumptal skickas är mellan 1 och 100
{
wiper1.write(POS); / / tala servo #1 hur långt för att flytta
ReadandReport(); / / debug utmatning
om (analogRead(impSensorPin) < 90) {StartMotor();} / / som ovan kontrollera impellern sensor
ReadNailPin(); / / Kontrollera nail gun sensor
} annat { / / blir här om slumpmässiga torkar valet var mindre än 50 så flytta servo #2 och kontrollera sensorer
wiper2.write(POS);
ReadandReport();
om (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
}

Detta är en slinga som kontrollerar sensorer varje millisekund
för (jag = 0; jag / / denna paus är att vänta för servo att flytta och även för att pausa i slutet innan han återvände "hem"
{
ReadandReport();
om (analogRead(impSensorPin) < 90) {StartMotor();} / / samma som ovan
ReadNailPin(); / / samma som ovan
fördröjning (1). / / Detta är faktiska förseningen
}

}

NEDAN HÄR ÄR HELA KÄLLKODEN

#include

int nailPin = 0; Detta är den PIN-kod används för att aktivera spik pistolen
int LEDpin = 13. LED indikatorn visar att maskinen är igång
int fogPin = 20; Detta stift aktiverar dimma maskin
int nailSensorPin = 17; Detta är ansluten till IR-detektorn framför spik pistolen
int impSensorPin = 16. Detta är ansluten till IR-detektorn framför bollen pumphjulet

lång rndSrvoPos; variabel att lagra servo position
lång rndPause; Random paus tid
lång whichServo; Välj vilken servo att flytta

int jag = 0; generiska heltalsvariabel
int nailTriggerValue; värdet läsa från IR-LED trigger för nailGun
int pos; servo position variabel

Servo wiper1; första servo torkar objekt
Servo wiper2; andra servo torkar objektet
Servo impellerServo; servo för impeller-knappen pusher

void setup()
{

randomSeed(analogRead(3)); utsäde slumptalsgeneratorn
Serial.BEGIN(9600); setup följetong
pinMode (LEDpin, OUTPUT); ställa in pin lägen
pinMode(fogPin,OUTPUT);
pinMode(nailPin,OUTPUT);
pinMode(nailSensorPin,INPUT);
pinMode(impSensorPin,INPUT);

wiper1.attach(14); tillmäter det första objektet i torkar servo servo på stift 14
wiper2.attach(15); tillmäter det andra objektet torkar servo servo på stift 15
impellerServo.attach(12); Koppla till servo på stift 12 för impeller-knappen pusher

Blink3x(); blinka 3 gånger att ange start - typ av en makt på självtest

}

void loop()
{
sopa servon ett slumpmässigt belopp upp till 80 grader
pausa en slumpmässig tidsperiod från mellan 10 och 250 ms
rndSrvoPos = random(0,22);
rndPause = random(250,500);
whichServo = random(100);

ReadandReport();

om (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
MoveServo(whichServo,0,rndPause);
MoveServo(whichServo,80,rndPause);

}
void StartMotor()
{
Starta dimma
digitalWrite(fogPin,HIGH);
Delay(750);
impellerServo.write(112);
Delay(450);
impellerServo.write(90);
digitalWrite(fogPin,LOW);

för (jag = 0; jag < 2000; i ++) / / denna försening är ett försök att hålla motorn körs alltför ofta asp när bollen studsar ut
{
ReadandReport();
ReadNailPin();
Delay(1);
}

ReadandReport();
}

void FireNailGun()
{
ReadandReport();
Serial.println ("bränning cykel");
Delay(250);
digitalWrite(nailPin,HIGH);
Delay(10);
digitalWrite(nailPin,LOW);

}

void MoveServo (int servoNum, lång pos, int paus)
{
ReadandReport();
om (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
om (servoNum > = 50)
{
wiper1.write(POS);
ReadandReport();
om (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
} annat {
wiper2.write(POS);
ReadandReport();
om (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
}

för (jag = 0; jag {
ReadandReport();
om (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
fördröjning (1).
}

}

void ReadNailPin()
{
Läs stift och svara - bara spik pin...
Detta är ett försök till en manuell brytaren
om (analogRead(nailSensorPin) < 60) {FireNailGun();}
}

void Blink3x()
{
Power On Self Test cykel
ReadandReport();
digitalWrite(nailPin,HIGH);
Delay(250);
digitalWrite(nailPin,LOW);

digitalWrite(fogPin,HIGH);

digitalWrite(LEDpin,HIGH);
Delay(250);
digitalWrite(LEDpin,LOW);
Delay(250);
digitalWrite(LEDpin,HIGH);
Delay(250);
digitalWrite(LEDpin,LOW);
Delay(250);
digitalWrite(LEDpin,HIGH);
Delay(250);
digitalWrite(LEDpin,LOW);
digitalWrite(fogPin,LOW);

wiper1.write(80);
wiper2.write(80);
impellerServo.write(90);
impellerServo.write(112);
Delay(250);
impellerServo.write(90);
}

void ReadandReport()
{
Serial.Print ("impSensorPin:");
Serial.println(analogRead(impSensorPin));
Serial.Print ("nailSensorPin:");
Serial.println(analogRead(nailSensorPin));
}

Se Steg
Relaterade Ämnen

PHloat2 DIY surt vatten testning skulptur & kit med arduino

pHloatpHloat är en DIY kit som är gjorda för att användas tillsammans med en pre-ägda / befintliga arduino mikrokontroller. Dess syfte är att testa pH-nivåer i lokala floder, sjöar och vattendrag på grund av inflödet av luft- och vattenföroreningar s...

Grundläggande raden efter Robot med Arduino

09/07/2015Det har varit några år eftersom vi Ursprungligen postat denna grundläggande linje följande Robot med Arduino handledning, och det verkar så många människor tyckte att det bra att vi ska skicka en uppdatering som löper nuvarande Arduino bibl...

AtoZ av RC hobby + DIY radio med ARDUINO

Wikipedia definierar RC-fordon somEn fjärrkontroll fordon är några fordon som kontrolleras distans ett sätt som inte begränsar sin rörelse med ett yttre ursprung till enheten. Detta är ofta en radio kontroll enhet, kabel mellan kontroll och fordon, e...

Gränsyta borstlös likströmsmotor (BLDC) med Arduino

Detta är en handledning om hur att gränssnitt och köra en borstlös likströmsmotor med Arduino. Om du har några frågor eller kommentarer vänligen svara i kommentarer eller mail till rautmithil [at] gmail [dot] com. Du kan också kontakta mig @mithilrau...

En svävar sfär roterar lyser och blinkar med Arduino

En svävar lite Dödsstjärnan i Instructables bjöd in mig till det nya projektet med Arduino. Tre principer var beslutat och höll för att skilja den från föregångaren.Gör det själv med någon (eller mindre) färdiga.Hålla roterande.Göra glöd och blinka u...

Trådlös, hinder upptäcka, pipa roboten med Arduinos!

Detta är ett trådlöst styrd, autonoma hinder upptäcka robot!För ett tag sedan jag hade gjort detta Instructable och ville göra några stora uppgraderingar sedan dess.Följande är robotens funktioner:-1.he är trådlöst kontrollerade med 433 MHz Tx/Rx mod...

Trafiksignal / bromsljus ledningar med Arduino Controller

jag alltid velat ha en gammal trafiksignal och slutligen fick en nyligen. Det var dock mycket enkelt fast så att alla lampor var fast på. Vad kul är det? Jag ville prova en Arduino styrenhet och trodde detta skulle vara ett trevligt enkelt projekt at...

DIY Bluetooth telefon kontrollerade BB-8 Droid med Arduino UNO

Jag är ett stort Star Wars fan och när jag såg Star Wars: The Force vaknar tänkte jag att jag behöver en BB-8 droid. Det var häftigt hur detta lilla område flyttade i filmen. Så jag bestämde mig för att jag ska göra denna droid som baseras på Arduino...

Styra en kackerlacka med Arduino för under $30

För några år sedan jag såg bakgård hjärnor smartphone kontrollerad kackerlacka, och det blåste bara mitt sinne! Jag försökte få min mamma att låta mig köpa den, men omnämnandet av kackerlackor övertygade henne annars. :) Jag började göra projekt med...

Tankeläsare med Arduino

Hej alla!Detta är min tankeläsare för Arduino.Tankeläsare kan berätta vilken bokstav i alfabetet (ABC) eller som spelar kort du har föreställt med bara några frågor.Det är ett mycket enkelt projekt för församlingen och med några tråd anslutningar men...

Hemmagjord klocka med Arduino

Idag kommer jag visa dig hur man gör en hemmagjord klocka med en Arduino!Steg 1: Material + inställningar för ArduinoMaterial--SMA420564 sju Segment display-Vid minst 12 Sunfounder startkablar-Arduino Uno-Bredboard-2 knappar-2 220 Ohm motstånd-Källan...

USB-brons sätta en klocka på slående klocka (med Arduino)

irritera dina medarbetare: leda dem in i ber dig att stänga av din speciella PC-klocka!Denna lilla riggen infact gränssnitt via USB till din PC-klocka och genererar halv timmar dings på en riktig brons sätta en klocka på. Bra grejer i din office och...

DIY virtuell verklighet Skateboard erfarenhet med Arduino och Google kartong

Detta är ett riktigt roligt och enkelt projekt som kan göras ungefär en timme. På botten av skateboard är en accelerometer/gyro med en Arduino ombord som överför kantiga rörelse i styrelsen via bluetooth till en liten virtuell verklighet spel jag gjo...

En 15-LED RGB klocka med Arduino kärna

RGB klockan använder RGB sammansättning-färgmodellen används i alla färgskärmar. Denna modell använder tre "grundläggande" färger, nämligen röda, gröna och blå, för att bygga någon annan "sammansatta" färg av spektrumet. Med RGB klocka...

Styra datorn med Arduino och en Joystick

denna handledning kommer att lära dig om potentiometrar och knappar i samverkan med en arduino. Dessutom lär du dig några kommandon som låter du styra markören på datorn med hjälp av dessa komponenter.Obs: Detta fungerar bara med Arduino Micro och Le...

IoT vägguttag med Arduino och ESP8266

I detta instructable, jag visa dig hur du lägger till förbättrad tillgänglighet, intelligens och anslutning till ett vanligt vägguttag. Detta görs med en kombination av mikrokontroller, Arduino, olika sensorer, ESP8266 och en blandning av programvaru...

Programming ESP8266 ESP-12naE NodeMCU v1.0 med Arduino IDE till trådlös Temperaturlogger

Tillbaka till sena 2014 och tidig 2015, din verkligen kom överdenna fiffiga WiFi-Chip ESP8266 (ESP-01) och har till strid bland de inkonsekventa dokumentationer från olika källor. För närvarande sporre dokumenterade han sin frustration (fynd) som en...

PC mus gjorda med Arduino Uno och Joystick

Hej! Välkommen till min första Instructable.Jag nyligen började mixtra med min nya Arduino Uno och bestämde mig för att hitta ett program för en PS2 joystick modul. Jag trodde det skulle vara tjusig att förvandla min Arduino till en joystick kontroll...

Med en NES-kontrollant för emulatorer med Arduino och bearbetning

Jag har hittat flera sätt att ansluta en NES controller till datorn för användning som en emulator gamepad men verkade ingen vara enkel och förenlig med vad jag hade på hand.Den här bara arbeten med Arduino Leonardo, Micro och vederbörlig: https://gi...