Stap 4: CODE discussie
In deze sectie worden de verschillende variabelen en constanten die we gaan gebruiken. Houd er rekening mee dat ik byte const in plaats van int. gebruikt heb De reden is, is dat micro-controllers hebben zeer beperkte opslagruimte. Int waarden kunnen maximaal 28 bytes, waar als een byte waarde een getal tussen 1 en 255 kunt opslaan en uitsluitend neemt opwaarts... 1 byte. Ik gebruikte de int tag voor touchThreshold want mij watertje getting waarden groter dan 255 geretourneerd.Const byte wordt gebruikt, omdat het vertelt de compiler optimizer opslag gebruik.
Const byte LEDPin = 11; PWM-uitgang pins voor LED
Const byte capSensePin = 2; PIN te hechten aan de capacitieve sensor
byte modus = 0; Hiermee bepaalt u de helderheid van de LED. 0 is uitgeschakeld. Varieert tussen 0 en 255.
int touchThreshold = 100; Minimale aanraakgevoelige waarde om te starten volgende modus
byte targetBrightness = 0; Instellen power op helderheid
byte currentBrightness = 0;
Void setup loopt eenmaal, en het toewijzen van pinModes enz. Ik begin de seriële monitor hier omdat ik het om problemen te schieten gebruikte.
VOID Setup {}
Serial.begin(9600);
pinMode (LEDPin, uitvoer); LEDPin ingesteld op uitvoermodus
}
void loop {}
Dit is het hoofdprogramma loop. Het houdt op herhalen en de verschillende coderegels doorlopen.
Als (readCapacitivePin(capSensePin) > touchThreshold) {//If de waarde voor capSensePin groter is dan touchThreshold doe dan...
delay(250);
Knop ontdendering. Hoe zou ik het verwijderen van deze pauze met behulp van millis()??
modus ++; Als de aanraking drempel wordt overschreden, Verhoog de waarde van modus met 1
Dit volgende deel schetst de verschillende helderheidsniveaus van LED. Twee == in een rij vertelt de processor om twee waarden te vergelijken.
Als (modus > 3) modus = 0; Als de waarde voor mode > 3 vervolgens waarde van modus ingesteld op 0.
Als (modus == 0) targetBrightness = 0;
Als (modus 1 ==) targetBrightness = 255;
Als (modus 2 ==) targetBrightness = 128;
Als (modus 3 ==) targetBrightness = 64;
Serial.Print ("de huidige modus is..."); Seriële monitor bebug modus verhoogt
Serial.println(mode); afdrukken van de waarde van modus naar seial monitor
}
Vervagen gedeelte
Als (targetBrightness > currentBrightness) currentBrightness ++; Als het doel helderheid minder dan de huidige helderheid, vervolgens + 1 tot //current helderheid is
Als (targetBrightness < currentBrightness) currentBrightness--;
analogWrite (LEDPin, currentBrightness); PWM output naar LEDPin. Hiermee wijzigt u de helderheid van het licht
delay(3);
Serial.println(currentBrightness);
DIT PUNT VERDER IK HEB NIET SCHRIJVEN. Het was de iincluded in het voorbeeld uit de arduino.
Elke 500 ms, afdrukken de waarde van de capacitieve sensor
Als ((millis() % 500) == 0) {}
Serial.Print ("capacitieve Sensor op Pin 2 leest:");
Serial.println(readCapacitivePin(capSensePin));
}
}
readCapacitivePin
Ingang: Arduino pin-nummer
Uitgang: Een nummer, van 0 tot de uiting van de 17
hoeveel capaciteit is op de pin
Wanneer u contact met de pin, of wat je hebt
gekoppeld aan het, krijgt het nummer hogere
Om dit nu, aan het werk
De pincode moet een 1 + Megaohm weerstand trekken
het t/m + 5v.
uint8_t readCapacitivePin (int pinToMeasure) {}
Dit is hoe u een variabele declareren die
de poort, PIN en DDR registers zal houden
op een AVR
vluchtige uint8_t * haven;
vluchtige uint8_t * ddr;
vluchtige uint8_t * pin;
Hier vertalen wij de invoer pin-nummer van
Arduino pin nummer AVR poort, PIN, DDR,
en welke bits van deze registers die we schelen.
byte bitmasker;
Als ((pinToMeasure > = 0) & & (pinToMeasure < = 7)) {}
poort = & PORTD;
DDR = & DDRD;
bitmasker = 1 << pinToMeasure;
PIN = & PIND;
}
Als ((pinToMeasure > 7) & & (pinToMeasure < = 13)) {}
poort = & PORTB;
DDR = & DDRB;
bitmasker = 1 << (pinToMeasure - 8);
PIN = & PINB;
}
Als ((pinToMeasure > 13) & & (pinToMeasure < = 19)) {}
poort = & PORTC;
DDR = & DDRC;
bitmasker = 1 << (pinToMeasure - 13);
PIN = & PINC;
}
Kwijting van de pin eerst door het lage- en output
* poort & = ~ (bitmasker);
* ddr | = bitmasker;
delay(1);
Maak de pin een ingang zonder de interne pull-up op
* ddr & = ~ (bitmasker);
Nu zien hoe lang de pin te krijgen trok
int cycli = 16000;
for (int i = 0; ik < cycli; i ++) {}
Als (* pin & bitmasker) {}
cycli = i;
breken;
}
}
Kwijting van de pin opnieuw door het lage- en output
Het is belangrijk om te laten de pinnen laag als u wilt
mogelijk te raken meer dan 1 sensor tegelijk - als
de sensor wordt overgelaten getrokken hoog, wanneer je aanraken
twee sensoren, je lichaam zal de overdracht van de kosten tussen
sensoren.
* poort & = ~ (bitmasker);
* ddr | = bitmasker;
retourneren van cycli;
}