Stap 3: De katten Firmware
Deze tellingen worden weergegeven op de display. Voor de bewegingen van de arm is er een andere teller zodat meerdere armbewegingen verwerkt worden kunnen onafhankelijk van de werkelijke website-hits. Dat komt omdat de arm zwaait een tijdje na te zijn aangereden door de servo.
De arduino controles het licht zodat bij nacht, de servo niet zal werken maar de RGB LED verandert zijn kleur everytime een hit op de website gebeurt (dit deel gebeurt onverwijld een)
Hier is de code:
/*
Webserver
Webserver luistert naar het web en beweegt een servo
LightSensor controleert het licht zodat de servo niet verplaatsen wanneer het is donker
Een 7 segment display werkt met behulp van schuifregisters te tonen van een teller
*/
#include < SPI.h >
#include < Ethernet.h >
#include < Servo.h >
Voer een MAC-adres en het IP-adres voor uw controller hieronder.
Het IP-adres zal afhankelijk van uw lokale netwerk zijn:
byte mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte ip [] = {192, 168, 178, 188};
voor cijfers:
int latchPin = 2; //muss noch angeschlossen werden
int clockPin = 4;
int dataPin = 3;
int yellowPin = 16;
int redPin = 18;
int bluePin = 17;
int greenPin = 19;
int btnPin = 7;
kleuren
int rood;
int groen;
int blauw;
int geel op;
int ydir; richting van gele vervagen
getal is de matrix voor nummers 192 voor 0, 249 voor 1,... 255 voor niets en 191 voor-
byte cijfers [] = {192, 249, 164, 176, 153, 146, 130, 248, 128, 144, 255, 191, 225, 163, 171, 198, 167, 123};
int dig1;
int dig2;
int getal;
int licht;
lichtsensor:
int lightPin = 1; //light sensor
Initialiseren van de Ethernet server bibliotheek
met het IP-adres en de poort die u wilt gebruiken
(poort 80 is de standaardwaarde voor HTTP):
EthernetServer server(80);
Servo myservo; servo-object om te bepalen van de servo maken
int count = 0;
tijd
unsigned long previousMillis = 0;
unsigned long currentMil = 0;
unsigned long previousMil = 0;
niet-ondertekende lange mil = 0;
Boole timepassed = waar;
VOID Setup
{
myservo.attach(6); hecht de servo op pin 6
de Ethernet-verbinding en de server starten:
Ethernet.begin (mac, ip);
server.begin();
pinMode (latchPin, OUTPUT);
pinMode (clockPin, OUTPUT);
pinMode (dataPin, OUTPUT);
pinMode (yellowPin, OUTPUT);
pinMode (redPin, OUTPUT);
pinMode (greenPin, OUTPUT);
pinMode (bluePin, OUTPUT);
pinMode (btnPin, INPUT); //switch
Serial.begin(9600);
digitalWrite (latchPin, laag);
shiftOut (dataPin, clockPin, MSBFIRST, cijfers [11]); //ones
shiftOut (dataPin, clockPin, MSBFIRST, cijfers [11]); //tens
digitalWrite (latchPin, hoge);
aantal = 0;
rood = 0;
Groen = 0;
blauw = 0;
geel = 250;
ydir = 1;
analogWrite (yellowPin, gele);
analogWrite (redPin, rood);
analogWrite (greenPin, groene);
analogWrite (bluePin, blauw);
myservo.write(0);
Serial.Print ("server is op");
Serial.println(Ethernet.localIP());
}
void loop
{
randomSeed(analogRead(A0)); Geel willekeurige
geel = willekeurige (111, 256);
Yellow = Geel + (1 * ydir); soort vervagen
Als (gele == 255) ydir = -1;
Als (gele 110 ==) ydir = 1;
Serial.println(Yellow);
analogWrite (yellowPin, geel), //Eyes op
luisteren voor clients voor inkomende
EthernetClient client = server.available();
Als (client) {}
een http-verzoek eindigt met een lege regel
Boole currentLineIsBlank = waar;
terwijl (client.connected()) {}
Als (client.available()) {}
char c = client.read();
Als u toegang hebt verkregen tot het einde van de regel (ontvangen een newline
teken) en de regel is leeg, de http-aanvraag is beëindigd,
zodat u kunt een antwoord sturen
Als (c == '\n' & & currentLineIsBlank) {}
verzenden van een standaard http-antwoordheader
client.println ("HTTP/1.1 200 OK");
client.println ("Content-Type: text/html");
client.println();
count = count + 1; //there was een verzoek
number = number + 1; //Counter
SevenSegDis (); //Display
Als (nummer 99 ==) {//so de 100 ontbreekt :(maar wie kan het iets schelen
digitalWrite (yellowPin, hoge); niet nodig meer omdat yellowPin is analogWrite de hele tijd
aantal = 0;
}
breken;
}
Als (c == '\n') {}
je begint een nieuwe regel
currentLineIsBlank = true;
}
anders als (c! = '\r') {}
je hebt gekregen een teken op de huidige regel
currentLineIsBlank = false;
}
}
}
de web browser tijd geven om te ontvangen van de gegevens
delay(1);
de verbinding sluiten:
client.stop();
randomSeed(analogRead(A0));
rood = random(256);
randomSeed(analogRead(A0));
groen = random(256);
randomSeed(analogRead(A0));
blauw = random(256);
Serial.Print ("Servo:");
Serial.println(myservo.Read());
Serial.Print ("Timepassed:");
Serial.println(timepassed);
Serial.Print ("Count:");
Serial.println(Count);
Serial.Print ("aantal:");
Serial.println(Number);
Serial.Print ("Mil:");
Serial.println(Mil);
Serial.Print ("Licht:");
Serial.println(Light);
Serial.Print ("rode:");
Serial.println(Red);
Serial.Print ("groene:");
Serial.println(Green);
Serial.Print ("blauw:");
Serial.println(Blue);
}
lightsens(); het licht wordt gecontroleerd
time(); / / controleert de tijd
Als (licht < 99 & & timepassed == true & & telling > 0) {//so wanneer haar donker de servo niet werkt en
myservo.attach (6), //attaches Servo naar Pin6 opnieuw
Als (myservo.read() == 0) {}
myservo.write(180); arm omhoog
timepassed = false;
Count = aantal -1;
}
else if (myservo.read() == 180) {}
myservo.write (0); //arm neer
timepassed = false;
Count = aantal -1;
}
delay(1000);
myservo.Detach (); //detaches Servo
Zet de lichten van als servo wordt uitgevoerd
analogWrite (redPin, 0);
analogWrite (greenPin, 0);
analogWrite (bluePin, 0);
}
anders als (licht > = 99 & & telling > 0) {//so wanneer haar donker het licht met elke hit op de website verandert
analogWrite (redPin, rood);
analogWrite (greenPin, groene);
analogWrite (bluePin, blauw);
Count = aantal-1;
timepassed = false;
}
Als (digitalRead(btnPin) == HIGH) {//check als knop is ingedrukt
randomSeed(analogRead(A0));
rood = random(256);
randomSeed(analogRead(A0));
groen = random(256);
randomSeed(analogRead(A0));
blauw = random(256);
analogWrite (redPin, rood);
analogWrite (greenPin, groene);
analogWrite (bluePin, blauw);
}
}
---Deel twee: zeven segmenten weergeven
VOID SevenSegDis() {//controls display met twee shift registers
nummer = (aantal, 0, 99) beperken; //number > = 0 en < 99 vanwege bereik weergeven
Als (aantal < 10) {}
Dig1 = 10; ziet u niets
Dig2 = nummer; degenen
digitalWrite (latchPin, laag);
shiftOut (dataPin, clockPin, MSBFIRST, cijfers [dig2]); //ones
shiftOut (dataPin, clockPin, MSBFIRST, cijfers [dig1]); //tens hier
digitalWrite (latchPin, hoge);
}
else {}
Dig1 = nummer/10; / / eerste cijfer tientallen
Dig2 = nummer - dig1 * 10; tweede cijfer degenen
digitalWrite (latchPin, laag);
shiftOut (dataPin, clockPin, MSBFIRST, digit[dig2]);
shiftOut (dataPin, clockPin, MSBFIRST, digit[dig1]);
digitalWrite (latchPin, hoge);
}
}
---Deel drie: de lichtsensor deel
ongeldig lightsens() {}
licht = analogRead(lightPin);
licht / = 10;
}
---Deel vier: de tijd thingy
VOID tijd () {}
currentMil = millis();
Als (currentMil < previousMil) {/ / als millis doorloopt
Mil += 34359738 - previousMil + currentMil;
}
else {/ / als millis heeft niet vliegen
Mil += currentMil - previousMil;
Als (mil > 25000) {//if 20 sec. doorgegeven
timepassed = true, //resets de timepassed op true voor de servo
Mil = mil-25000;
}
previousMil = currentMil;
}
}