如何将Arduino Uno引脚同时用于超声波传感器和显示器?

时间:2019-05-31 19:57:47

标签: c++ arduino arduino-uno arduino-ultra-sonic

我有一个Arduino Uno,一个TFT触摸显示器和一个超声波传感器。由于主板没有足够的引脚,因此我不得不同时将其中一些引脚用于传感器和显示器。不幸的是,如果我更改了其中一个引脚的PinMode(传感器正常工作所必需),则Display会停止正常工作。

我已经正确设置了所有内容,我唯一遇到的麻烦是pinMode。

void setup(void) {
//ULTRASONIC
  pinMode(M1, HIGH);  //to control motor
  pinMode(M2, HIGH);

  Serial.begin(9600);
  //Serial.print("TFT size is "); Serial.print(tft.width()); 
Serial.print("x"); Serial.println(tft.height());
  tft.reset();
   uint16_t identifier = tft.readID();
   if(identifier==0x0101)
  {     
  identifier=0x9341;
   Serial.println(F("Found 0x9341 LCD driver"));
  }  
  tft.begin(identifier);
 }

void loop(void) {
 long duration, inches, cm;

 pinMode(pingPin, OUTPUT);
 digitalWrite(pingPin, LOW);
 delayMicroseconds(2);
 digitalWrite(pingPin, HIGH);
 delayMicroseconds(5);
 digitalWrite(pingPin, LOW);


 pinMode(pingPin, INPUT);

 duration = pulseIn(pingPin, HIGH);

 C =  digitalRead(duration);
 if (C > 2*cm)
 {
 digitalWrite(M1, HIGH);
 }
 else
 { digitalWrite(M1, LOW);}
 // convert the time into a distance

 inches = microsecondsToInches(duration);
 cm = microsecondsToCentimeters(duration);

 Serial.print(inches);  // to serially print the data
 Serial.print("in, ");
 Serial.print(cm);
 Serial.print("cm");
 Serial.println();  
 delay(100);

 tft.fillScreen(WHITE);
 tft.setRotation(1);
 unsigned long start = micros();
 tft.setCursor(20, 80);
 tft.setTextColor(BLACK);  tft.setTextSize(5);
 if(cm < 10){
 tft.println("Thank you");
 delay(2000);
 }
 }

'''''''''''''

应该发生的是,如果Ultrasonic检测到一个距离小于10cm的物体,显示屏将显示“谢谢”。

0 个答案:

没有答案