Hello Arduino Community!
I have my arduino set up to transmit Morse code over AM at 1337Khz.
Pin 8 transmits. When a button on digitalpin 2 is on.
I also have it set up to recieve. My Walkman set at AM 1337 Khz is outputting audio to Analog 0.
Both work just fine individually. However, I am unable to read Analog 0 while I am broadcasting on pin 8.
It's as if the microcontroller is executing all of the transmit code before it gets to the recieve code.
I want to transmit and recieve my transmission simultaneously.
Any help or different approaches are welcomed. Thanks!
long millisAtStart=0;
long millisAtEnd=0;
const long period_broadcast=8;
#define LENGTH_DIT 64
const int length_dit=LENGTH_DIT;
const int pause_dit=LENGTH_DIT;
const int length_dah=3*LENGTH_DIT;
const int pause_dah=LENGTH_DIT;
const int length_pause=7*LENGTH_DIT;
void dit(void);
void dah(void);
void pause(void);
void broadcast(int N_cycles);
void dontbroadcast(int N_cycles);
#define ASM_INC(reg) asm volatile ("inc %0" : "=r" (reg) : "0" (reg))
//AudioReading
const int analogInPin = A0;
//QuietButton
const int buttonPin = 2;
int buttonState = 0;
void setup()
{
Serial.begin(9600);
DDRB=0xFF;
millisAtStart=millis();
dit();
millisAtEnd=millis();
pinMode(buttonPin, INPUT);
//Serial.print(millisAtEnd-millisAtStart);
//Serial.print(" ");
//Serial.print((length_dit+pause_dit)*period_broadcast*256/(millisAtEnd-millisAtStart)/2);
//Serial.print("kHz ");
//Serial.println();
}
void loop()
{
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
pattern();
}
Serial.println(analogRead(analogInPin));
delay(100);
}
void pattern() {
dah();
dit();
dah();
dah();
pause();
dah();
dit();
dah();
dah();
pause();
dah();
dah();
dit();
dit();
pause();
pause();
}
void dit(void)
{
for(int i=0;i<length_dit;i++)
{
broadcast(period_broadcast);
}
for(int i=0;i<pause_dit;i++)
{
dontbroadcast(period_broadcast);
}
}
void dah(void)
{
for(int i=0;i<length_dah;i++)
{
broadcast(period_broadcast);
}
for(int i=0;i<pause_dah;i++)
{
dontbroadcast(period_broadcast);
}
}
void pause(void)
{
for(int i=0;i<length_pause;i++)
{
dontbroadcast(period_broadcast);
}
}
void broadcast(int N_cycles)
{
unsigned int portvalue;
for (int i=0;i<N_cycles;i++)
{
portvalue=0;
do
{
PORTB=portvalue;
ASM_INC(portvalue);
}
while(portvalue<255);
}
}
void dontbroadcast(int N_cycles)
{
unsigned int portvalue;
PORTB=0x00;
for (int i=0;i<N_cycles;i++)
{
portvalue=0;
do
{
ASM_INC(portvalue);
asm volatile ("NOP");
}
while(portvalue<255);
}
}