Stap 5: Arduino Code - testmachine
Alvorens de motor te integreren, kunnen de LEDs en flex sensoren worden getest:
Er zijn twee wijzen van moeilijkheid voor de Touch-module.
Ten eerste, alle 3 LEDs oplichten en de hond kunnen raken een hefboom die ze kiezen om te leveren een traktatie uit het zeepbakje.
Ten tweede, een enkele LED oplicht en de hond moet de hendel die overeenkomt met het licht aan het leveren van een traktatie uit het zeepbakje raken.
Tweede moeilijkheidsgraad:
Het tweede niveau van moeilijkheid is eigenlijk het makkelijkst te programma en de code is als volgt:
#include < TrueRandom.h > /* Voor LED 's */ int ledPinG = 7; PIN 7 is een groene LED VOID Setup {} } void loop x = TrueRandom.random (1, 4); Ik gebruikte deze bibliotheek van de TrueRandom vond ik online, int sens; } int SensorRead() {} digitalWrite (ledPin, hoge); Hiermee schakelt u een van de LED's boven het niveau dat werd willekeurig gekozen. int sensor; sensor = analogRead(analogPin); Leest de huidige hendel flex sensor waarde en stelt een drempel van 3 terwijl (sensor < initValHigh & & sensor > initValLow) / / zolang de sensor-waarde binnen +/-6 van de aanvankelijke waarde, de analoge pin lezen } delay(del);
HARDWARE:
//
Voor Flex sensoren (niet dat de flex sensor pinnen uitwisselbaar zijn)
Sensor pin = GND
Sensor pin = analoog In, met 10K Ohm weerstand aan + 5V
+ pin = Digital In pin
-pin 470 Ohm weerstand met GND =
int ledPinR = 6; PIN 6 is een rode LED
int ledPinB = 5; PIN 6 is een blauwe LED
int ledPin;
int analogPin;
int del = 1000;
int x;
Serial.begin(9600);
pinMode (ledPinG, OUTPUT); Alle van de LED-pinnen naar uitvoer instellen
pinMode (ledPinR, OUTPUT);
pinMode (ledPinB, OUTPUT);
pinMode (ledPin, OUTPUT);
{
digitalWrite (ledPinG, hoge); Eerste LED-flitser om aan te geven van input klaar
digitalWrite (ledPinR, hoge);
digitalWrite (ledPinB, hoge);
delay(del);
digitalWrite (ledPinG, laag);
digitalWrite (ledPinR, laag);
digitalWrite (ledPinB, laag);
vanwege een bekende fout met Arduino de random-functie wordt niet-random
Serial.println(x);
Sens = SensorRead(); De SensorRead() functie aanroepen
Als (x == 1) / / dit als-elseif stamement links de willekeurig getal (1, 2 of 3) met een hefboom.
{
analogPin = 0; analoge PIN 0 is geactiveerd
ledPin = 7; Deze LED komt overeen met de hendel verbonden met analogPin 0
}
anders als (x == 2)
{
analogPin = 1; Deze LED komt overeen met de hendel verbonden met analogPin 1
ledPin = 6;
}
anders als (x == 3)
{
analogPin = 2; Deze LED komt overeen met de hendel verbonden met analogPin 2
ledPin = 5;
}
int initVal = sensor;
int initValHigh = 6 + sensor;
int initValLow = sensor - 6;
nog steeds worden gelezen. Breken van de while lus betekent dat de juiste hefboom is ingedrukt.
{
sensor = analogRead(analogPin);
Serial.println(sensor);
Serial.println(initVal);
digitalWrite (ledPin, laag); De LED is afgesloten.
}
EINDE VAN CODE
Hier zijn een paar opmerkingen over de code:
--Ik gebruikte de TrueRandom bibliotheek in plaats van de ingebouwde Arduino willekeurige opdracht toe te schrijven aan een bekende bug waarin de ingebouwde willekeurige eigenlijk helemaal niet willekeurig is. De website voor de bibliotheek is zeer duidelijk over hoe uit te voeren.
--U kunt volgen de pin lezingen op de seriële Monitor met deze code. Hier ziet u het constant bijwerken lezingen voor de huidige pin van de sensor. Als uw pincode is fluctuerende meer dan +/-6 van de aanvankelijke waarde zonder geraakt, moet u wellicht de waarde te verhogen. Speel mee om te vinden van de juiste druk, waar het willekeurig niet afgaan, maar ook reageert op de geringste aanraking. Wij willen de hond te krijgen een elk moment dat het gebeurt om uit te voeren tegen de juiste hefboom te behandelen.
Eerste niveau van moeilijkheid:
Het eerste niveau van moeilijkheid werkt zolang een van de drie hefbomen is ingedrukt. U kunt dit bereiken door taping alle drie hefbomen samen en gebruik de volgende code (die in principe triplicates de tweede niveau code hierboven). De TrueRandom functie is niet langer nodig.
Ik heb ook toegevoegd in de functionaliteit van de MOTOR aan het einde van de code, zodat de motor draait gedurende 1 seconde, genoeg voor één dosis van traktaties om verlost te worden.
/* HARDWARE: Voor LED 's */ int ledPinG = 7; PIN 7 is een groene LED VOID Setup {}
//
Voor Flex sensoren (niet dat de flex sensor pinnen uitwisselbaar zijn)
Sensor pin = GND
Sensor pin = analoog In, met 10K Ohm weerstand aan + 5V
+ pin = Digital In pin
-pin 470 Ohm weerstand met GND =
int ledPinR = 6; PIN 6 is een rode LED
int ledPinB = 5; PIN 5 is een blauwe LED
int analogPin0;
int analogPin1;
int analogPin2;
int del = 1000;
int PWM_B = 11; Deze twee pinnen zijn al gereserveerd op het schild van de arduMoto
int DIR_B = 13;
Serial.begin(9600);
pinMode (ledPinG, OUTPUT); Alle van de LED-pinnen naar uitvoer instellen
pinMode (ledPinR, OUTPUT);
pinMode (ledPinB, OUTPUT);
pinMode (PWM_B, uitvoer); Besturingselement instellen pinnen te worden uitgangen
pinMode (DIR_B, uitvoer);
}
void loop
{
digitalWrite (ledPinG, hoge); Eerste LED-flitser om aan te geven van input klaar
digitalWrite (ledPinR, hoge);
digitalWrite (ledPinB, hoge);
delay(del);
digitalWrite (ledPinG, laag);
digitalWrite (ledPinR, laag);
digitalWrite (ledPinB, laag);
int sens;
Sens = SensorRead(); De SensorRead() functie aanroepen
}
int SensorRead() {}
digitalWrite (ledPinG, hoge);
digitalWrite (ledPinR, hoge);
digitalWrite (ledPinB, hoge);
int sensor1;
int sensor2;
int sensor3;
sensor1 = analogRead(analogPin0);
sensor2 = analogRead(analogPin1);
sensor3 = analogRead(analogPin2);
int initVal1 = sensor1;
int initVal2 = sensor2;
int initVal3 = sensor3;
int initValHigh1 = 6 + sensor1;
int initValHigh2 = 6 + sensor2;
int initValHigh3 = 6 + sensor3;
int initValLow1 = sensor1 - 6;
int initValLow2 = sensor2 - 6;
int initValLow3 = sensor3 - 6;
terwijl (sensor1 < initValHigh1 & & sensor1 > initValLow1)
{
sensor1 = analogRead(analogPin0);
sensor2 = analogRead(analogPin1);
sensor3 = analogRead(analogPin2);
Serial.println(sensor1);
Serial.println(initVal1);
}
digitalWrite (ledPinG, laag);
delay(100);
digitalWrite (ledPinR, laag);
delay(100);
digitalWrite (ledPinB, laag);
delay(100);
digitalWrite (ledPinB, hoge);
delay(100);
digitalWrite (ledPinR, hoge);
digitalWrite (ledPinB, laag);
delay(100);
digitalWrite (ledPinG, hoge);
digitalWrite (ledPinR, laag);
delay(100);
digitalWrite (ledPinG, laag);
delay(100);
digitalWrite (DIR_B, hoge); Kan zijn gebruikte omgekeerde motor richting, 1 - hoog, 2 - laag
analogWrite (PWM_B, 255); instellen van de motor te draaien op 255/255 = taakcyclus van 100% om te verkrijgen van de vereiste koppel.
delay(1000);
analogWrite(PWM_B,0); draaien van de motor
delay(1000);
}
EINDE CODE