- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景:我目前正在为“Uncanny Eyes”开发 Adafruit 程序。我的目的是能够有几个瞬时开关,将静态图像绘制到一对 1.5 英寸 OLED 上。
该程序使用 Teensy 3.1 或 3.2。
收到错误后我目前陷入困境
In function 'void drawEye(uint8_t, uint16_t)': uncannyEyes:146: error: invalid types 'uint16_t {aka short unsigned int}[uint8_t {aka unsigned char}]' for array subscript p = img[screenY][screenX];
我是 Stack Exchange 社区的新人,因此,如果我做错了什么,我深表歉意!
#include <SPI.h>
#include <Adafruit_GFX.h> // Core graphics lib for Adafruit displays
// Enable ONE of these #includes -- HUGE graphics tables for various eyes:
//#include "defaultEye.h" // Standard human-ish hazel eye
//#include "noScleraEye.h" // Large iris, no sclera
//#include "dragonEye.h" // Slit pupil fiery dragon/demon eye
#include "goatEye.h" // Horizontal pupil goat/Krampus eye
// Then tweak settings below, e.g. change IRIS_MIN/MAX or disable TRACKING.
// DISPLAY HARDWARE CONFIG -------------------------------------------------
#include <Adafruit_SSD1351.h> // OLED display library -OR-
//#include <Adafruit_ST7735.h> // TFT display library (enable one only)
#ifdef _ADAFRUIT_ST7735H_
typedef Adafruit_ST7735 displayType; // Using TFT display(s)
#else
typedef Adafruit_SSD1351 displayType; // Using OLED display(s)
#endif
#define DISPLAY_DC 7 // Data/command pin for BOTH displays
#define DISPLAY_RESET 8 // Reset pin for BOTH displays
#define SELECT_L_PIN 9 // LEFT eye chip select pin
#define SELECT_R_PIN 10 // RIGHT eye chip select pin
// INPUT CONFIG (for eye motion -- enable or comment out as needed) --------
#define WINK_L_PIN 0 // Pin for LEFT eye wink button
#define BLINK_PIN 1 // Pin for blink button (BOTH eyes)
#define WINK_R_PIN 2 // Pin for RIGHT eye wink button
#define IMAGE_4 3 // Pin for RIGHT eye wink button
#define IMAGE_5 4 // Pin for RIGHT eye wink button
//#define AUTOBLINK // If enabled, eyes blink autonomously
// Probably don't need to edit any config below this line, -----------------
// unless building a single-eye project (pendant, etc.), in which case one
// of the two elements in the eye[] array further down can be commented out.
// Eye blinks are a tiny 3-state machine. Per-eye allows winks + blinks.
#define NOBLINK 0 // Not currently engaged in a blink
#define ENBLINK 1 // Eyelid is currently closing
#define DEBLINK 2 // Eyelid is currently opening
typedef struct {
int8_t pin; // Optional button here for indiv. wink
uint8_t state; // NOBLINK/ENBLINK/DEBLINK
int32_t duration; // Duration of blink state (micros)
uint32_t startTime; // Time (micros) of last state change
} eyeBlink;
struct {
displayType display; // OLED/TFT object
uint8_t cs; // Chip select pin
eyeBlink blink; // Current blink state
} eye[] = { // OK to comment out one of these for single-eye display:
displayType(SELECT_L_PIN,DISPLAY_DC,0),SELECT_L_PIN,{WINK_L_PIN,NOBLINK},
displayType(SELECT_R_PIN,DISPLAY_DC,0),SELECT_R_PIN,{WINK_R_PIN,NOBLINK},
};
#define NUM_EYES (sizeof(eye) / sizeof(eye[0]))
uint8_t
prevBtn = 99, // Button # pressed on last loop() iteration
btnCount = 0; // Number of iterations same button has been held
// INITIALIZATION -- runs once at startup ----------------------------------
void setup(void) {
uint8_t e;
Serial.begin(115200);
randomSeed(analogRead(A3)); // Seed random() from floating analog input
// Both displays share a common reset line; 0 is passed to display
// constructor (so no reset in begin()) -- must reset manually here:
pinMode(DISPLAY_RESET, OUTPUT);
digitalWrite(DISPLAY_RESET, LOW); delay(1);
digitalWrite(DISPLAY_RESET, HIGH); delay(50);
for(e=0; e<NUM_EYES; e++) { // Deselect all
pinMode(eye[e].cs, OUTPUT);
digitalWrite(eye[e].cs, HIGH);
}
for(e=0; e<NUM_EYES; e++) {
digitalWrite(eye[e].cs, LOW); // Select one eye for init
#ifdef _ADAFRUIT_ST7735H_ // TFT
eye[e].display.initR(INITR_144GREENTAB);
#else // OLED
eye[e].display.begin();
#endif
if(eye[e].blink.pin >= 0) pinMode(eye[e].blink.pin, INPUT_PULLUP);
digitalWrite(eye[e].cs, HIGH); // Deselect
}
#ifdef BLINK_PIN
pinMode(BLINK_PIN, INPUT_PULLUP);
#endif
for(uint8_t i=0; i<=6; i++) {
pinMode(i, INPUT);
digitalWrite(i, HIGH); // Enable pullup
}
}
// EYE-RENDERING FUNCTION --------------------------------------------------
SPISettings settings(24000000, MSBFIRST, SPI_MODE3); // Teensy 3.1 max SPI
void drawEye( // Renders one eye.
uint8_t e, // Eye array index; 0 or 1 for left/right
uint16_t img) { // Pointer to image data
uint8_t screenX, screenY;
uint16_t p;
// Set up raw pixel dump to entire screen. Although such writes can wrap
// around automatically from end of rect back to beginning, the region is
// reset on each frame here in case of an SPI glitch.
SPI.beginTransaction(settings);
#ifdef _ADAFRUIT_ST7735H_ // TFT
eye[e].display.setAddrWindow(0, 0, 127, 127);
#else // OLED
eye[e].display.writeCommand(SSD1351_CMD_SETROW); // Y range
eye[e].display.writeData(0); eye[e].display.writeData(SCREEN_HEIGHT - 1);
eye[e].display.writeCommand(SSD1351_CMD_SETCOLUMN); // X range
eye[e].display.writeData(0); eye[e].display.writeData(SCREEN_WIDTH - 1);
eye[e].display.writeCommand(SSD1351_CMD_WRITERAM); // Begin write
#endif
digitalWrite(eye[e].cs, LOW); // Chip select
digitalWrite(DISPLAY_DC, HIGH); // Data mode
// Now just issue raw 16-bit values for every pixel...
for(screenY=0; screenY<SCREEN_HEIGHT; screenY++) {
for(screenX=0; screenX<SCREEN_WIDTH; screenX++) {
p = img[screenY][screenX];
// SPI FIFO technique from Paul Stoffregen's ILI9341_t3 library:
while(KINETISK_SPI0.SR & 0xC000); // Wait for space in FIFO
KINETISK_SPI0.PUSHR = p | SPI_PUSHR_CTAS(1) | SPI_PUSHR_CONT;
}
}
KINETISK_SPI0.SR |= SPI_SR_TCF; // Clear transfer flag
while((KINETISK_SPI0.SR & 0xF000) || // Wait for SPI FIFO to drain
!(KINETISK_SPI0.SR & SPI_SR_TCF)); // Wait for last bit out
digitalWrite(eye[e].cs, HIGH); // Deselect
SPI.endTransaction();
}
// MAIN LOOP -- runs continuously after setup() ----------------------------
void loop() {
uint8_t i;
// Scan buttons 2-6 looking for first button pressed...
for(i=0; (i<2) && (digitalRead(i+2) == HIGH); i++);
if(i < 2) { // Anything pressed? Yes!
if(i == prevBtn) { // Same as last time we checked? Good!
if(++btnCount == 3) { // 3 passes to 'debounce' button input
if(digitalRead(2) == LOW) {
drawEye(0, sclera[0][0]);
drawEye(1, sclera[0][0]);
}
// if(digitalRead(3) == LOW) {
// drawEye(0, polar);
// drawEye(1, polar);
// }
// if(digitalRead(4) == LOW) {
// drawEye(0, sclera[0][0]);
// drawEye(1, polar[0][0]);
// }
// if(digitalRead(5) == LOW) {
// drawEye(0, polar[0][0]);
// drawEye(1, sclera[0][0]);
// }
// if(digitalRead(6) == LOW) {
// drawEye(0, eyeImage[3]);
// drawEye(1, eyeImage[3]);
// }
}
} else btnCount = 0; // Different button than before - start count over
prevBtn = i;
} else prevBtn = 99; // No buttons pressed
}
标题 goatEye.h
没有数组数据,因为帖子会很大
#define SCREEN_HEIGHT 128
#define SCREEN_WIDTH 128
const uint16_t sclera[SCREEN_HEIGHT][SCREEN_WIDTH] = {};
const uint16_t polar[SCREEN_HEIGHT][SCREEN_WIDTH] = {};
感谢您的帮助!
最佳答案
变量img
不是一个指针,它是一个unsigned Short int
,不能像p = img[screenY][screenX];那样访问。
将参数更改为uint16_t* img
并像p = img[screenY*screenX];
那样访问它,然后调用然后像这样调用函数>drawEye(0, 巩膜);
.
关于c - 错误: invalid types 'uint16_t {aka short unsigned int}[uint8_t {aka unsigned char}]' for array subscript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35047768/
在 C 中: int a[10]; printf("%p\n", a); printf("%p\n", &a[0]); 产量: 0x7fff5606c600 0x7fff5606c600 这是我所期望
我一直在尝试运行此循环来更改基于数组的元素的位置,但出现以下错误。不太确定哪里出了问题。任何想法或想法!谢谢。 var population = [[98, 8, 45, 34, 56], [9, 1
我正在尝试获取一个 Ruby 数组数组并将其分组以计算其值。 数组有一个月份和一个 bool 值: array = [["June", false], ["June", false], ["June"
所以我们的目标是在遇到某个元素时将数组分割成子数组下面的示例 array.split("stop here") ["haii", "keep", "these in the same array bu
在this问题已经回答了两个表达式是相等的,但在这种情况下它们会产生不同的结果。对于给定的 int[] 分数,为什么会这样: Arrays.stream(scores) .forEac
我认为我需要的是哈希数组的数组,但我不知道如何制作它。 Perl 能做到吗? 如果是这样,代码会是什么样子? 最佳答案 perldoc perldsc是了解 Perl 数据结构的好文档。 关于arra
我遇到了这个问题,从 API 中我得到一个扩展 JSON,其中包含一个名为坐标的对象,该对象是一个包含数组 o 数组的数组。 为了更清楚地看这个例子: "coordinates": [
postgres 中有(v 9.5,如果重要的话): create table json_test( id varchar NOT NULL, data jsonb NOT NULL, PRIM
我用 echo "${array[@]}" 和 echo "${array[*]}" 得到了相同的结果。 如果我这样做: mkdir 假音乐; touch fakemusic/{Beatles,Sto
我正在尝试创建 typealias 对象的数组数组 - 但我收到“表达式类型不明确,没有更多上下文”编译错误。这是我的代码: typealias TestClosure = ((message: St
如果您在 Python 中创建一维数组,使用 NumPy 包有什么好处吗? 最佳答案 这完全取决于您打算如何处理数组。如果您所做的只是创建简单数据类型的数组并进行 I/O,array模块就可以了。 另
当我将数组推送到只有一个数组作为其唯一元素的数组数组时,为什么会得到这种数据结构? use v6; my @d = ( [ 1 .. 3 ] ); @d.push( [ 4 .. 6 ] ); @d.
在 Julia 中,我想将定义为二维数组向量的数据转换为二维矩阵数组。 如下例所述,我想把数据s转换成数据t,但是至今没有成功。 我该如何处理这个案子? julia> s = [[1 2 3], [4
C 没有elementsof 关键字来获取数组的元素数。所以这通常由计算 sizeof(Array)/sizeof(Array[0]) 代替但这需要重复数组变量名。1[&Array] 是指向数组后第一
所以,假设我有一个像这样的(愚蠢的)函数: function doSomething(input: number|string): boolean { if (input === 42 || in
我有以下数组: a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 我将它用于一些像这样的视觉内容: 1 2 3 4 5 6 7 8 9 10
我想知道数组中的 .toList 与 .to[List] 之间有什么区别。我在spark-shell中做了这个测试,结果没有区别,但我不知道用什么更好。任何意见? scala> val l = Arr
我很难获得完全相同对象的多个元素的当前元素索引: $b = "A","D","B","D","C","E","D","F" $b | ? { $_ -contains "D" } 替代版本: $b =
我正在尝试使用来自我的 API 的 v-select 执行 options,我将数据放在数组数组中。 Array which I got from API 它应该是一个带有搜索的 select,因为它
这个问题在这里已经有了答案: String literals: pointer vs. char array (1 个回答) 4 个月前关闭。 当我执行下一个代码时 int main() {
我是一名优秀的程序员,十分优秀!