电平编码通信,即38通信,io口电平变化判定7种状态。
底下有最后版本。
这个程序有错误:
Openmv:
from pyb import Pin
import time
value=[0,0,0]
p_in_0 = Pin('P0', Pin.IN, Pin.PULL_UP)#设置p_in为输入引脚,并开启上拉电阻
p_in_1 = Pin('P1', Pin.IN, Pin.PULL_UP)#设置p_in为输入引脚,并开启上拉电阻
p_in_2 = Pin('P2', Pin.IN, Pin.PULL_UP)#设置p_in为输入引脚,并开启上拉电阻
value[0] = p_in_0.value() # get value, 0 or 1#读入p_in引脚的值
value[1] = p_in_1.value() # get value, 0 or 1#读入p_in引脚的值
value[2] = p_in_2.value() # get value, 0 or 1#读入p_in引脚的值
while(True):
print('value=',value)##000为arduino输出高电平
time.sleep(2000)
这个程序有错误:
arduino:
#define code_a 2
#define code_b 3
#define code_c 4
void setup() {
// put your setup code here, to run once:
pinMode(code_a,OUTPUT);
pinMode(code_b,OUTPUT);
pinMode(code_c,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
analogWrite(code_a,HIGH);
analogWrite(code_b,HIGH);
analogWrite(code_c,HIGH);
}
这个没用,switch写实现不了
#define code_a 2
#define code_b 3
#define code_c 4
int a=2;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(code_a,OUTPUT);
pinMode(code_b,OUTPUT);
pinMode(code_c,OUTPUT);
}
void loop() {
a=1;
switch(a){
case 0:
digitalWrite(code_a,HIGH);
digitalWrite(code_b,HIGH);
digitalWrite(code_c,HIGH);
case 1:
digitalWrite(code_a,LOW);
digitalWrite(code_b,HIGH);
digitalWrite(code_c,HIGH);
case 2:
digitalWrite(code_a,HIGH);
digitalWrite(code_b,LOW);
digitalWrite(code_c,HIGH);
case 3:
digitalWrite(code_a,LOW);
digitalWrite(code_b,LOW);
digitalWrite(code_c,HIGH);
case 4:
digitalWrite(code_a,HIGH);
digitalWrite(code_b,HIGH);
digitalWrite(code_c,LOW);
case 5:
digitalWrite(code_a,LOW);
digitalWrite(code_b,HIGH);
digitalWrite(code_c,LOW);
case 6:
digitalWrite(code_a,LOW);
digitalWrite(code_b,LOW);
digitalWrite(code_c,HIGH);
case 7:
digitalWrite(code_a,LOW);
digitalWrite(code_b,LOW);
digitalWrite(code_c,LOW);
}
delay(10);
}
python:
from pyb import Pin
import time
v=[0,0,0]
num=[0,0,0,0,0,0,0,0]
count=200
p_in_0 = Pin('P7', Pin.IN, Pin.PULL_DOWN)#设置p_in为输入引脚,并开启上拉电阻
p_in_1 = Pin('P8', Pin.IN, Pin.PULL_DOWN)#设置p_in为输入引脚,并开启上拉电阻
p_in_2 = Pin('P9', Pin.IN, Pin.PULL_DOWN)#设置p_in为输入引脚,并开启上拉电阻
#p_in = Pin('P7', Pin.IN, Pin.PULL_UP)#设置p_in为输入引脚,并开启上拉电阻
def getCode():
while(True):
pass
v[0] = p_in_0.value() # get value, 0 or 1#读入p_in引脚的值
v[1] = p_in_1.value() # get value, 0 or 1#读入p_in引脚的值
v[2] = p_in_2.value() # get value, 0 or 1#读入p_in引脚的值
if v[0]==0 and v[1]==0 and v[2]==0:
num[0]+=1
if num[0]>count:
print('value=',0)##000为arduino输出高电平
num[0]=0
#return(0)
break
elif v[0]==0 and v[1]==0 and v[2]==1:
num[1]+=1
if num[1]>count:
print('value=',1)##000为arduino输出高电平
num[1]=0
return(1)
break
elif v[0]==0 and v[1]==1 and v[2]==0:
#print('value=',2)##000为arduino输出高电平
num[2]+=1
if num[2]>count:
print('value=',2)##000为arduino输出高电平
num[2]=0
return(2)
break
elif v[0]==0 and v[1]==1 and v[2]==1:
#print('value=',3)##000为arduino输出高电平
num[3]+=1
if num[3]>count:
print('value=',3)##000为arduino输出高电平
num[3]=0
return(3)
break
elif v[0]==1 and v[1]==0 and v[2]==0:
#print('value=',4)##000为arduino输出高电平
num[4]+=1
if num[4]>count:
print('value=',4)##000为arduino输出高电平
num[4]=0
return(4)
break
elif v[0]==1 and v[1]==0 and v[2]==1:
#print('value=',5)##000为arduino输出高电平
num[5]+=1
if num[5]>count:
print('value=',5)##000为arduino输出高电平
num[5]=0
return(5)
break
elif v[0]==1 and v[1]==1 and v[2]==0:
#print('value=',6)##000为arduino输出高电平
num[6]+=1
if num[6]>count:
print('value=',6)##000为arduino输出高电平
num[6]=0
return(6)
break
elif v[0]==1 and v[1]==1 and v[2]==1:
#print('value=',7)##000为arduino输出高电平
num[7]+=1
if num[7]>count:
print('value=',7)##000为arduino输出高电平
num[7]=0
return(7)
break
pass
while(True):
while(True):
pass
code=getCode()
if code!=None:
print('got the code, code is',code)
break
else:
print('NO code')
time.sleep(1000)
while(True):
pass
#print('have code')
Arduino:
#define code_a 2
#define code_b 3
#define code_c 4
int count=2;
int a=0;
int i=0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(code_a,OUTPUT);
pinMode(code_b,OUTPUT);
pinMode(code_c,OUTPUT);
}
void sentCode(int b) {
if (b==7){
digitalWrite(code_a,HIGH);
digitalWrite(code_b,HIGH);
digitalWrite(code_c,HIGH); }
else if (b==6){
digitalWrite(code_a,LOW);
digitalWrite(code_b,HIGH);
digitalWrite(code_c,HIGH); }
else if (b==5){
digitalWrite(code_a,HIGH);
digitalWrite(code_b,LOW);
digitalWrite(code_c,HIGH);}
else if (b==4){
digitalWrite(code_a,LOW);
digitalWrite(code_b,LOW);
digitalWrite(code_c,HIGH); }
else if (b==3){
digitalWrite(code_a,HIGH);
digitalWrite(code_b,HIGH);
digitalWrite(code_c,LOW); }
else if (b==2){
digitalWrite(code_a,LOW);
digitalWrite(code_b,HIGH);
digitalWrite(code_c,LOW); }
else if (b==1){
digitalWrite(code_a,HIGH);
digitalWrite(code_b,LOW);
digitalWrite(code_c,LOW);}
else if (b==0){
digitalWrite(code_a,LOW);
digitalWrite(code_b,LOW);
digitalWrite(code_c,LOW); }
delay(2000);
}
void loop(){
sentCode(2);
while(1){;}
while(0){
if(a>7){a=0;}
Serial.print("a=");
Serial.println(a);
sentCode(a);
a=a+1;
}
}
openmv:
from pyb import Pin
import time
v=[0,0,0]
num=[0,0,0,0,0,0,0,0]
count=200
def getCode():
pass
p_in_0 = Pin('P7', Pin.IN, Pin.PULL_DOWN)#设置p_in为输入引脚,并开启上拉电阻
p_in_1 = Pin('P8', Pin.IN, Pin.PULL_DOWN)#设置p_in为输入引脚,并开启上拉电阻
p_in_2 = Pin('P9', Pin.IN, Pin.PULL_DOWN)#设置p_in为输入引脚,并开启上拉电阻
while(True):
pass
v[0] = p_in_0.value() # get value, 0 or 1#读入p_in引脚的值
v[1] = p_in_1.value() # get value, 0 or 1#读入p_in引脚的值
v[2] = p_in_2.value() # get value, 0 or 1#读入p_in引脚的值
if v[0]==0 and v[1]==0 and v[2]==0:
num[0]+=1
if num[0]>count:
print('value=',0)##000为arduino输出高电平
num[0]=0
#return(0)
break
elif v[0]==0 and v[1]==0 and v[2]==1:
num[1]+=1
if num[1]>count:
print('value=',1)##000为arduino输出高电平
num[1]=0
return(1)
break
elif v[0]==0 and v[1]==1 and v[2]==0:
#print('value=',2)##000为arduino输出高电平
num[2]+=1
if num[2]>count:
print('value=',2)##000为arduino输出高电平
num[2]=0
return(2)
break
elif v[0]==0 and v[1]==1 and v[2]==1:
#print('value=',3)##000为arduino输出高电平
num[3]+=1
if num[3]>count:
print('value=',3)##000为arduino输出高电平
num[3]=0
return(3)
break
elif v[0]==1 and v[1]==0 and v[2]==0:
#print('value=',4)##000为arduino输出高电平
num[4]+=1
if num[4]>count:
print('value=',4)##000为arduino输出高电平
num[4]=0
return(4)
break
elif v[0]==1 and v[1]==0 and v[2]==1:
#print('value=',5)##000为arduino输出高电平
num[5]+=1
if num[5]>count:
print('value=',5)##000为arduino输出高电平
num[5]=0
return(5)
break
elif v[0]==1 and v[1]==1 and v[2]==0:
#print('value=',6)##000为arduino输出高电平
num[6]+=1
if num[6]>count:
print('value=',6)##000为arduino输出高电平
num[6]=0
return(6)
break
elif v[0]==1 and v[1]==1 and v[2]==1:
#print('value=',7)##000为arduino输出高电平
num[7]+=1
if num[7]>count:
print('value=',7)##000为arduino输出高电平
num[7]=0
return(7)
break
pass
def sendCode(c):
pass
out0 = Pin('P7', Pin.OUT_PP)#设置p_out为输出引脚
out1 = Pin('P8', Pin.OUT_PP)#设置p_out为输出引脚
out2 = Pin('P9', Pin.OUT_PP)#设置p_out为输出引脚
while(True):
pass
if c==0:
out0.low()#设置p_out引脚为低
out1.low()
out2.low()
print('sent 0')
elif c==1:
out0.high()#设置p_out引脚为低
out1.low()
out2.low()
print('sent 1')
elif c==2:
out0.low()#设置p_out引脚为低
out1.high()
out2.low()
print('sent 2')
elif c==3:
out0.high()#设置p_out引脚为低
out1.high()
out2.low()
print('sent 3')
elif c==4:
out0.low()#设置p_out引脚为低
out1.low()
out2.high()
print('sent 4')
elif c==5:
out0.high()#设置p_out引脚为低
out1.low()
out2.high()
print('sent 5')
elif c==6:
out0.low()#设置p_out引脚为低
out1.high()
out2.high()
print('sent 6')
elif c==7:
out0.high()#设置p_out引脚为低
out1.high()
out2.high()
print('sent 7')
time.sleep(2000)
break
while(1):
sendCode(2)
while(0):
print('had sent')
while(0):
while(True):
pass
code=getCode()
if code!=None:
print('got the code, code is',code)
break
else:
print('NO code')
time.sleep(1000)
while(True):
pass
#print('have code')
arduino:
#define code_a 2
#define code_b 3
#define code_c 4
int count=200;
int a=0;
int i=0;
int v[3]={0,0,0};
int num[8]={0,0,0,0,0,0,0,0};
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(code_a,INPUT);
pinMode(code_b,INPUT);
pinMode(code_c,INPUT);
}
void sentCode(int b) {
pinMode(code_a,OUTPUT);
pinMode(code_b,OUTPUT);
pinMode(code_c,OUTPUT);
if (b==7){
digitalWrite(code_a,HIGH);
digitalWrite(code_b,HIGH);
digitalWrite(code_c,HIGH); }
else if (b==6){
digitalWrite(code_a,LOW);
digitalWrite(code_b,HIGH);
digitalWrite(code_c,HIGH); }
else if (b==5){
digitalWrite(code_a,HIGH);
digitalWrite(code_b,LOW);
digitalWrite(code_c,HIGH);}
else if (b==4){
digitalWrite(code_a,LOW);
digitalWrite(code_b,LOW);
digitalWrite(code_c,HIGH); }
else if (b==3){
digitalWrite(code_a,HIGH);
digitalWrite(code_b,HIGH);
digitalWrite(code_c,LOW); }
else if (b==2){
digitalWrite(code_a,LOW);
digitalWrite(code_b,HIGH);
digitalWrite(code_c,LOW); }
else if (b==1){
digitalWrite(code_a,HIGH);
digitalWrite(code_b,LOW);
digitalWrite(code_c,LOW);}
else if (b==0){
digitalWrite(code_a,LOW);
digitalWrite(code_b,LOW);
digitalWrite(code_c,LOW); }
delay(2000);
}
int getCode(){
v[0]=digitalRead(code_a);
v[1]=digitalRead(code_b);
v[2]=digitalRead(code_c);
while(1){
if (v[0]==0 && v[1]==0 && v[2]==0){
num[0]++;
if (num[0]>count){
return(0);
num[0]=0;
break;
} }
else if (v[0]==0 && v[1]==0 && v[2]==1){
num[1]++;
if (num[1]>count){
return(1);
num[1]=0;
break;
} }
else if (v[0]==0 && v[1]==1 && v[2]==0){
num[2]++;
if (num[2]>count){
return(2);
num[2]=0;
} }
else if (v[0]==0 && v[1]==1 && v[2]==1){
num[3]++;
if (num[3]>count){
return(3);
num[3]=0;
break;
} }
else if (v[0]==1 && v[1]==0 && v[2]==0){
num[4]++;
if (num[4]>count){
return(4);
num[4]=0;
break;
} }
else if (v[0]==1 && v[1]==0 && v[2]==1){
num[5]++;
if (num[5]>count){
return(5);
num[5]=0;
break;
} }
else if (v[0]==1 && v[1]==1 && v[2]==0){
num[6]++;
if (num[6]>count){
return(6);
num[6]=0;
break;
} }
else if (v[0]==1 && v[1]==1 && v[2]==1){
num[7]++;
if (num[7]>count){
return(7);
num[7]=0;
break;
} }
}
}
void loop(){
int co;
co=getCode();
if (co!=0){
Serial.print("got code,the code is ");
Serial.println(co);
}
else{Serial.println("No code");}
}
void loop1(){
sentCode(2);
while(1){;}
while(0){
if(a>7){a=0;}
Serial.print("a=");
Serial.println(a);
sentCode(a);
a=a+1;
}
}