Děkuji, ale myslím že jsem se špatně vyjádřil... Takhle vypadá kód, který jsem zatím splácal jako přijímač:
Kód: Vybrat vše
//Include the required libraries
#include <qbcan.h>
#include <Wire.h>
#include <SPI.h>
int redPin= 7;
int greenPin = 6;
int bluePin = 5;
int bzucak = 4;
//Radio Parameters
#define NODEID 1 //unique for each node on same network
#define NETWORKID 100 //the same on all nodes that talk to each other
#define ENCRYPTKEY "sampleEncryptKey" //exactly the same 16 characters/bytes on all nodes!
#define FREQUENCY RF69_433MHZ
//Radio object
RFM69 radio;
bool promiscuousMode = false; //set to 'true' to sniff all packets on the same network
//bool promiscuousMode = true;
void setup()
{
//Initialize serial connection for debugging
Serial.begin(9600);
Serial.println("REBOOT");
//Delay to give time to the radio to power up (is it really needed?)
delay(1000);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
//Initialize radio
radio.initialize(FREQUENCY,NODEID,NETWORKID);
radio.setHighPower(); //To use the high power capabilities of the RFM69HW
radio.encrypt(ENCRYPTKEY);
radio.setFrequency(433102000); // nastavení kmitočtu 433.102 MHz
Serial.println("Transmitting at 433.102 MHz");
delay(1000);
// nastavení propojovacího pinu jako výstupního
pinMode(bzucak, OUTPUT);
// vzhledem k tomu, že náš bzučák je
// aktivní v nule, tedy LOW, je nutné
// ho po dohrání nastavit na vysokou
// úroveň, aby jsme zamezili bzučení
// v pauzách
digitalWrite(bzucak, HIGH);
}
byte ackCount=0;
uint32_t packetCount = 0;
void loop()
{
if (radio.receiveDone())
{
Serial.print( radio.SENDERID );
Serial.print("#[");
Serial.print(++packetCount);
Serial.print(']');
Serial.print('[');Serial.print(radio.SENDERID, DEC);Serial.print("] ");
if (promiscuousMode)
{
Serial.print("to [");Serial.print(radio.TARGETID, DEC);Serial.print("] ");
}
for (byte i = 0; i < radio.DATALEN; i++)
Serial.print((char)radio.DATA[i]);
Serial.print(" [RX_RSSI:");Serial.print(radio.RSSI);Serial.print("]");
if (radio.ACKRequested())
{
byte theNodeID = radio.SENDERID;
radio.sendACK();
Serial.print(" - ACK sent.");
// When a node requests an ACK, respond to the ACK
// and also send a packet requesting an ACK (every 3rd one only)
// This way both TX/RX NODE functions are tested on 1 end at the GATEWAY
if (ackCount++%3==0)
{
Serial.print(" Pinging node ");
Serial.print(theNodeID);
Serial.print(" - ACK...");
delay(3); //need this when sending right after reception .. ?
if (radio.sendWithRetry(theNodeID, "ACK TEST", 8, 0)) // 0 = only 1 attempt, no retries
Serial.print("ok!");
else Serial.print("nothing");
}
}
Serial.println();
}
/*setColor(255, 0, 0); // Red Color
delay(1000);
setColor(0, 255, 0); // Green Color
delay(1000);
setColor(0, 0, 255); // Blue Color
delay(1000);
setColor(255, 255, 255); // White Color
delay(1000);
setColor(170, 0, 255); // Purple Color
delay(1000);*/
if((Ippm>1000) && (Ippm <2000)){
setColor(255, 0, 0);
delay(100);
setColor(0, 0, 0);
delay(100);
}
else{
setColor(0, 255, 0);
delay(100);
setColor(0, 0, 0);
delay(100);
}
// v nekonečné smyčce for, která proběhne
// pro hodnoty i 1 až 10, se vždy zavolá
// funkce zahraj, která zahraje zvuk o
// nastavené frekvenci a délce zadané ve tvaru
// zahraj(frekvence, doba), kde frekvence
// je v Hertzech a doba v milisekundách
for (int i=1; i < 11; i++) {
// frekvence se rovná i-násobku 100,
// zde tedy bude v rozsahu 100 až 1000 Hz,
// doba hraní je pak 50 milisekund
zahraj(100*i, 50);
// po každé frekvenci následuje pauza 250 ms
// pro rozeznání frekvencí
delay(250);
}
// pauza 2 vteřiny pro rozeznání konce smyčky
delay(2000);
}
void setColor(int redValue, int greenValue, int blueValue) {
analogWrite(redPin, redValue);
analogWrite(greenPin, greenValue);
analogWrite(bluePin, blueValue);
}
void zahraj(int frekvence, int doba) {
// funkce tone má na prvním místě pin
// s připojeným bzučákem, na druhém
// frekvenci hraného zvuku a na třetím
// dobu hraní zvuku v milisekundách;
// maximální frekvence je 65535 Hz,
// pro člověka neslyšitelná frekvence
tone(bzucak, frekvence, doba);
delay(doba);
digitalWrite(bzucak, HIGH);
}
A takhle vypadá vysílač:
Kód: Vybrat vše
//Include the required libraries
#include <qbcan.h>
#include <Wire.h>
#include <SPI.h>
#include "MQ135.h"
//Pressure sensor object
BMP180 bmp;
//Radio Parameters
//#define NODEID 2 //unique for each node on same network
#define NODEID 2
#define NETWORKID 100 //the same on all nodes that talk to each other
#define GATEWAYID 1 //Receiving node
#define ENCRYPTKEY "sampleEncryptKey" //exactly the same 16 characters/bytes on all nodes!
#define pinA A0
#define pinD 7
MQ135 senzorMQ = MQ135(pinA);
//Radio object
char payload[50];
RFM69 radio;
void setup()
{
//Initialize serial connection for debugging
Serial.begin(9600);
Serial.println("REBOOT");
// Initialize pressure sensor.
if (bmp.begin())
Serial.println("BMP180 init success");
else
{
//In case of error let user know of the problem
Serial.println("BMP180 init fail (disconnected?)\n\n");
while(1); // Pause forever.
}
attachInterrupt(digitalPinToInterrupt(pinD), prerus, RISING);
//Initialize radio
radio.initialize(FREQUENCY,NODEID,NETWORKID);
radio.setHighPower(); //To use the high power capabilities of the RFM69HW
radio.encrypt(ENCRYPTKEY);
radio.setFrequency(433102000); // nastavení kmitočtu 433.102 MHz
Serial.println("Transmitting at 433.102 MHz");
delay(1000);
}
void loop()
{
double T,P;
// Get a new pressure reading:
bmp.getData(T,P);
float ppm = senzorMQ.getPPM();
// načtení času od spuštění Arduina v sekundách
long cas = millis()/1000;
// vytištění naměřené koncentrace
Serial.print("Koncentrace plynů: ");
Serial.print(ppm);
Serial.print(" ppm | cas od spusteni Arduina: ");
Serial.print(cas/60); // výpočet minut - dělení 60
Serial.print("m");
Serial.print(cas%60); // výpočet vteřin - zbytek po dělení 60
Serial.println("s.");
// pauza před dalším měřením
delay(3000);
//Display data
Serial.print("Absolute pressure: ");
Serial.print(P,2);
Serial.println(" mb.");
Serial.print("Temperature: ");
Serial.print(T,2);
Serial.println(" deg C.");
//Send Data
sprintf(payload,"T: %d C, P: %d mb., ppm: %d ",(int)T,(int)P,(int)ppm);
Serial.println(payload);
radio.send(GATEWAYID, payload, 30);
Serial.println("Send complete");
delay(500);
}
void prerus() {
// vypiš varovnou hlášku, pokud je aktivován digitální vstup
Serial.println("Detekovano prekroceni hranice!");
}
Jak mám udělat, abych si mohl to ppm načíst jako proměnou v přijímači? Děkuji moc za ochotu, zkoušel jsem to hledat, ale marně a mám pocit, že už jsem spíše jenom zmatený