Det här var faktiskt mitt första vettiga program på Arduino som jag gjorde på stenåldern, 2010. Det består egentligen av två program, dels ett litet program som bara behöver köras en enda gång. Det nollställer de fyra första positionerna i EEPROM-minnet för att kunna lagra reläernas status där. På den tiden hade man inget WiFi eller Ethernet till sin Arduino så man styr reläna via serieporten.
Här är det första lilla programmet.
// Detta lilla program nollställer de fyra första minnes-
// positionerna för att kunna lagra inställningarna i.
#define ON LOW
#define OFF HIGH
#include
void setup()
{
word i;
for (i = 0; i < 4; i++) {
EEPROM.write(i, 1);
}
}
void loop()
{}
Det andra programmet är det egentliga relästyrningsprogrammet. Ladda hem dem genom att klicka på knappen nedan.
/*
Relästyrning v1.0 (C)2010 Göran Gustafsson
Min första Arduino-sketch. Tar emot kommandon via
serieporten och sätter utgångar beroende på dem.
För att toggla en utgång så anges först en asterisk
och sedan nummer på utgången. Exempel:
a1 slår på utgång 1
o3 slår av utgång 3
a14 eller *a1*a4 slår på utgång 1 och 4
Det finns också några specialfunktioner:
a slå på utgångar
o slå av utgångar
s sparar utgångarnas status i eeprom.
Detta läses in vid uppstart som
defaultvärde på utgångarna.
r Läser in default från eeprom.
*/
#define ON LOW
#define OFF HIGH
#include
int out[4];
byte i;
byte temp;
byte tmp2;
byte settings[4];
void setup()
{
Serial.begin(9600); // Slå igång seriekommunikationen.
for (i = 0; i < 4; i++) { // Sätt pinnarna till utgångar
out[i] = i + 2;
pinMode(out[i], OUTPUT);
}
setDefault(); // Läs in defaultvärden från eeprom
}
/*
** Läs in default från EEPROM och sätt utgångarna därefter.
*/
void setDefault()
{
for (i = 0; i < 4; i++) {
digitalWrite(out[i], EEPROM.read(i));
}
}
void loop()
{
delay(25);
if (Serial.available() > 0)
{
temp = Serial.read(); // Läs en byte
if (temp == '*') // Våran qualifier?
{
while (Serial.available() > 0)
{
temp = Serial.read();
/*
** Spara nuvarande som förvalt.
*/
if (temp == 's') {
for (i = 0; i < 4; i++) {
EEPROM.write(i, digitalRead(out[i]));
}
continue;
}
/*
** Läs tillbaka förvalt till utgångarna
*/
if (temp == 'r') {
setDefault();
continue;
}
/*
** Slå på en utgång.
*/
if (temp == 'a') {
while (Serial.available() > 0) {
temp = Serial.read();
if (temp >= '1' && temp <= '4') {
digitalWrite(out[temp - '1'], ON);
delay(5);
}
}
continue;
}
/*
** Slå av en utgång.
*/
if (temp == 'o') {
while (Serial.available() > 0) {
temp = Serial.read();
if (temp >= '1' && temp <= '4') {
digitalWrite(out[temp - '1'], OFF);
delay(5);
}
}
continue;
}
} // while
} //if
} // if
} // loop