Stap 4: Activeren van de motoren en het lezen van de shute-sensor
Ten eerste, is ons doel hier één motor telkens wanneer willekeurig activeren en ga naar de volgende motor als de sensor kan niet detecteren. Op zal uitproberen voor 8 keer (twee keer voor elke kolom).
Om dat te doen, moet u eerst één kolom selecteren en gemakkelijk te maken dat we de pin voor elke kolom in een matrix opgeslagen. Om de willekeurige opdracht werken moet u goed om te lezen wat lawaai en genereren van het zaad. Zo krijgen we de analogRead van A0 (die is niet verbonden met om het even wat). Aangezien de lage onze Relais gebruiken om te activeren, stellen we alles in hoge.
int relays[4] { 22, 24, 26, 28 }; void setup() { randomSeed(analogRead(0)); for (int i=0; i<4; i++) { pinMode(relays[i], OUTPUT); digitalWrite(relays[i], HIGH); } }
Nu heb je je Relais instellen en klaar om te worden geactiveerd. Laten we eens kijken hoe een activeren en controleren van de sensor.
Shuffle van de motor en het lezen van de sensor
#define THRESHOULD_SENSOR 100 #define ROLLING_TIME 3000 #define NUMBER_OF_TRIES 8 (...) boolean bateu() { int in = analogRead(A7); Serial.print("an "); Serial.println(in); delay(10); return in >= THRESHOULD_SENSOR; } boolean activateRelays() { int tentativas = 0; boolean released = false; int current_release_millis; int relay_idx = random(0, 3); while (!released && tentativas < NUMBER_OF_TRIES) { tentativas++; digitalWrite(relays[relay_idx], LOW); current_release_millis = millis(); int delay_time = millis() - current_release_millis; while (delay_time <= ROLLING_TIME) { delay_time = millis() - current_relase_millis; if (bateu()) { released = true; break; } } digitalWrite(relays[relay_idx], HIGH); if (relay_idx == 3) { relay_idx = 0; } else { relay_idx++; } } return released; }
Klaar om te gaan! Als u de functie activateRelays() aanroept moet het retourneren als het kan of niet werd vrijgegeven. En proberen dat te doen voor 8 keer.
We zetten een constante THRESHOULD_SENSOR als onze parameter te controleren dat als het kan de onderkant van de machine, raakt als u van een eenvoudige piezo gebruikmaakt, de waarde meer dan 400 moet zijn. Maar onze tests de waarde na 100 werkt prima.
De constante ROLLING_TIME definieert de tijd die de motor moet worden gehouden op, voordat de wijziging van andere ou ophouden de.