Kombinera 1 eller fler Arduinos med en RaspberryPi (6 / 6 steg)
Steg 6: Arduino kod
Det här är skissen för Arduino(s).
/*
* drcAduino:
* Arduino kod att genomföra demokratiska republiken Kongo - The Drogon fjärrkontrollen.
* Tillåt en annan enhet talar till oss över den seriella porten att styra IO pinnar.
*
* Copyright (c) 2012 Gordon Henderson
*
* Fullständiga uppgifter på:
http://projects.Drogon.net/Drogon-Remote-Control/...
*
* Kommandon:
* 0x40 Ping Send tillbaka #: 0x23
* 0: 0x30 0xNN iväg Pin NN
* 1: 0x31 0xNN ange Pin NN på
* i: 0x69 0xNN ange Pin NN som indata
* o: 0x6F 0xNN ange Pin NN som utgång
* p: 0x6F 0xNN ange Pin NN som PWM
* v: 0x6F 0xNN ange PWM värde på Pin NN
* r: 0x72 0xNN läsa tillbaka digital Pin NN skicka tillbaka 0: 0x30 eller 1: 0x31
* s: 0x61 0xNN Läs tillbaka analoga pin NN skicka tillbaka binära 2 byte, Hi först.
*
*********************************************************************************
* Denna fil är en del av drcAduino:
* Drogon fjärrkontroll för Arduino
http://projects.Drogon.net/Drogon-Remote-Control/...
*
* drcAduino är fri programvara: du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* Free Software Foundation, antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.
*
* drcAduino distribueras i hopp om att det kommer att vara användbar,
* men utan garantier; utan att ens underförstådd garanti om
* SÄLJBARHET eller lämplighet för ett visst ändamål. Se den
* GNU General Public License för mer detaljer.
*
* Du bör ha fått en kopia av GNU General Public License
* tillsammans med drcAduino. Om inte, se.
*********************************************************************************
*
/ Seriell kommandon
#define CMD_PING "
#define CMD_PIN_0 '0'
#define CMD_PIN_1 '1'
#define CMD_PIN_I "i"
#define CMD_PIN_O ' o '
#define CMD_RD_PIN 'r'
#define CMD_RA_PIN "a"
#define CMD_PWM_PIN "p"
#define CMD_PWM_VAL_PIN "v"
#define CMD_DEBUG_DIGITAL skulle "
#define CMD_DEBUG_ANALOGUE "A"
Arduino med en 168 eller 328 chip
dvs. Arduino Classic, Demi, Uno.
#define MIN_APIN 0
#define MAX_APIN 5
#define MIN_DPIN 2
#define MAX_DPIN 13
Ogiltiga inställningar)
{
int pin;
Serial.BEGIN (115200);
Serial.println ("demokratiska republiken Kongo Arduino 1.0");
pinMode (13, OUTPUT);
digitalWrite 13, hög.
för (pin = 2; pin < 13. ++ pin)
{
digitalWrite (pin, låg);
pinMode (pin, mata);
}
analogReference (standard).
}
int myGetchar)
{
int x;
medan ((x = Serial.read ()) == -1)
;
återvändande x;
}
Ogiltig loop)
{
unsigned int pin;
unsigned int aVal, Mårtens;
för (;)
{
om (Serial.available () > 0)
{
Växla (myGetchar ())
{
fall CMD_PING:
Serial.write (CMD_PING);
fortsätta;
fall CMD_PIN_O:
PIN-kod = Serial.read ();
om ((pin > = MIN_DPIN) & & (pin < = MAX_DPIN))
pinMode (pin, utgång);
fortsätta;
fall CMD_PIN_I:
PIN-kod = myGetchar ();
om ((pin > = MIN_DPIN) & & (pin < = MAX_DPIN))
pinMode (pin, mata);
fortsätta;
fall CMD_PIN_0:
PIN-kod = myGetchar ();
om ((pin > = MIN_DPIN) & & (pin < = MAX_DPIN))
digitalWrite (pin, låg);
fortsätta;
fall CMD_PIN_1:
PIN-kod = myGetchar ();
om ((pin > = MIN_DPIN) & & (pin < = MAX_DPIN))
digitalWrite (pin, hög);
fortsätta;
fall CMD_RD_PIN:
PIN-kod = myGetchar ();
om ((pin > = MIN_DPIN) & & (pin < = MAX_DPIN))
Mårtens = digitalRead (pin);
annat
Mårtens = låg;
Serial.write ((dVal == HIGH)? '1' : '0') ;
fortsätta;
fall CMD_RA_PIN:
PIN-kod = myGetchar ();
om ((pin > = MIN_APIN) & & (pin < = MAX_APIN))
aVal = analogRead (pin);
annat
aVal = 0;
Serial.write ((aVal & 0xFF00) >> 8); Övre byte första
Serial.write (aVal & 0x00FF);
fortsätta;
fall CMD_PWM_PIN:
PIN-kod = myGetchar ();
om ((pin > = MIN_DPIN) & & (pin < = MAX_DPIN))
pinMode (pin, utgång);
fortsätta;
fall CMD_PWM_VAL_PIN:
PIN-kod = myGetchar ();
Mårtens = myGetchar ();
om ((pin > = MIN_DPIN) & & (pin < = MAX_DPIN))
analogWrite (pin, Mårtens);
fortsätta;
}
}
}
}