Kruger's Zippo Remote (8 / 15 steg)
Steg 8: Ladda upp koden
Denna kod var svårt att skriva. Jag är inte alltför skickliga i kodning och VirtualWire bibliotek var aldrig riktigt tänkt att köra på ATTinies.
Bifogas detta steg är filer som hör till TX-delen av detta projekt.
Du måste använda en ATTiny85 eftersom det är det minsta chip som har timers för att stödja VirtualWire biblioteket.
Specifikt för TX del, om du råkar ha en ATTiny85V - 10PU, bra! Det innebär att din fjärrkontroll fungerar med lägre effekt.
Om inte, inga bekymmer. Det fungerar fortfarande.
Allt du behöver för TX-sidan kommer att vara i de bifogade filer. Här är grunderna
- Bränna rätt säkringarna på chipet. Du kommer att köra på 8 MHz
- Flytta VirtualWire till Arduino bibliotek broschyren
- Ladda upp koden
- Undersöka den skärbräda/schematiskt så du vet vad du hantering.
Om du behöver information om programmering i ATTinies med Arduino, kolla här .
DETALJER OM KODEN
RF-moduler har utformats för enkel användning med Arduino. Det ursprungliga målet var för dessa RF moduler som osynliga ledningar. I idealfallet kan man bara säga:
void setup()
{
2400 baud för 434 modell
Serial.BEGIN(2400);
}
void loop()
{
skicka ut till sändaren
Serial.println("a");
Delay(1000);
}
Och på RX sida, vilken körs:
int pin = 3;
void setup()
{
2400 baud för 434 modell
Serial.BEGIN(2400);
pinMode (pin, utgång);
}
void loop()
{
int data = Serial.read();
om (data == 97)
{
digitalWrite (pin, hög);
Delay(1000);
digitalWrite (pin, låg);
}
annat {}
}
Vad vi hoppas att hända är att när vi Serial.println("a"), "a" ska tas emot på andra sidan.
Det finns tyvärr en massa oväsen. När jag försökte här koden ut, mottagaren skulle slumpmässigt slå på från några herrelösa signal i luften, eller inte slå på alls eftersom att "en" inte kunde ens överleva till mottagare antenn.
Denna kod fungerar inte. Det måste finnas en metod för att minska bullret genom filtrering. Lyckligtvis gör VirtualWire det åt oss!
Baserat på mina begränsade kunskaper, utnyttjar VirtualWire timers i mikrokontroller till typ av sync två RF moduler. För att detta ska fungera, måste vi använda ATTiny85. Timer0 finns inte på 45.
För The ATTiny85 att köra på 3.7V, måste vi köra mikrokontroller utan en extern crystal.
Så, kommer vi bränner säkringar för 8MHz intern klocka.
Följande kod enkelt sänder tecknet "a" ständigt över RF modulen.
/ * TSJWang 8/19/2014
Sändaren
Använd en ATTiny85 45 fungerar inte med VirtualWire
Säkringar:
-U lfuse:w:0xe2:m
-U hfuse:w:0xd4:m
-U efuse:w:0xff:m
*/
#include < VirtualWire.h > / / biblioteket används för kommunikation med RF länkar
CONST int notifPin = 0; LED är ansluten till detta stift
CONST int TXpin = 1; Denna pin ansluten till RF länk
void setup()
{
pinMode (notifPin, produktionen);
vw_set_ptt_inverted(true); setup grejer
vw_setup(4800); 4800 bps
vw_set_tx_pin(TXpin);
digitalWrite (notifPin, hög); Blinkar LED att visa det arbetar
}
void loop()
{
char * msg = "a"; Skicka "en", ASCII 97.
vw_send ((uint8_t*) msg, 1); Skickar röding
vw_wait_tx(); Vänta tills char skickas
}
DETALJER OM KRETS
TX kretsen är ganska enkel.
- Det finns en 1 k pullup motstånd till Vcc på Återställ PIN-koden [1]
- Ingenting är kopplad till A3 och A2 [2 och 3]
- GND är kopplad till en knapp strömbrytare till batteri-[4]
- Digital 0 [5] är kopplad till en LED. LED leder in en 270 ohm resistor till GND
- Digital 1 [6] är ansluten till DATA på RF modulen
- A1 [7] är inte ansluten till något
- VCC är ansluten till batteriet +
- RF-modul är ansluten till Vcc och GND på lämpligt sätt.
När koden körs, om knappen trycks, kommer att hela banan vara påslagen
LAMPAN ska vända och ATTiny85 kommer att skicka "a" över RF modulen hela tiden.