Stap 1: De code
De code bouwt af Arduino documentatie zoals
Knight Rider 2 voor het gebruik van arrays voor pin set-ups
Knop was wat ik keek recht in het begin (noot aan zelf: voor v2 waarschijnlijk een weerstand tussen de GND en de vliegende leads toevoegen moeten...)
Download het bestand physio.pde (of kopieer de code van onderen) en uploaden naar uw Arduino microcontroller op de gebruikelijke wijze.
/*
RepWrap v1
Nikki pugh | April 2011 | www.npugh.co.uk
Vibratie motor gekoppeld aan pin 12
LED aangesloten op pin 13
Herhaling pinnen 2-6
Duur pennen 7-11
*/
variabelen:
int repNumbers [5] = {//array een selectie van herhaling waarden op te slaan
10,12,20,24,30};
int repPins [] {} =
2, 3, 4, 5, 6}; een matrix van pin-codes welke rep knoppen zijn gekoppeld
int repPinCount = 5; het aantal rep opties (dat wil zeggen de lengte van de matrix)
int durationLengths [5] = {//array een selectie van duur/hold waarden op te slaan in seconden
10,12,15,20,30};
int durationPins [] {} =
7, 8, 9, 10, 11}; een matrix van pin-codes tot welke duur de knoppen zijn gekoppeld
int durationPinCount = 5; het aantal duur opties (dat wil zeggen de lengte van de matrix)
flitsen worden gebruikt als een aanwijzing dat de duur van de greep bijna voorbij is
int flashOn = 750; lengte van het aftellen van de tijd knippert laatst voor
int flashOff = 250; lengte van het aftellen van de tijd knippert af voor
int flashRep = 3; aantal flitsers
int flashTime = (flashRep*(flashOn+flashOff));
int overgang = 3000; lengte van de tijd tussen herhalingen, milliseconden
int repState = 0; variabele voor het lezen van de selector-status
int durationState = 0; variabele voor het lezen van de selector-status
int thisRepPin = 0; andere variabelen
int thisDurationPin = 0;
int thisRepNumber = 0;
int thisDurationLength = 0;
int repNumber = 0;
int durationLength = 0;
int repStateFound = 0;
int durationStateFound = 0;
constanten:
Const int buzzPin = 12; het nummer van de pin van de zoemer
Const int LEDPin = 13; het nummer van de LED-pin
VOID Setup {}
Initialiseer pinnen als een uitgangen:
pinMode (LEDPin, uitvoer);
pinMode (buzzPin, OUTPUT);
int thisRepPin;
de arrayelementen zijn genummerd van 0 tot (pinCount - 1).
Gebruik een for-lus om te initialiseren van elke pin als uitgang:
voor (int thisRepPin = 0; thisRepPin < repPinCount; thisRepPin ++) {}
pinMode (repPins [thisRepPin], INPUT); pincode invoeren instellen
digitalWrite (repPins [thisRepPin], hoge); inschakelen van interne pullup resistors
pinMode (repPins [thisRepPin], OUTPUT); set pin aan output
}
int thisDurationPin;
de arrayelementen zijn genummerd van 0 tot (pinCount - 1).
Gebruik een for-lus om te initialiseren van elke pin als uitgang:
voor (int thisDurationPin = 0; thisDurationPin < durationPinCount; thisDurationPin ++) {}
pinMode (durationPins [thisDurationPin], INPUT); pincode invoeren instellen
digitalWrite (durationPins [thisDurationPin], hoge); inschakelen van interne pullup resistors
pinMode (durationPins [thisDurationPin], OUTPUT); set pin aan output
}
Serial.begin(9600); Open de seriële poort op 9600 bps
} //end instellen
void loop {}
Start signaal
for (int i = 0; ik < flashRep; i ++) {}
digitalWrite (LEDPin, laag);
delay(flashOff);
digitalWrite (LEDPin, hoge);
delay(flashOn);
digitalWrite (LEDPin, laag);
}
digitalWrite (buzzPin, hoge);
delay(changeover);
digitalWrite (buzzPin, laag);
Lees de Rep pins, wanneer u vondst men welk is laag, dat is degene die is geselecteerd
thisRepPin = 0;
repStateFound = 0;
while(repStateFound==0) {}
repState=digitalRead(repPins[thisRepPin]);
Als (repState == LOW) {//has is aangesloten op de grond
repStateFound = 1;
Serial.Print(thisRepPin);
Serial.println ("repStateFound = 1');
}
Als (repState == HIGH) {}
repStateFound = 0;
Serial.Print(thisRepPin);
Serial.println ("repStateFound = 0');
thisRepPin ++;
}
}
thisRepNumber = thisRepPin;
Serial.Print ("thisRepNumber:");
repNumber = repNumbers [thisRepNumber];
Serial.println(repNumbers[thisRepNumber]);
Lees de duur pinnen, wanneer u vondst men welk is laag, dat is degene die is geselecteerd
thisDurationPin = 0;
durationStateFound = 0;
while(durationStateFound==0) {}
durationState=digitalRead(durationPins[thisDurationPin]);
Als (durationState == LOW) {}
durationStateFound = 1;
Serial.Print(thisDurationPin);
Serial.println ("durationStateFound = 1');
}
Als (durationState == HIGH) {}
durationStateFound = 0;
Serial.Print(thisDurationPin);
Serial.println ("durationStateFound = 0');
thisDurationPin ++;
}
}
thisDurationLength = thisDurationPin;
Serial.Print ("thisDurationLength:");
durationLength = durationLengths [thisDurationLength];
Serial.println(durationLength);
durationLength = durationLength * 1000;
thisDurationPin = 0;
pinnen uitschakelen om energie te besparen
voor (int thisRepPin = 0; thisRepPin < repPinCount; thisRepPin ++) {}
digitalWrite (repPins [thisRepPin], laag); uitschakelen van alle rep pinnen
}
Serial.println ("rep-pins uitgeschakeld");
voor (int thisDurationPin = 0; thisDurationPin < durationPinCount; thisDurationPin ++) {}
digitalWrite (durationPins [thisRepPin], laag); uitschakelen van alle duur pinnen
}
Serial.println ("duur-pins uitgeschakeld");
nu op naar de oefeningen
voor (int count = 0; graaf < repNumber; count ++) {//repeat deze cyclus zo vaak als er herhalingen zijn
delay(durationLength-flashTime); wachten op de duur lengte minus de tijdsduur voor het countown knippert
for (int i = 0; ik < flashRep; i ++) {//do het aftellen knippert
digitalWrite (LEDPin, laag);
delay(flashOff);
digitalWrite (LEDPin, hoge);
delay(flashOn);
digitalWrite (LEDPin, laag);
dat rep is nu voltooid
}
Serial.println(Count+1); Hoeveel herhalingen hebben wij gedaan?
de motor voor een overgang Buzz
digitalWrite (buzzPin, hoge);
delay(changeover);
digitalWrite (buzzPin, laag);
} //end van verzameling
lange buzz te signaleren het einde van de set
digitalWrite (buzzPin, hoge);
delay(7000);
digitalWrite (buzzPin, laag);
de LED flitser dus het einde van de set - signaal wanneer u dit hebt uitgeschakeld of een andere set start zien
terwijl (waar) {}
digitalWrite (LEDPin, hoge);
delay(500);
digitalWrite (LEDPin, laag);
delay(1000);
}
} //end lus