Hur man bygger en Internet kontrollerad Mars Rover (2 / 4 steg)
Steg 2: Web sidan av saker
Ekorre för imp (anpassad från en online-källa som jag kan inte längre hitta...):
================================================
Server.show("");
fjärrkontroll för rover
ledState < - 0;
funktion blink()
{
Ändra tillstånd
ledState = ledState? 0:1;
Server.log ("ledState val:" + ledState);
Återspegla tillstånd till stift
Hardware.pin9.write(ledState);
}
ingående klass för LED Kontrollkanal
klass inputHTTP utökar InputPort
{
namn = "power control"
typ = "nummer"
funktion set(httpVal)
{
Server.log ("fick val:" + httpVal);
IF(httpVal == 1) {
Hardware.pin9.write(1);
IMP.Sleep(0.1);
Hardware.pin9.write(0);
}
annat if(httpVal == 2) {
Hardware.pin8.write(1);
IMP.Sleep(0.1);
Hardware.pin8.write(0);
}
annat if(httpVal == 3) {
Hardware.PIN2.write(1);
IMP.Sleep(0.1);
Hardware.PIN2.write(0);
}
annat if(httpVal == 4) {
Hardware.PIN1.write(1);
IMP.Sleep(0.1);
Hardware.PIN1.write(0);
}
annat {
;
}
}
}
funktion watchdog() {
IMP.wakeup(60,watchdog);
Server.log(httpVal);
}
Starta watchdog skriva var 60 sekunder
watchdog();
Konfigurera pins som en öppen drain utgång med inre dra upp
Hardware.pin9.configure(DIGITAL_OUT_OD_PULLUP);
Hardware.pin8.configure(DIGITAL_OUT_OD_PULLUP);
Hardware.PIN2.configure(DIGITAL_OUT_OD_PULLUP);
Hardware.PIN1.configure(DIGITAL_OUT_OD_PULLUP);
Registrera med servern
IMP.configure ("Reomote kontroll för Rover", [inputHTTP()], []);
================================================
Arduino kod (Tack Chris Martin!) …
================================================
/*
AnalogReadSerial
Läser en analog ingång på stift 0, skriver ut resultatet till seriell bildskärmen.
Bifoga mittstiftet av en potentiometer pin A0, utanför pins till + 5V och jord.
Denna exempelkod är offentlig.
*/
int pinf = 2;
int pinl = 12.
int pinr = 10;
int pinb = 9.
#define LmotorA 3 / / vänster motor H bridge, ingång A
#define LmotorB 11 / / vänster motor H bridge, ingång B
#define RmotorA 5 / / rätt motor H bridge, ingång A
#define RmotorB 6 / / höger motor H bridge, ingång B
#define v 255
#include < Servo.h >
Servo myservo;
int ledde = 12.
int pos = 0;
Rutinen installationsprogrammet körs en gång när du trycker på reset:
void setup() {
myservo.attach(9);
pinMode ledde (, OUTPUT);
pinMode(pinf,INPUT); initiera seriell kommunikation på 9600 bitar per sekund:
pinMode(pinl,INPUT);
pinMode(pinr,INPUT);
pinMode(pinb,INPUT);
Serial.BEGIN(9600);
digitalWrite(pinf,LOW);
digitalWrite(pinl,LOW);
digitalWrite(pinr,LOW);
digitalWrite(pinb,LOW);
288000
Detta är annorlunda på serial monitorn inte säker på om det är uppåt eller nedåt
Serial.BEGIN(14400);
}
int lls = 0;
int rls = 0;
int al = 0;
loop rutinen körs för evigt om och om igen:
void loop() {
Läs input på analoga stift 0:
int sensorValue1 = digitalRead(pinf);
int sensorValue2 = digitalRead(pinl);
int sensorValue3 = digitalRead(pinr);
int sensorValue4 = digitalRead(pinb);
skriva ut värdet du läsa:
Serial.Print(sensorValue1);
Serial.Print(":");
Serial.Print(sensorValue2);
Serial.Print(":");
Serial.Print(sensorValue3);
Serial.Print(":");
Serial.println(sensorValue4);
Delay(25); dröjsmål i mellan läser för stabilitet
om (sensorValue1 == 1) {
analogWrite(RmotorA,0);
analogWrite(RmotorB,120);
analogWrite(LmotorA,0);
analogWrite(LmotorB,120);
fördröjning (500).
analogWrite(RmotorA,0);
analogWrite(RmotorB,0);
analogWrite(LmotorA,0);
analogWrite(LmotorB,0);
myservo.write(10);
fördröjning (500).
}
annat {
analogWrite(RmotorA,0);
analogWrite(RmotorB,0);
analogWrite(LmotorA,0);
analogWrite(LmotorB,0);
}
om (sensorValue2 == 1) {
digitalWrite (ledde, högt);
analogWrite(RmotorA,0);
analogWrite(RmotorB,250);
analogWrite(LmotorA,250);
analogWrite(LmotorB,0);
fördröjning (100);
analogWrite(RmotorA,0);
analogWrite(RmotorB,0);
analogWrite(LmotorA,0);
analogWrite(LmotorB,0);
myservo.write(10);
fördröjning (500).
}
annat
{
analogWrite(RmotorA,0);
analogWrite(RmotorB,0);
analogWrite(LmotorA,0);
analogWrite(LmotorB,0);
}
om (sensorValue4 == 1) {
digitalWrite (ledde, högt);
analogWrite(RmotorA,250);
analogWrite(RmotorB,0);
analogWrite(LmotorA,0);
analogWrite(LmotorB,250);
fördröjning (100);
analogWrite(RmotorA,0);
analogWrite(RmotorB,0);
analogWrite(LmotorA,0);
analogWrite(LmotorB,0);
myservo.write(10);
fördröjning (500).
}
annat
{
analogWrite(RmotorA,0);
analogWrite(RmotorB,0);
analogWrite(LmotorA,0);
analogWrite(LmotorB,0);
}
om (sensorValue3 == 1) {
digitalWrite (ledde, högt);
analogWrite(RmotorA,120);
analogWrite(RmotorB,0);
analogWrite(LmotorA,120);
analogWrite(LmotorB,0);
fördröjning (500).
analogWrite(RmotorA,0);
analogWrite(RmotorB,0);
analogWrite(LmotorA,0);
analogWrite(LmotorB,0);
myservo.write(10);
fördröjning (500).
}
annat
{
analogWrite(RmotorA,0);
analogWrite(RmotorB,0);
analogWrite(LmotorA,0);
analogWrite(LmotorB,0);
}
}
================================================
Nu för användargränssnittet. Packa upp mappen bifogade; all kod som behövs borde vara där. Allt du behöver göra är att klistra in i din unika elektriska Imp API i filen index.html i lämpligt utrymme. Jag har märkt detta i filen.