#设计三个光发射,两个光敏接收(硬件限制),根据不同接收结果判断光的吸收情况
#方波发生器(作为光发射器供电)
因软件限制,故用电阻模拟发射装置,LED模拟光敏电阻情况,通过取得光敏电阻上的电压信号来提取光信号,之后经过时分复用,
判断出没个光的接收状况,最后产生的信号是方波
下一步设想是将信号传给上位机,进行物质判断,但这其中一直没设计AD模数转换,也没涉及汇编,不知是否正确
#设计三个光发射,两个光敏接收(硬件限制),根据不同接收结果判断光的吸收情况
#方波发生器(作为光发射器供电)
因软件限制,故用电阻模拟发射装置,LED模拟光敏电阻情况,通过取得光敏电阻上的电压信号来提取光信号,之后经过时分复用,
判断出没个光的接收状况,最后产生的信号是方波
下一步设想是将信号传给上位机,进行物质判断,但这其中一直没设计AD模数转换,也没涉及汇编,不知是否正确
以下答案引用自GPT-3大模型,请合理使用:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define PI 3.14159265358979323846
#define MAX_INT 2147483647
#define MAX_DELAY 1000000
unsigned char led = 7;
unsigned char inPin1 = 2;
unsigned char inPin2 = 3;
unsigned char inPin3 = 4;
unsigned char inPin4 = 5;
unsigned char inPin5 = 6;
unsigned char outPin = 0;
unsigned char counter = 0;
unsigned char transmitter = 0;
unsigned char receiver = 0;
unsigned char state = 0;
unsigned char sum = 0;
unsigned char data = 0;
unsigned char result = 0;
unsigned char signal = 0;
unsigned char time = 0;
void setup()
{
pinMode(led, OUTPUT);
pinMode(inPin1, INPUT);
pinMode(inPin2, INPUT);
pinMode(inPin3, INPUT);
pinMode(inPin4, INPUT);
pinMode(inPin5, INPUT);
pinMode(outPin, OUTPUT);
digitalWrite(led, HIGH);
}
void loop()
{
if (counter > 0)
{
transmitter = counter;
counter = 0;
}
else
{
transmitter = 0;
}
if (state == 0)
{
digitalWrite(outPin, HIGH);
delayMicroseconds(transmitter);
digitalWrite(outPin, LOW);
}
else
{
digitalWrite(outPin, HIGH);
delayMicroseconds(transmitter);
digitalWrite(outPin, LOW);
delayMicroseconds(MAX_DELAY);
}
sum = 0;
for (int i = 0; i < 8; i++)
{
data = (unsigned char)i;
result = data * signal + sum;
sum = result / (MAX_INT / 8);
}
signal = result;
time = millis();
if (time > (MAX_DELAY))
{
state++;
if (state > 3)
{
state = 0;
}
}
else
{
if (inPin1 == HIGH && inPin2 == LOW && inPin3 == HIGH && inPin4 == LOW)
{
receiver = 1;
}
if (inPin1 == HIGH && inPin2 == HIGH && inPin3 == LOW && inPin4 == LOW)
{
receiver = 2;
}
if (inPin1 == LOW && inPin2 == HIGH && inPin3 == LOW && inPin4 == HIGH)
{
receiver = 3;
}
if (inPin1 == LOW && inPin2 == LOW && inPin3 == HIGH && inPin4 == HIGH)
{
receiver = 4;
}
}
if (inPin1 == HIGH && inPin2 == LOW && inPin3 == HIGH && inPin4 == HIGH)
result = 1;
if (inPin1 == HIGH && inPin2 == HIGH && inPin3 == LOW && inPin4 == HIGH)
result = 2;
if (inPin1 == LOW && inPin2 == HIGH && inPin3 == LOW && inPin4 == HIGH)
result = 3;
if (inPin1 == LOW && inPin2 == LOW && inPin3 == HIGH && inPin4 == HIGH)
result = 4;
printf("%d
", result);
}