Vad betyder [] tecknet i programmet, arduino.
Postat: 29 oktober 2015, 02:00:32
Försöker förstå mig på en arduino-kod som följde med en radiomottagare. Jag kan inte få den där sändaren/mottagaren att fungera som jag önskar. Den fungerar säkert som den ska, men inte som jag vill. Koden först, vad betyder abc[3]
Det finns senare i koden Temporary [0] - [3] och [k], vilket blir 5 olika Temporary[*].
Hela koden .....
Kod: Markera allt
unsigned long Temporary[3]
Hela koden .....
Kod: Markera allt
//Author: cantone-electonics
//More information welcome to : http://www.canton-electronics.com
//Arduino 1.0
//Arduino uno R3
//Making a wireless remote control with arduino
//const int data_out = 2;//encoder DOUT
//LED pin,When receiving the key from the serial port, LED flash
const int ledPin = 13; //LED pin
const int data_out = 7; //encoder DOUT
// OSC Resistance is 3.3M
const int Osc_4xCycle = 359; //4 oscillating time periods
const int Osc_12xCycle = 1078;//12 oscillating time periods
unsigned long Temporary[3];//Temporary storage unit
//output bit "0"
void bit_0() {
digitalWrite(data_out, HIGH);
delayMicroseconds(Osc_4xCycle);//4 oscillating time periods High level
digitalWrite(data_out, LOW);
delayMicroseconds(Osc_12xCycle);//12 oscillating time periods Low level
digitalWrite(data_out, HIGH);
delayMicroseconds(Osc_4xCycle);//4 oscillating time periods High level
digitalWrite(data_out, LOW);
delayMicroseconds(Osc_12xCycle);//12 oscillating time periods Low level
}
//output bit "1"
void bit_1() {
digitalWrite(data_out, HIGH);
delayMicroseconds(Osc_12xCycle);//12 oscillating time periods High level
digitalWrite(data_out, LOW);
delayMicroseconds(Osc_4xCycle);//4 oscillating time periods Low level
digitalWrite(data_out, HIGH);
delayMicroseconds(Osc_12xCycle);//12 oscillating time periods High level
digitalWrite(data_out, LOW);
delayMicroseconds(Osc_4xCycle);//4 oscillating time periods Low level
}
//output bit "f"
void bit_f() {
digitalWrite(data_out, HIGH);
delayMicroseconds(Osc_4xCycle);//4 oscillating time periods High level
digitalWrite(data_out, LOW);
delayMicroseconds(Osc_12xCycle);//12 oscillating time periods Low level
digitalWrite(data_out, HIGH);
delayMicroseconds(Osc_12xCycle);//12 oscillating time periods High level
digitalWrite(data_out, LOW);
delayMicroseconds(Osc_4xCycle);//4 oscillating time periods Low level
}
//output synchronous bit
void bit_syn() {
digitalWrite(data_out, HIGH);
delayMicroseconds(Osc_4xCycle);//4 oscillating time periods High level
digitalWrite(data_out, LOW);
delayMicroseconds(Osc_4xCycle*31);//124 oscillating time periods Low level
}
//send:8 Address Bits, 4 Data Bits, Sync bit
void send_data(){
unsigned char temp,tab,i;
unsigned char j,k;
for(j=0;j<4;j++)
{
for(k=0;k<3;k++)//send 8 Address Bits, 4 Data Bits
{
tab = Temporary[k];
for(i=0;i<4;i++)
{
temp = tab;
temp &= 0xC0;
if(temp == 0xC0)//11 is bit "1"
{
bit_1();
}
else if(temp == 0x00)//00 is bit "0"
{
bit_0();
}
else //01 is bit "f"
{
bit_f();
}
tab = tab << 2;
}
}
bit_syn();//send Sync bit
}
}
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the encoder DOUT pin as an output
pinMode(data_out, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int keydata = 0;
int receive_flag = 0;
Temporary[0] = 0xC5;//address A7-A4
Temporary[1] = 0x55;//address A3-A0
digitalWrite(ledPin, LOW);//Turn off led
while(1)
{
//get key from pc serial port
while (Serial.available() > 0)
{
keydata = Serial.read();
receive_flag = 1;
delay(2);
}
if(receive_flag == 1)//if get key,send key
{
receive_flag = 0;
if((keydata == 'a') || (keydata == 'A'))//trigger A channel relay.
{
Temporary[2] = 0xC0;// 0xC0 is A button key
digitalWrite(ledPin, HIGH);//Turn on led
send_data();//send code word
Serial.println(".....trigger A channel relay.....");
}
else if((keydata == 'b') || (keydata == 'B'))//trigger B channel relay.
{
Temporary[2] = 0x30;// 0x30 is B button key
digitalWrite(ledPin, HIGH);//Turn on led
send_data();//send code word
Serial.println(".....trigger B channel relay.....");
}
else if((keydata == 'c') || (keydata == 'C'))//trigger C channel relay.
{
Temporary[2] = 0x0C;// 0x0C is C button key
digitalWrite(ledPin, HIGH);//Turn on led
send_data();//send code word
Serial.println(".....trigger C channel relay.....");
}
else if((keydata == 'd') || (keydata == 'D'))//trigger D channel relay.
{
Temporary[2] = 0x03;// 0x03 is D button key
digitalWrite(ledPin, HIGH);//Turn on led
send_data();//send code word
Serial.println(".....trigger D channel relay.....");
}
keydata = 0;
//When receiving the key from the serial port, LED flash
digitalWrite(ledPin, LOW);//Turn off led
delay(50);//delay 100ms
digitalWrite(ledPin, HIGH);//Turn on led
delay(50);//delay 100ms
digitalWrite(ledPin, LOW);//Turn off led
delay(50);//delay 100ms
digitalWrite(ledPin, HIGH);//Turn on led
delay(50);//delay 100ms
digitalWrite(ledPin, LOW);//Turn off led
}
}
}