PuttDuino putt-putt gat met arduino (11 / 11 stap)

Stap 11: Code Review


ik wil gaan over de arduino code naar misschien show mijn denkproces rond de sensoren en hoe te reageren op hen zo spoedig mogelijk. Ik wilde gebruiken van interrupts gekoppeld aan de sensoren, maar...

Want ik had geen foto-transistors die produceren digitaal signaal in of uit, kon ik niet gebruik van interrupts in de software. Interrupts zou ik wil het uitvoeren van de ruitenwissers voortdurend en op elk gewenst moment was er een bal aan het rollen voorbij een paar van de sensor emitter/detector, sommige actie kan worden ondernomen.

Als ik gebruikte fotodiodes die een analoge produceren in plaats van digitale aan/uit signaal dus moest ik de status van de sensoren waarbij waarden ook worden verzonden naar de servo's uitgevoerd van de ruitenwissers.

Dit is wat ik deed.
De ruitenwissers lopen voortdurend. Ik maakte deze actie een eigen functie
de functie "MoveServo" wordt genoemd en duurt van 3 ingangen.
-welke servo naar (willekeurig gegenereerde)
-Hoe ver moet verplaatsen van de Wisser (willekeurig gegenereerd)
-Hoe lang te onderbreken voordat u terugkeert naar 'thuis' positie
Binnenkant van de functie plaats ik code die de status van de sensoren tussen alles controleert.
De lus van de vertraging is ik denk dat waar het het meest controleert.
Normaal gesproken een vertraging zou één commando: delay();
in mijn geval ik maakte de vertraging opdracht slechts één milliseconde en het aantal milliseconden lus over die ene milliseconde vertraging zodat elke milliseconde ik de arduino vertellen kon en controleert u de status van de sensoren.
Ik denk thats het dichtst bij een interrupt die ik met dit soort van setup komen kon.

Het resultaat is dat de arduino reageert bijna direct wanneer een bal kruist een sensor, dat is wat ik wilde.

Hier is de functie van de MoveServo met enkele opmerkingen toegevoegd

VOID MoveServo (int servoNum, lange pos, int pauze)
{
/ / voordat er iets anders lees ik de sensoren
ReadandReport(); / / Dit roept naar een andere functie die leest de status van de sensoren en schrijft de waarden aan voor foutopsporing seriële
Als (analogRead(impSensorPin) < 90) {StartMotor();} / / dit leest de sensor waaier en springt naar de StartMotor functie als de bal er is
ReadNailPin(); / / dit leest de nailgun pin en springt naar deze functie als de bal er is

Als (servoNum > = 50) / / het nummer van de willekeurige verzonden is tussen 1 en 100
{
wiper1.write(POS); / / de servo #1 Hoe ver vertellen om te verplaatsen
ReadandReport(); / / debug output
Als (analogRead(impSensorPin) < 90) {StartMotor();} / / als hierboven check de waaier sensor
ReadNailPin(); / / check de nagel pistool sensor
} else { / / hier krijgt als de willekeurige wisser keuze was minder dan 50 zo verplaatsen de servo #2 en controleren van de sensoren
wiper2.write(POS);
ReadandReport();
Als (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
}

Dit is de loop die de sensoren elke milliseconde controleert
voor (ik = 0; ik / / deze pauze is te wachten voor de servo te verplaatsen, en ook om te pauzeren aan het einde vóór terugkeer naar "huis"
{
ReadandReport();
Als (analogRead(impSensorPin) < 90) {StartMotor();} / / zelfde als hierboven
ReadNailPin(); / / zelfde als hierboven
vertraging (1); / / Dit is de werkelijke vertraging
}

}

HIERONDER HIER IS DE HELE BRONCODE

#include

int nailPin = 0; Dit is de pin gebruikt voor het activeren van de nagel pistool
int LEDpin = 13; indicator LED geeft aan dat de machine draait
int fogPin = 20; deze pincode activeert de mist machine
int nailSensorPin = 17; Dit is verbonden met de IR-Detector voor de nagel pistool
int impSensorPin = 16; Dit is verbonden met de IR-detector voor de waaier van de bal

lange rndSrvoPos; variabele op te slaan van de servo positie
lange rndPause; willekeurige pauze tijd
lange whichServo; Kies welke servo te verplaatsen

int i = 0; generieke integer-variabele
int nailTriggerValue; waarde gelezen van ir LED trigger voor nailGun
int pos; Servo positie variabele

Servo wiper1; eerste servo wisser-object
Servo wiper2; tweede servo wisser-object
Servo impellerServo; Servo voor Opdringer van de knop van de waaier

VOID Setup
{

randomSeed(analogRead(3)); zaden de random number generator
Serial.begin(9600); Setup seriële
pinMode (LEDpin, uitvoer); instellen van de pin-modi
pinMode(fogPin,OUTPUT);
pinMode(nailPin,OUTPUT);
pinMode(nailSensorPin,INPUT);
pinMode(impSensorPin,INPUT);

wiper1.attach(14); de servo op pin 14 hecht aan het eerste wisser servo-object
wiper2.attach(15); de servo op pin 15 hecht aan het tweede wisser servo-object
impellerServo.attach(12); hechten aan de servo op pin 12 voor de Opdringer van de knop van de waaier

Blink3x(); knipperen 3 keer aan opstarten - soort van een macht op zelftest

}

void loop
{
de servo's een willekeurige vegen oplopen tot 80 graden
onderbreken van een willekeurige tijdsduur tussen 10 en 250 ms
rndSrvoPos = random(0,22);
rndPause = random(250,500);
whichServo = random(100);

ReadandReport();

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

}
VOID StartMotor()
{
Start mist
digitalWrite(fogPin,HIGH);
delay(750);
impellerServo.write(112);
delay(450);
impellerServo.write(90);
digitalWrite(fogPin,LOW);

voor (ik = 0; ik < 2000; i ++) / / deze vertraging is een poging om te voorkomen dat de motor vaak asp uitgevoerd wanneer de bal stuitert uit
{
ReadandReport();
ReadNailPin();
delay(1);
}

ReadandReport();
}

VOID FireNailGun()
{
ReadandReport();
Serial.println ("afvuren cyclus");
delay(250);
digitalWrite(nailPin,HIGH);
delay(10);
digitalWrite(nailPin,LOW);

}

VOID MoveServo (int servoNum, lange pos, int pauze)
{
ReadandReport();
Als (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
Als (servoNum > = 50)
{
wiper1.write(POS);
ReadandReport();
Als (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
} else {}
wiper2.write(POS);
ReadandReport();
Als (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
}

voor (ik = 0; ik {}
ReadandReport();
Als (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
vertraging (1);
}

}

VOID ReadNailPin()
{
Lees pinnen en reageren - net de nagel pin...
Dit is een poging om een handmatige onderbreker
Als (analogRead(nailSensorPin) < 60) {FireNailGun();}
}

VOID Blink3x()
{
Cyclus van de Power On Self Test
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));
}

Gerelateerde Artikelen

LED kubus met Arduino en aangepaste PCB

LED kubus met Arduino en aangepaste PCB

dit instructable details over het ontwerp en bouwproces voor een 5 x 5 x 5 LED-kubus, instelbaar met behulp van een Arduino, die zich op een aangepaste printplaat bevindt.Extra informatie, foto's en video's vindt u op mijn website.Het afgewerkt produ
PHloat2 DIY zuur water testen sculptuur & kit met arduino

PHloat2 DIY zuur water testen sculptuur & kit met arduino

pHloatpHloat is een DIY kit die is gemaakt voor gebruik in combinatie met een pre-owned / reeds bestaande arduino microcontroller. Het doel is het testen van de pH-niveaus in de lokale rivieren, meren en stromen als gevolg van de toestroom van lucht-
Meerdere LED Matrices met Arduino

Meerdere LED Matrices met Arduino

Dit project is gebaseerd op een workshop die we bij Makespace Madrid georganiseerd in het kader van "La noche de la electrónica con Jameco".  In een eerdere instructable we al introduceerde het beheren van een enkele LED-matrix met Arduino. In d
Multiplexing met Arduino en de 74HC595

Multiplexing met Arduino en de 74HC595

de 74HC595 is een makkelijk en goedkoop (op ongeveer 60 cent per stuk) manier om te verhogen van het aantal digitale uitgang pinnen op je Arduino.  In deze tutorial zal ik u tonen hoe te rijden van maximaal 16 LEDs met een 74HC595 met behulp van een
Gemotoriseerd, geluid reageren Star Wars At-St Bandai Model, met Arduino.

Gemotoriseerd, geluid reageren Star Wars At-St Bandai Model, met Arduino.

Gemaakt van Star Wars bij-St-Model van Bandai.Reageert op geluid en draait zijn hoofd naar toe.Gemaakt met Arduino Nano, een aangepast onderdeel van 3dprinted, microfoons, micro servo.Dit instructable is gemaakt om te delen van de wijzigingen die nod
Gebruik uw Adafruit rgb lcd Pi plaat (voor Raspberry Pi) met Arduino

Gebruik uw Adafruit rgb lcd Pi plaat (voor Raspberry Pi) met Arduino

Hallo iedereen.Zoals de titel al zegt leert u hoe u uw Adafruit rgb lcd Pi plaat maar met Arduino. Ik kocht eens een maar nooit gebruikt met mijn Raspberry Pi en ik was op zoek naar een manier om het te gebruiken met mijn Arduino projecten. Met deze
Hoe maak je een LED 7-segment display met Arduino

Hoe maak je een LED 7-segment display met Arduino

Ik ga u tonen hoe te maken van een 7 segment display met LED's. Combineren met Arduino aftelproceduretijdopnemers, eenvoudige tekst, en meer te maken. Ik willen maken van de oorspronkelijke projecten. Ik zocht de hele instructables en als dit niet vi
Weerstand kleur Code Calculator met Arduino

Weerstand kleur Code Calculator met Arduino

Dit is een 4 band mechanische weerstand Calculator van de kleur Code, het idee om die deze mechanische weerstand kwam toen ik per ongeluk mijn doos van weerstanden en alle weerstanden (1300 van hen liet) kreeg vermengd. Ooops!. Thank god er is een AP
Een kartonnen televisor (met arduino en LEDs)

Een kartonnen televisor (met arduino en LEDs)

Onlangs zag ik een documentaire over de geschiedenis van de televisie. En tot mijn verbazing bleek ze dat er bestond een mechanische televisie voordat de bekende CRT-televisies.Deze mechanische televisies of televisors waren mooie slim en eenvoudig.E
PSU-voeding van oude ATX met Arduino en LCD Monitor een proefbank

PSU-voeding van oude ATX met Arduino en LCD Monitor een proefbank

Hallo allemaal en welkom op mijn eerste Instructable.Ik wilde altijd een bankje PSU voor gemakkelijke toegang tot een bron van macht, en iets dat ik kan rekenen op wanneer u werkt aan verschillende projecten. Ik wilde een PSU dat:• biedt 3, 3V, 5v en
Open uw deur met een speciale klop met Arduino, Android telefoon- en 1Sheeld

Open uw deur met een speciale klop met Arduino, Android telefoon- en 1Sheeld

Nu u niet meer, de sleutel gebruiken met dit eenvoudige project die u en ieder lid van uw gezin kunnen openen uw deur zonder sleutel en ook u zal niet elke keer naar de deur te openen, kunt u het openen vanaf elke plek, alles wat je wilt is uw Androi
Uitstappen van de Bank, met Arduino, 3d gedrukte behuizing en geprogrammeerd met Embrio

Uitstappen van de Bank, met Arduino, 3d gedrukte behuizing en geprogrammeerd met Embrio

Het basisidee is om iets dat detecteren kan wanneer mijn honden op de bank krijgen als ik er niet ben en "hen aanmoedigen te uitstappen" te creëren. Dit wordt bereikt met een passieve Ifrared sensor en maken geluiden dat houd niet van de honden.
Een 15-LED RGB klok met Arduino kern

Een 15-LED RGB klok met Arduino kern

De RGB-klok maakt gebruik van het RGB-kleur samenstelling model gebruikt in alle kleur toont. Dit model maakt gebruik van drie 'basic' kleuren, namelijk rood, groen en blauw, om te bouwen van een andere 'composiet' kleur van het spectrum. Met RGB-klo
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