Arduino powered Lucky katt som fysiska Webcounter (3 / 3 steg)
Steg 3: Katter Firmware
Dessa räknas visas på displayen. För förflyttningar av armen finns en annan counter så att flera armrörelser kan behandlas oberoende av de faktiska webbplats-hitsna. Det beror på att armen svänger en stund efter att träffas av servo.
Arduino kontroller ljuset så att på natten, servo brukar fungera men RGB LED kommer att ändra sin färg varje gång en hit på webbplatsen händer (denna del händer utan en fördröjning)
Här är koden:
/*
Webbserver
Webserver lyssnar på webben och flyttar en servo
LightSensor kontrollerar ljuset så att servo inte flytta när det är mörkt
En sju segment display fungerar med hjälp av shiftregisters att visa en räknare
*/
#include < SPI.h >
#include < Ethernet.h >
#include < Servo.h >
Ange en MAC-adress och IP-adressen för din controller nedan.
IP-adressen kommer att bero på ditt lokala nätverk:
byte [mac] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte ip [] = {192, 168, 178, 188};
siffror:
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.
färger
int röda;
int grönt;
int blå;
int gult;
int ydir; riktning mot gula vissna
siffran är matrisen för nummer 192 för 0, 249 för 1,... 255 för ingenting och 191 för-
byte [siffra] = {192, 249, 164, 176, 153, 146, 130, 248, 128, 144, 255, 191, 225, 163, 171, 198, 167, 123};
int dig1;
int dig2;
int antal;
int ljus;
ljussensor:
int lightPin = 1; //light sensor
Starta servern Ethernet-biblioteket
med IP-adress och port vill du använda
(port 80 är standard för HTTP):
EthernetServer server(80);
Servo myservo; skapa objekt för att styra servo servo
int count = 0;
tid
osignerade långa previousMillis = 0;
osignerade långa currentMil = 0;
osignerade långa previousMil = 0;
osignerade långa mil = 0;
booleska timepassed = sant;
void setup()
{
myservo.attach(6); fäster servo på stift 6
Starta Ethernet-anslutningen och servern:
Ethernet.BEGIN (mac, ip);
Server.BEGIN();
pinMode (latchPin, produktionen);
pinMode (clockPin, produktionen);
pinMode (dataPin, produktionen);
pinMode (yellowPin, produktionen);
pinMode (redPin, produktionen);
pinMode (greenPin, produktionen);
pinMode (bluePin, produktionen);
pinMode (btnPin, ingång); //switch
Serial.BEGIN(9600);
digitalWrite (latchPin, låg);
shiftOut (dataPin, clockPin, MSBFIRST, siffran [11]), //ones
shiftOut (dataPin, clockPin, MSBFIRST, siffran [11]), //tens
digitalWrite (latchPin, hög);
antal = 0;
röd = 0;
grön = 0;
blå = 0;
gul = 250;
ydir = 1;
analogWrite (yellowPin, gul);
analogWrite (redPin, röd);
analogWrite (greenPin, grön);
analogWrite (bluePin, blå);
myservo.write(0);
Serial.Print ("servern är på");
Serial.println(Ethernet.localIP());
}
void loop()
{
randomSeed(analogRead(A0)); Gul slumpmässiga
gul = random (111, 256);
Gul = Gul + (1 * ydir); typ av fade
om (gula == 255) ydir = -1;
om (gula == 110) ydir = 1;
Serial.println(Yellow);
analogWrite (yellowPin, gul), //Eyes på
lyssna efter inkommande klienter
EthernetClient klient = server.available();
om (klient) {
en http-förfrågan avslutas med en tom rad
booleska currentLineIsBlank = sant;
samtidigt (client.connected()) {
om (client.available()) {
char c = client.read();
Om du har fått till slutet av raden (fick en newline
karaktär) och raden är tom, http-begäran har avslutats,
så du kan skicka ett svar
om (c == '\n' & & currentLineIsBlank) {
Skicka ett standard http-svarshuvud
client.println ("HTTP/1.1 200 OK");
client.println ("Content-Type: text/html");
client.println();
antal = antal + 1; //there var en begäran
antal = antal + 1; //Counter
SevenSegDis (); //Display
om (antal == 99) {//so 100 saknas :(men vem bryr sig
digitalWrite (yellowPin, hög); behövs inte längre eftersom yellowPin är analogWrite hela tiden
antal = 0;
}
bryta;
}
om (c == "\n") {
du börjar en ny rad
currentLineIsBlank = sant;
}
annars om (c! = '\r') {
du har fått ett tecken på den aktuella raden
currentLineIsBlank = false;
}
}
}
de web webbläsare möjlighet att ta emot data
Delay(1);
stänga anslutningen:
client.stop();
randomSeed(analogRead(A0));
röd = random(256);
randomSeed(analogRead(A0));
grön = random(256);
randomSeed(analogRead(A0));
blå = random(256);
Serial.Print ("Servo:");
Serial.println(myservo.Read());
Serial.Print ("Timepassed:");
Serial.println(timepassed);
Serial.Print ("Count:");
Serial.println(Count);
Serial.Print ("nummer:");
Serial.println(Number);
Serial.Print ("Mil:");
Serial.println(mil);
Serial.Print ("Licht:");
Serial.println(Light);
Serial.Print ("röda:");
Serial.println(Red);
Serial.Print ("gröna:");
Serial.println(Green);
Serial.Print ("blå:");
Serial.println(Blue);
}
lightsens(); kontrollerar ljuset
Time(); / / kontrollerar tiden
om (ljus < 99 & & timepassed == true & & count > 0) {//so när dess mörka servo inte fungerar och
myservo.attach (6), //attaches Servo till Pin6 igen
om (myservo.read() == 0) {
myservo.write(180); arm upp
timepassed = false;
antal = antal -1;
}
annat if (myservo.read() == 180) {
myservo.write (0), //arm ner
timepassed = false;
antal = antal -1;
}
Delay(1000);
myservo.detach (); //detaches Servo
vänder lampor av om servo körs
analogWrite (redPin, 0);
analogWrite (greenPin, 0);
analogWrite (bluePin, 0);
}
annars om (ljus > = 99 & & count > 0) {//so när dess mörka ljuset ändras med varje träff på webbplatsen
analogWrite (redPin, röd);
analogWrite (greenPin, grön);
analogWrite (bluePin, blå);
antal = antal-1;
timepassed = false;
}
om (digitalRead(btnPin) == hög) {//check om knapp trycks
randomSeed(analogRead(A0));
röd = random(256);
randomSeed(analogRead(A0));
grön = random(256);
randomSeed(analogRead(A0));
blå = random(256);
analogWrite (redPin, röd);
analogWrite (greenPin, grön);
analogWrite (bluePin, blå);
}
}
---Del två: sju segment Display
void SevenSegDis() {//controls display med två SKIFT register
antal = begränsa (nummer, 0, 99); //number > = 0 och < 99 på grund av Visa spektrum
om (antal < 10) {
dig1 = 10; visar ingenting
dig2 = nummer; sådana
digitalWrite (latchPin, låg);
shiftOut (dataPin, clockPin, MSBFIRST, siffran [dig2]), //ones
shiftOut (dataPin, clockPin, MSBFIRST, siffran [dig1]); //tens här ingenting
digitalWrite (latchPin, hög);
}
annat {
dig1 = antal/10; / / första siffran tio
dig2 = antal - dig1 * 10; andra siffran som
digitalWrite (latchPin, låg);
shiftOut (dataPin, clockPin, MSBFIRST, digit[dig2]);
shiftOut (dataPin, clockPin, MSBFIRST, digit[dig1]);
digitalWrite (latchPin, hög);
}
}
---Del tre: den ljussensor delen
void lightsens() {
ljus = analogRead(lightPin);
ljus / = 10;
}
---Del fyra: tiden grejen
{Ogiltig tid)
currentMil = millis();
om (currentMil < previousMil) {/ / om millis svämmar över
mil += 34359738 - previousMil + currentMil;
}
annat {/ / om millis inte har territorier överflygas
mil += currentMil - previousMil;
om (mil > 25000) {//if 20 SEK gått
timepassed = true; //resets timepassed till true för servo
mil = mil-25000;
}
previousMil = currentMil;
}
}