Trådlös Arduino oscilloskop (4 / 5 steg)
Steg 4: Programmera Arduino
För att få korrekt prover, används timer avbrotten på Arduino så här programstruktur kan se lite annorlunda från andra Arduino program du har arbetat med. Detta Instructable har mycket mer information om Arduino timers, om du är intresserad:
Koden kan laddas ner från GitHub (https://github.com/MoreCoffee12/SerialScope/tree/m...), zip-filen bifogas detta steg eller skrivit i underifrån.
Firmware till fånga 2-kanaler för data och skicka ut via BlueTooth.
Detta genomförande syftar till att tillhandahålla data till Windows Phone 8
Ansökan
//
Programvara distribueras under MIT License, se ArduinoFirmware_License.txt
för mer information.
Detta bibliotek innehåller en ramkonstruktion
för data.
#include < minsegbus.h >
MinSegBus mbus;
SoftwareSerial biblioteket används till att ge
data till Bluetooth-modulen.
#include < SoftwareSerial.h >
SoftwareSerial BTSerial(10, 11); RX | TX
#define maxbuffer 0x0400
#define ADCChannels 0x0002
lagring variabler
booleska toggle0 = 0;
Definiera ADC
int analogPinCh1 = 0;
int analogPinCh2 = 1;
bool bOutput;
Buffertar
osignerad kort iUnsignedShortArray [ADCChannels * 2];
unsigned char cBuff [maxbuffer];
MinSegBus vaiiables
unsigned char iAddress;
osignerad korta iUnsignedShort;
unsigned int iBytesReturned;
unsigned int iErrorCount;
unsigned int iIdx;
void setup()
{
Installationsprogrammet för seriell port
Serial.BEGIN(115200);
BTSerial.begin(115200);
Definitioner för MinSegBus
iAddress = 0x000;
Skvallra berättelse pins, används för att bekräfta timing
pinMode (9, OUTPUT);
Få två prover innan du skickar ramen
bOutput = false;
Timer inställning. Börja genom att inaktivera avbrotten
Referens:
CLI();
Timer kontroll register
TCCR0A = 0; Satt hela TCCR0A register till 0
TCCR0B = 0; Samma för TCCR0B
Set jämför match register för 625Hz steg
OCR0A = 99. = (16 * 10 ^ 6) / (500 * 256) - 1 (måste vara < 256)
Aktivera CTC läge
TCCR0A | = (1 << WGM01);
Ange CS01 och CS00 bitar för 256 prescaler
TCCR0B | = (1 << CS02);
Aktivera timern jämföra avbrott
TIMSK0 | = (1 << OCIE0A);
Aktivera avbrott
SEI();
}
Allt arbete sker i timer avbrottstjänstens rutin (ISR)
void loop()
{
hemkomst.
}
Timer0 avbryta 1kHz. Detta också växlar pin 31
som en metod att veriy provtagningsfrekvensen.
ISR(TIMER0_COMPA_vect) {
om (toggle0)
{
digitalWrite(9,HIGH);
toggle0 = 0;
}
annat
{
digitalWrite(9,LOW);
toggle0 = 1;
}
om (bOutput)
{
iUnsignedShortArray [2] = analogRead(analogPinCh1);
iUnsignedShortArray [3] = analogRead(analogPinCh2);
iBytesReturned = 0;
iAddress ++;
mbus. ToByteArray (iAddress, iUnsignedShortArray, ADCChannels * 2, maxbuffer, & cBuff [0], och iBytesReturned);
bOutput = false;
}
annat
{
iUnsignedShortArray [0] = analogRead(analogPinCh1);
iUnsignedShortArray [1] = analogRead(analogPinCh2);
bOutput = sant;
för (iIdx = 0; iIdx < iBytesReturned; iIdx ++)
{
Avkommentera raden att skriva till den seriella porten. Användbara
endast för felsökning
Serial.write(cBuff[iIdx]);
BTSerial.write(cBuff[iIdx]);
}
}
}