我使用SPI通信尝试连接我的Arduino Mega 2560作为主从ADC芯片(Max 1247
)在外部时钟模式,但我一直收到相同的值(RB1=255,RB2=255,RB3=255)
或所有零每当我运行我的代码。还有一个触摸屏(工作)连接。除了与Arduino的ADC芯片通信外,一切正常。
我尝试删除定义头,并改变时钟。也不要改变任何东西(这可能是因为其他错误)。
//Portion of Header
//Defining SPI connections
#define SELPIN 53 //Selection Pin
#define DATAOUT 50 //MIS0
#define DATAIN 51 //MOSI
#define SPICLOCK 52//Clock
#define SSTRB 43 //SSTRB
#include <Adafruit_GFX.h>
#include "MCUFRIEND_kbv.h"
MCUFRIEND_kbv tft(A3, A2, A1, A0, A4);
int sstrb = 0;
byte TB1 = B11101111;
byte RB1;
byte RB2;
byte RB3;
byte RB4;
//SETUP
void setup(){
pinMode(SELPIN, OUTPUT);
pinMode(sstrb, INPUT);
pinMode(DATAOUT, INPUT);
pinMode(DATAIN, OUTPUT);
pinMode(SPICLOCK, OUTPUT);
//disable device to start.
digitalWrite(SELPIN, HIGH);
digitalWrite(SPICLOCK, LOW);
digitalWrite(DATAIN, LOW);
}
void loop(){
//Some other touch screen stuff prefaces this..
else if (currentPage == '3') {
if (tp.z > myTouch.pressureThreshhold) {
x = tp.x;
y = tp.y;
//Back button command
if ((x >= 20) && (x <= 900) && (y >= 0) && (y <= 320)) {
homescreen();
currentPage = '0';
}
else if ((x >= 700) && (x <= 800) && (y >= 350) && (y <= 875)) {
//loop
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
digitalWrite(SELPIN, LOW);
//The line beneath might take care of transmitting dataout, and receiving datain (vs currently doing seperately)?.
RB1 = SPI.transfer(TB1);
Serial.print("\r\nRB1="); Serial.print(RB1);
digitalRead(sstrb);
if (sstrb == 0){
RB2 = SPI.transfer(0x0);
Serial.print("\r\nRB2="); Serial.print(RB2);
RB3 = SPI.transfer(0x0);
Serial.print("\r\nRB3="); Serial.print(RB3);
digitalWrite(SELPIN, HIGH);
digitalWrite(SELPIN, LOW);
SPI.endTransaction();
tft.fillRoundRect(40, 20, 300, 70, 15, RED);
tft.setCursor(150, 45);
tft.setTextColor(WHITE);
tft.setTextSize(3);
tft.print("3A");
tp = myTouch.getPoint();
pinMode(YP, OUTPUT);
pinMode(XM, OUTPUT);
digitalWrite(YP, HIGH);
digitalWrite(XM, HIGH);
}
else{
Serial.print("SSTRB is high");
}
}
}
}
}
错误包括RB1=255;RB2=255;RB3=255或全部为零。
我不能确定这是否是你问题的根源,但我发现了以下内容:
您将SSTRB定义为插脚43
#define SSTRB 43 //SSTRB
但你实际上从未使用过这个值。相反你也定义了
int sstrb = 0;
下面的几行,然后用它来定义引脚0作为输入
pinMode(sstrb, INPUT);
我想这应该是
pinMode(SSTRB, INPUT);
然后,在循环中有这些行
digitalRead(sstrb);
if (sstrb == 0){
如果digitalRead实际上什么都不做(从引脚0读取并丢弃该值),我假设您想要写入
sstrb = digitalRead(SSTRB);
否则,sstrb
实际上永远不会更改,并且始终为0。
另外,由于数据表(https://datasheets.maximintegrated.com/en/ds/MAX1246-MAX1247.pdf#page=13)声明
在外部时钟模式下,[…]。在控制字节的最后一位之后,SSTRB脉冲高达一个时钟周期。
bool wasHigh = false;
do {
sstrb = digitalRead(SSTRB);
if( sstrb == 1 ){
wasHigh = true;
}
}while( !(wasHigh && sstrb == 0) );
请注意,如果脉冲在此等待之前发生,或者从未发生,则您将无休止地停留在该循环中。您可能不想在此处添加中断条件或超时。当然,您也可以使用中断来解决此问题。
在深入了解WebSocket的需求之前,有必要先了解一下现有的技术,这些技术用于服务器和客户端之间的双工通信。这些技术如下 - 轮询 长轮询 数据流 回发和AJAX HTML5 轮询 轮询可以定义为一种方法,无论传输中存在哪些数据,它都执行周期性请求。定期请求以同步方式发送。客户端在指定的时间间隔内向服务器发出定期请求。服务器的响应包括可用数据或其中的一些警告消息。 长轮询 顾名思义,长轮询包括类
我正在构建一个鼓机,我已经存储了一个带有kick声音的示例头文件,它的值介于0和170之间。我想通过SPI将其发送到10位MCP4811 DAC,然后将其输出到3.5毫米音频插孔。 我有我的MISO,MOSI,SCK和复位引脚连接到我的USB编程器以及DAC。 这里是存储在"samples. h"中的音频文件的片段。 因此,它是2221位的样本。我想用SPI发送到DAC,频率=22 kHz。 我使
我的程序从用户那里获取一个URL,所以它可以对互联网上的任何网站提出请求。我试图使这成为可能,我查找了所有关于“Android HTTP Cleartext”错误的答案,并做出了这一点,但它仍然不允许我连接我的测试本地PHP服务器,我在这里遗漏了什么? 我的安全配置:
这是怎么回事?它不是按降序打印考试成绩,我也没有得到平均值的值。显示 0.0 她给我的指示是: 该类将允许用户在数组中输入5个分数。然后它将按降序重新排列数据并计算数据集的平均值。 属性: •data[]-将包含分数的数组 • 平均值 — 分数的算术平均值 方法: 平均-构造函数。它将为数组分配内存。使用for循环重复向用户显示提示,该提示应指示用户应输入分数1、分数2等。注意:计算机从0开始计数
我在viewpager中设置了三个片段,就像滑动选项卡布局一样。我需要将字符串值从一个片段传递到另一个片段。 首先,我试着建立一个接口,就像这里的答案建议如何在片段之间传递数据,这对我不起作用。想法是片段A告诉主活动,然后主活动告诉片段B。 所以我寻找不同的答案 http://android-er.blogspot.com/2012/06/communication-between-fragmen