Sändare

Sändare Artikelnummer 3654. är monterad på testare 4353.
Testaren är inte till salu.
TX sändaren med artikelnummer 3654 i testas.
Rader i koden med "Extern trigger" kan tas bort om inte extern trigger används.
Trigger är för att trigga ett Oscilloscope. Se Oscilloscope under Projekts
Test modul 4353 är inte till salu, den används för att testa TX/RX moduler.
main.cpp
#include <Arduino.h>
#define TX_PIN 4
#define BUTT_1 5 // Knapp 1
#define BUTT_2 6 // Knapp 2
#define BUTT_3 7 // Knapp 3
#define BUTT_4 8 // Knapp 4
#define ADDRESS_20_BITS 0x54321 // 20-bit adress
#define T 300 // // EV1527 timing i mikrosekunder
#define REPEAT 4 // sänd varje frame x gånger
#define CONTINUOUS_SEND 0 // Sätt till 1 för att kontinuerligt sända
#define CONTINUOUS_SEND_DELAY 10 // Fördröjning mellan upprepade sändningar
#define BUTT_1_CODE B0001
#define BUTT_2_CODE B0010
#define BUTT_3_CODE B0100
#define BUTT_4_CODE B1000
#define VERSION "4353EmuleraEV1527 V1.0" //
// Växla debug-utskrifter vid körning genom att ändra denna variabel
// Sätt till 1 för att aktivera debug-utskrifter, 0 för att inaktivera
// Obs: Debug-utskrifter kan avsevärt sakta ner tajmingen i signalöverföringen,
// så det rekommenderas att inaktivera dem (sätt till 0) för korrekt signalgenerering i produktionsbruk.
#define debugEnabled 0
// 20-bit adress
const uint32_t ADDRESS = ADDRESS_20_BITS;
bool lastButt1State = HIGH;
bool lastButt2State = HIGH;
bool lastButt3State = HIGH;
bool lastButt4State = HIGH;
void sendSync(){
digitalWrite(TX_PIN, HIGH);
delayMicroseconds(T);
digitalWrite(TX_PIN, LOW);
delayMicroseconds(31 * T);
}
void sendBit0(){
if(debugEnabled) {
Serial.print("0");
}
digitalWrite(TX_PIN, HIGH);
delayMicroseconds(T);
digitalWrite(TX_PIN, LOW);
delayMicroseconds(3 * T);
}
void sendBit1(){
if(debugEnabled) {
Serial.print("1");
}
digitalWrite(TX_PIN, HIGH);
delayMicroseconds(3 * T);
digitalWrite(TX_PIN, LOW);
delayMicroseconds(T);
}
void sendFrame(uint32_t address, uint8_t data){
if(debugEnabled) {
Serial.print("Sending sync.");
}
digitalWrite(A0, HIGH); // Extern trigger före varje synk
sendSync();
// 20 adressbitar MSB först
if(debugEnabled) {
Serial.println("");
Serial.print("Send ID: ");
}
digitalWrite(A1, HIGH); // Extern trigger före adressbitar
for (int i = 19; i >= 0; i--)
{
if (address & (1UL << i))
sendBit1();
else
sendBit0();
}
// 4 databitar MSB först
if(debugEnabled) {
Serial.println("");
Serial.print("Send datakey: ");
}
digitalWrite(A1, HIGH); // Extern trigger före datanycklar
for (int i = 3; i >= 0; i--)
{
if (data & (1 << i))
sendBit1();
else
sendBit0();
}
digitalWrite(TX_PIN, LOW);
}
void sendFrameRepeat(uint32_t address, uint8_t data){
for (int i = 0; i < REPEAT; i++) {
sendFrame(address, data);
}
}
// Se till att inga externa trigger-pins är aktiva
// Extern trigger
void clearExternalTrigger() {
// Rensa eventuell väntande extern trigger genom att skriva låg nivå på pinnarna
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
digitalWrite(A4, LOW);
digitalWrite(A5, LOW);
digitalWrite(A6, LOW);
digitalWrite(A7, LOW);
}
void setup()
{
pinMode(TX_PIN, OUTPUT);
digitalWrite(TX_PIN, LOW);
Serial.begin(115200);
Serial.println(VERSION);
pinMode(BUTT_1, INPUT_PULLUP);
lastButt1State = digitalRead(BUTT_1);
pinMode(BUTT_2, INPUT_PULLUP);
lastButt2State = digitalRead(BUTT_2);
pinMode(BUTT_3, INPUT_PULLUP);
lastButt3State = digitalRead(BUTT_3);
pinMode(BUTT_4, INPUT_PULLUP);
lastButt4State = digitalRead(BUTT_4);
pinMode(A0, OUTPUT); // Extern trigger
pinMode(A1, OUTPUT); // Extern trigger
pinMode(A2, OUTPUT); // Extern trigger
pinMode(A3, OUTPUT); // Extern trigger
pinMode(A4, OUTPUT); // Extern trigger
pinMode(A5, OUTPUT); // Extern trigger
pinMode(A6, OUTPUT); // Extern trigger
pinMode(A7, OUTPUT); // Extern trigger
clearExternalTrigger(); // Se till att inga externa trigger-pins är aktiva
}
void loop(){
bool Butt1State = digitalRead(BUTT_1);
if (Butt1State == LOW) {
if (CONTINUOUS_SEND) {
sendFrameRepeat(ADDRESS, BUTT_1_CODE);
delay(CONTINUOUS_SEND_DELAY); // Fördröjning mellan upprepade sändningar för att inte överbelasta mottagaren
}else{
if (lastButt1State == HIGH) {
Serial.println("Button 1 triggered");
sendFrameRepeat(ADDRESS, BUTT_1_CODE);
delay(100);
}
}
}
lastButt1State = Butt1State;
bool Butt2State = digitalRead(BUTT_2);
if (Butt2State == LOW) {
if (CONTINUOUS_SEND) {
sendFrameRepeat(ADDRESS, BUTT_2_CODE);
delay(CONTINUOUS_SEND_DELAY); // Fördröjning mellan upprepade sändningar för att inte överbelasta mottagaren
}else{
if (lastButt2State == HIGH) {
Serial.println("Button 2 triggered");
sendFrameRepeat(ADDRESS, BUTT_2_CODE);
delay(100);
}
}
}
lastButt2State = Butt2State;
bool Butt3State = digitalRead(BUTT_3);
if (Butt3State == LOW) {
if (CONTINUOUS_SEND) {
sendFrameRepeat(ADDRESS, BUTT_3_CODE);
delay(CONTINUOUS_SEND_DELAY); // Fördröjning mellan upprepade sändningar för att inte överbelasta mottagaren
}else{
if (lastButt3State == HIGH) {
Serial.println("Button 3 triggered");
sendFrameRepeat(ADDRESS, BUTT_3_CODE);
delay(100);
}
}
}
lastButt3State = Butt3State;
bool Butt4State = digitalRead(BUTT_4);
if (Butt4State == LOW) {
if (CONTINUOUS_SEND) {
sendFrameRepeat(ADDRESS, BUTT_4_CODE);
delay(CONTINUOUS_SEND_DELAY); // Fördröjning mellan upprepade sändningar för att inte överbelasta mottagaren
}else{
if (lastButt4State == HIGH) {
Serial.println("Button 4 triggered");
sendFrameRepeat(ADDRESS, BUTT_4_CODE);
delay(100);
}
}
}
lastButt4State = Butt4State;
}
Denna sida är skapad med hjälp av AI.
En sida för dig som bygger elektronik själv, experimenterar och laborerar.
Skapad av Per-Anders Hult för PchButik.se.

