极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17796|回复: 5

[求助]請求幫忙呼叫的方式

[复制链接]
发表于 2018-10-12 08:56:06 | 显示全部楼层 |阅读模式
想請問各位先進, 小弟學習不深, 怎麼樣都是不出來, 想請問
我想在OLED 屏上顯示圖型, 但是要根據前面的判斷式去執行
所以設定 a 在 void draw() 裡面
因判斷式結果把 資料送到 a 去執行
但是我試過恨很多種方式, 無法用這種方式把命令call 進去
想問問有甚麼方式呢? ( 小弟翻閱很多資料, 還是無法弄懂)
謝謝

int pin1 = 9;   //Pin9
int pin2 = 10;   //Pin10
int photocellPin1 = 3;
int val1 = 0;         
char a;
U8G2_SSD1306_128X64_NONAME_2_SW_I2C u8g2 (U8G2_R0, A5, A4);

void setup(void) {
  u8g2.begin();   
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);

}

void loop() {  
val1 = digitalRead(photocellPin1);
    if(val1==HIGH){
     digitalWrite(pin1, HIGH);
     digitalWrite(pin2, LOW);
       a="u8g2.drawRFrame(40,17,30,22,7)";
       }
else{
   digitalWrite(pin1, LOW);
   digitalWrite(pin2, HIGH);
      a="u8g2.drawRBox(80,25,20,25,5)";
   }

u8g2.firstPage();  
  do {
    draw();
  } while( u8g2.nextPage() );   
    }  

void draw(){
  u8g2.setFont(u8g2_font_unifont_t_greek);
  u8g2.setCursor(0,16);
  u8g2.print("HC-S Sensor PS");
  a;
}

回复

使用道具 举报

发表于 2018-10-12 10:58:37 | 显示全部楼层
不能这么玩的,建议重新学习C语言
回复 支持 反对

使用道具 举报

发表于 2018-10-12 17:01:16 | 显示全部楼层
你的要求主要包括兩項:
1) 在OLED 屏上顯示圖型
2) 根據前面的判斷式去執行不同的圖形

第一項你是否已能掌握?
回复 支持 反对

使用道具 举报

发表于 2018-10-12 18:04:10 | 显示全部楼层
本帖最后由 eddiewwm 于 2018-10-12 18:08 编辑

若你已掌握了第一項,恭喜你!跟著就是第二項了。

按你的程序,你打算顯示的「不同圖形」,就是
u8g2.drawRFrame(40,17,30,22,7)  和  u8g2.drawRBox(80,25,20,25,5) 的實現結果。

在你的程序裡,你使用的 a="u8g2.drawRFrame(40,17,30,22,7)" 和 a; 的兩句,在 Arduino 雖是能接受,但編譯器會做出與你想像不同的結果,這點你要小心,因自已也沒搞清楚的語句,隨意放在程序裡,出問題是肯定的。簡單地用回原句,基本就可以達到你顯示「不同的圖形」的要求了。

剩下的「根據前面的判斷式去執行...」應如何做呢?一般做法是建立一個旗標,並以此作顯示的判斷,以下是給你參考的,努力!

int pin1 = 9;   //Pin9
int pin2 = 10;   //Pin10
int photocellPin1 = 3;
int val1 = 0;
bool a; //旗標

void setup() {
  // put your setup code here, to run once:
  u8g2.begin();
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
  val1 = digitalRead(photocellPin1);
  if (val1 == HIGH) {
    digitalWrite(pin1, HIGH);
    digitalWrite(pin2, LOW);
    a = true; //設定旗標
  }
  else {
    digitalWrite(pin1, LOW);
    digitalWrite(pin2, HIGH);
    a = false; //設定旗標
  }

  u8g2.firstPage();
  do {
    draw();
  } while ( u8g2.nextPage() );
}

void draw() {
  u8g2.setFont(u8g2_font_unifont_t_greek);
  u8g2.setCursor(0, 16);
  u8g2.print("HC-S Sensor PS");
  // 使用旗標
  if (a) {
    u8g2.drawRFrame(40, 17, 30, 22, 7);
  }
  else {
    u8g2.drawRBox(80, 25, 20, 25, 5);
  }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-12 21:13:43 | 显示全部楼层
eddiewwm 发表于 2018-10-12 17:01
你的要求主要包括兩項:
1) 在OLED 屏上顯示圖型
2) 根據前面的判斷式去執行不同的圖形

大大你好

第一項 在OLED 上面顯示圖型 , 這個部分是可以的
只是加上判斷式後去執行所要顯示的圖型時 ,就出不來
這是我目前碰到的問題
所以才來這邊尋求大大們的幫忙

謝謝
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-14 23:06:16 | 显示全部楼层
eddiewwm 发表于 2018-10-12 18:04
若你已掌握了第一項,恭喜你!跟著就是第二項了。

按你的程序,你打算顯示的「不同圖形」,就是

感謝大大 你明白我的需求
我測試過了,這就是我所要的
這也讓我學習到另外不同的想法

感謝大大
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 13:02 , Processed in 0.073959 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表