E_Desharow 2023-02-10 09:27 采纳率: 16.7%
浏览 61
已结题

proteus实现多个传感器模拟

#设计三个光发射,两个光敏接收(硬件限制),根据不同接收结果判断光的吸收情况
#方波发生器(作为光发射器供电)

img

因软件限制,故用电阻模拟发射装置,LED模拟光敏电阻情况,通过取得光敏电阻上的电压信号来提取光信号,之后经过时分复用,

img

img

判断出没个光的接收状况,最后产生的信号是方波

img

下一步设想是将信号传给上位机,进行物质判断,但这其中一直没设计AD模数转换,也没涉及汇编,不知是否正确

  • 写回答

1条回答 默认 最新

  • GISer Liu 2023-02-11 12:33
    关注

    以下答案引用自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);

    }

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月2日
  • 创建了问题 2月10日