Stap 8: De code uploaden
Deze code was moeilijk om te schrijven. Ik ben niet ook bedreven in codering en VirtualWire bibliotheek was nooit echt bedoeld om te worden uitgevoerd op ATTinies.
Gekoppeld aan deze stap zijn bestanden met betrekking tot het TX-gedeelte van dit project.
Want het is de kleinste chip die de timers heeft ter ondersteuning van de VirtualWire-bibliotheek, moet u een ATTiny85 gebruiken.
Speciaal voor de TX gedeelte, als je toevallig een ATTiny85V - 10PU, goed! Dat betekent dat uw afstandsbediening met lager vermogen werkt.
Zo niet, geen zorgen. Het zal nog steeds werken.
Alles wat die u nodig hebt voor de TX kant zal worden in de bestanden gekoppeld. Hier zijn de basics
- Branden de juiste zekeringen op de chip. U zal worden uitgevoerd op 8 MHz
- Verplaatsen van VirtualWire naar de omslag van de bibliotheken van de Arduino
- Uploaden van de code
- Onderzoeken het breadboard/schema, zodat u weet wat u aan het verwerken bent.
Als u informatie over het programmeren van ATTinies met Arduino nodig, Controleer Dit .
DETAILS OVER DE CODE
De RF-Modules zijn ontworpen voor gemakkelijk gebruik met Arduino. Het oorspronkelijke doel was voor deze RF modules om te fungeren als onzichtbare draden. Ideaal, je kan alleen maar zeggen:
void setup() { //2400 baud for the 434 model Serial.begin(2400); } void loop() { //send out to transmitter Serial.println("a"); delay(1000); }
En aan de kant van de RX, waarin wordt uitgevoerd:
int pin = 3; void setup() { //2400 baud for the 434 model Serial.begin(2400); pinMode(pin, OUTPUT); } void loop() { int data = Serial.read(); if (data == 97) { digitalWrite(pin, HIGH); delay(1000); digitalWrite(pin, LOW); } else{} }
Wat we hopen te gebeuren is dat wanneer we Serial.println("a"), de "a" zal worden ontvangen aan de andere kant.
Helaas, er is veel lawaai. Toen ik probeerde deze code uit, de ontvanger zou willekeurig overschakelen op van enkele verdwaalde signaal in de lucht, of Schakel niet helemaal omdat dat "a" niet zelfs op de antenne van de ontvanger overleven kan.
Deze code werkt niet. Er moet een methode om het lawaai te beperken door te filteren. Gelukkig doet VirtualWire dat voor ons!
Gebaseerd op mijn beperkte kennis, profiteert VirtualWire van de timers in de microcontroller aan soort sync twee RF modules. Om dit te laten werken, moeten we de ATTiny85 gebruiken. Timer0 bestaat niet op de 45.
Om de ATTiny85 op 3, 7V wordt uitgevoerd, moet we uitvoeren van de microcontroller zonder een externe kristal.
Dus, zullen we de zekeringen voor de interne klok van 8MHz verbranden.
De volgende code stuurt gewoon het teken "a" voortdurend over de RF-module.
/*TSJWang 8/19/2014 Transmitter Use an ATTiny85 45 will not work with VirtualWire Fuses: -U lfuse:w:0xe2:m -U hfuse:w:0xd4:m -U efuse:w:0xff:m */ #include <VirtualWire.h> // Library used for communication with RF links const int notifPin = 0; // LED connected to this pin const int TXpin = 1; // This pin connected to RF link void setup() { pinMode(notifPin, OUTPUT); vw_set_ptt_inverted(true); // setup stuff vw_setup(4800); // 4800 bps vw_set_tx_pin(TXpin); digitalWrite(notifPin, HIGH); // Blink LED to show it's working } void loop() { char *msg = "a"; // Send "a", ASCII 97. vw_send((uint8_t*)msg, 1); // Sends the char vw_wait_tx(); // Wait until the char is sent }
DETAILS OVER CIRCUIT
De TX-circuit is vrij eenvoudig.
- Er is een 1 k pullup weerstand aan de Vcc op de resetpin [1]
- Niets is aangesloten op de A3 en A2 [2 en 3]
- GND is aangesloten op een switch van de knop batterij-[4]
- Digitale 0 [5] is gekoppeld aan een LED. De LED leidt naar een 270 ohm weerstand met GND
- Digitale 1 [6] is gekoppeld aan gegevens op de RF-Module
- A1 [7] is niet verbonden met om het even wat
- VCC is aangesloten op de accu +
- De RF-module is op de juiste wijze aangesloten op Vcc en GND.
Wanneer de code wordt uitgevoerd, als de knop is ingedrukt, zal het hele circuit worden ingeschakeld
De LED moet inschakelen en de ATTiny85 zal het verzenden "a" over de RF module voortdurend.