问题描述
我正在使用带有Adafruit_GFX
和Adafruit_SSD1306
库的oled显示器。
我正在尝试在OLED显示屏上创建菜单(一系列不同的图像)。我创建了代码,当按下一个按钮时,屏幕将变为一幅图像,而当再次按下时,屏幕将变为第二幅图像。但是,我想在此添加第三张图像,这样,当您按下按钮时,将显示第一张图像,然后再次按下按钮,将显示第二张图像,然后再次按下按钮,然后显示第三张图像。我已经尝试了好几个小时都没有成功。
这是我的代码,因为图像太大,我没有包含图像的代码。
#include <Adafruit_SSD1306.h>
#include <splash.h>
#define bitmap_height 128
#define bitmap_width 64
#include <Wire.h>
#include <Adafruit_GFX.h>
#define YELLOW 0xFFE0
#define OLED_RESET -1
Adafruit_SSD1306 display(OLED_RESET);
int buttonState1 = 0;
const int BUTTON_PIN1 = 2;
int toggle = 0;
const unsigned char s1 [] PROGMEM = {
//image code
};
const unsigned char s2 [] PROGMEM = {
//second image code
};
void setup() {
pinMode(BUTTON_PIN1,INPUT_PULLUP);
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.clearDisplay();
}
void loop()
{
buttonState1 = digitalRead(BUTTON_PIN1);
if (buttonState1 == LOW) {
if (toggle ==0) {
display.clearDisplay();
display.drawBitmap(0,s1,bitmap_height,bitmap_width,WHITE);
display.display();
toggle = 1;
} else {
display.clearDisplay();
display.drawBitmap(0,s2,WHITE);
display.display();
toggle = 0;
}
}
}
解决方法
您可以执行以下操作(未经测试):
xmlns:vm="clr-namespace:MyViewModels"
...
<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
...
Command="{Binding Source={RelativeSource AncestorType={x:Type vm:MyViewModel}},Path=MyCommand}"
CommandParameter="{Binding .}"
,
您将必须将screed data
放入数组中。然后,您可以使用其索引访问每个屏幕。
像这样
#define MAX_SCREENS 3
const unsigned char s1[] = { /* image 1 data*/ };
const unsigned char s2[] = { /* image 2 data*/ };
const unsigned char s3[] = { /* image 3 data*/ };
const unsigned char *screen[MAX_SCREEN] =
{
s1,s2,s3
};
并且您需要使用状态变化检测来检测何时按下按钮,如果变量currentScreen
小于MAX_SCREEN
,则增加变量0
,否则将其设置为void loop ()
{
bool state = digitalRead(buttonPIN);
static bool previousState = false;
static int currentScreen = 0;
if(state != previousState && state) {
if(currentScreen == MAX_SCREENS)
currentScreen = 0;
else
currentScreen++;
// code for displaying the screen
}
previousState = state;
}
。
将此作为参考
screen[currentScreen]
然后您可以使用 SELECT *
FROM EMPLOYEE_HISTORY
WHERE supervisor_login_name IN (select login_name from EMPLOYEE_HISTORY WHERE supervisor_login_name IN ('a','b','c','d','e')
and is_active_record = 'Y'
and is_employed = 'Y' ) and is_active_record = 'Y'
and is_employed = 'Y'
OR supervisor_login_name IN (select supervisor_login_name from EMPLOYEE_HISTORY WHERE supervisor_login_name IN ('a','e')
and is_active_record = 'Y'
and is_employed = 'Y')
and is_active_record = 'Y'
and is_employed = 'Y'
OR supervisor_login_name IN (select login_name from EMPLOYEE_HISTORY WHERE supervisor_login_name IN(select login_name from EMPLOYEE_HISTORY WHERE supervisor_login_name in ('a','e') and is_active_record = 'Y'
and is_employed = 'Y')
and is_active_record = 'Y'
and is_employed = 'Y')
and is_active_record = 'Y'
and is_employed = 'Y'
显示图像(屏幕)。
如果您不知道状态变化检测的工作原理,可以在Arduino ide中的示例中找到它